<?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>191802</bug_id>
          
          <creation_ts>2018-11-16 23:39:51 -0800</creation_ts>
          <short_desc>[WebAssembly] Change BBQ to generate Air IR</short_desc>
          <delta_ts>2019-01-30 22:29:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>193999</blocked>
    
    <blocked>194079</blocked>
    
    <blocked>194036</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>aperez</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1479879</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-11-16 23:39:51 -0800</bug_when>
    <thetext>Template JIT like DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479934</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-11-17 12:09:44 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #0)
&gt; Template JIT like DFG.

I was thinking more like the baseline JIT. It might also be worth considering:
- an interpreter
- lazy compilation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480160</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-11-19 00:15:48 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #1)
&gt; (In reply to Yusuke Suzuki from comment #0)
&gt; &gt; Template JIT like DFG.
&gt; 
&gt; I was thinking more like the baseline JIT. It might also be worth
&gt; considering:

Right, the implementation should be like baseline JIT.

&gt; - an interpreter

If we need an interpreter tier, anyway, I think bytecode for wasm is additionally required. After looking into the wasm format, wasm interpreter should target its own bytecode instead of running wasm code directly, because wasm interpreter needs to decode LEB everytime we execute wasm ops, which is super tricky and costly.

&gt; - lazy compilation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481250</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-11-23 21:54:17 -0800</bug_when>
    <thetext>I think the baseline JIT for wasm can be do some optimizations done in DFG.
One of the good feature of stack VM is that the lifetimes of temporary values are roughly represented without any analysis. This information allows us to stay / spill values in the machine registers, which removes store/load operations :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483941</commentid>
    <comment_count>4</comment_count>
      <attachid>356297</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-11-30 23:16:19 -0800</bug_when>
    <thetext>Created attachment 356297
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483943</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-12-01 00:15:12 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #4)
&gt; Created attachment 356297 [details]
&gt; WIP

👌🏼</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483944</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-12-01 00:17:23 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #3)
&gt; I think the baseline JIT for wasm can be do some optimizations done in DFG.
&gt; One of the good feature of stack VM is that the lifetimes of temporary
&gt; values are roughly represented without any analysis. This information allows
&gt; us to stay / spill values in the machine registers, which removes store/load
&gt; operations :)

This makes sense. It should be mostly free to have some basic register allocation.

I wonder if it’s also worth having some kind of basic instruction selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487137</commentid>
    <comment_count>7</comment_count>
      <attachid>357108</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-12-11 23:20:13 -0800</bug_when>
    <thetext>Created attachment 357108
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487138</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-11 23:26:07 -0800</bug_when>
    <thetext>Attachment 357108 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/RegisterBank.h:47:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:49:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:51:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:71:  NUM_REGS is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:369:  gpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:370:  fpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmRailgunJIT.cpp:312:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 7 in 11 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>1487142</commentid>
    <comment_count>9</comment_count>
      <attachid>357110</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-12-11 23:48:42 -0800</bug_when>
    <thetext>Created attachment 357110
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487145</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-11 23:52:07 -0800</bug_when>
    <thetext>Attachment 357110 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/RegisterBank.h:47:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:49:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:51:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:71:  NUM_REGS is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:369:  gpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:370:  fpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmRailgunJIT.cpp:321:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmRailgunJIT.cpp:344:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 8 in 11 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>1497917</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-24 13:00:06 -0800</bug_when>
    <thetext>I&apos;m going to take this over. I think if we do this right we can get between 4-8% faster on JetStream 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498067</commentid>
    <comment_count>12</comment_count>
      <attachid>360063</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-01-24 17:42:13 -0800</bug_when>
    <thetext>Created attachment 360063
Patch

I&apos;ve just cleaned up the uploaded patch before passing this to Saam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498068</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-24 17:45:03 -0800</bug_when>
    <thetext>Attachment 360063 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmTemplateJIT.cpp:282:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTemplateJIT.cpp:288:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTemplateJIT.cpp:289:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTemplateJIT.cpp:321:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTemplateJIT.cpp:344:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTemplateJIT.cpp:523:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTemplateJIT.cpp:543:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmTemplateJIT.cpp:548:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:47:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:49:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:51:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:71:  NUM_REGS is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:369:  gpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/jit/RegisterBank.h:370:  fpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:216:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:222:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:223:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1018:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1086:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1185:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmValidate.cpp:130:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmValidate.cpp:140:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmValidate.cpp:141:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmValidate.cpp:282:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmValidate.cpp:328:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmValidate.cpp:340:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:336:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:365:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
ERROR: Source/JavaScriptCore/wasm/WasmFunctionParser.h:412:  Use &apos;WTF::Optional&lt;&gt;&apos; instead of &apos;std::optional&lt;&gt;&apos;.  [runtime/wtf_optional] [4]
Total errors found: 29 in 11 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>1498086</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-24 18:48:49 -0800</bug_when>
    <thetext>I spoke with Yusuke and Keith. Our plan is to just generate Air directly, and write a trivial register allocator over Air.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498469</commentid>
    <comment_count>15</comment_count>
      <attachid>360163</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-25 14:23:09 -0800</bug_when>
    <thetext>Created attachment 360163
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498506</commentid>
    <comment_count>16</comment_count>
      <attachid>360171</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-25 15:19:51 -0800</bug_when>
    <thetext>Created attachment 360171
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498624</commentid>
    <comment_count>17</comment_count>
      <attachid>360204</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-25 18:29:30 -0800</bug_when>
    <thetext>Created attachment 360204
WIP

I don&apos;t think I&apos;m too far off from testing out some simple programs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498625</commentid>
    <comment_count>18</comment_count>
      <attachid>360205</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-25 18:36:21 -0800</bug_when>
    <thetext>Created attachment 360205
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498638</commentid>
    <comment_count>19</comment_count>
      <attachid>360205</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-25 19:05:18 -0800</bug_when>
    <thetext>Comment on attachment 360205
WIP

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

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2771
&gt; +    return addShift(Lshift32, arg0, arg1, result);

Oops

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2815
&gt; +    append(NegateDouble, arg0, result);

Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498901</commentid>
    <comment_count>20</comment_count>
      <attachid>360309</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-27 13:43:03 -0800</bug_when>
    <thetext>Created attachment 360309
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498908</commentid>
    <comment_count>21</comment_count>
      <attachid>360310</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-27 15:08:47 -0800</bug_when>
    <thetext>Created attachment 360310
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498916</commentid>
    <comment_count>22</comment_count>
      <attachid>360310</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-27 17:34:39 -0800</bug_when>
    <thetext>Comment on attachment 360310
WIP

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

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:298
&gt; +        m_currentBlock-&gt;setSuccessors(continuation, failed);

Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498970</commentid>
    <comment_count>23</comment_count>
      <attachid>360328</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 02:07:46 -0800</bug_when>
    <thetext>Created attachment 360328
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499179</commentid>
    <comment_count>24</comment_count>
      <attachid>360374</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 14:17:30 -0800</bug_when>
    <thetext>Created attachment 360374
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499217</commentid>
    <comment_count>25</comment_count>
      <attachid>360382</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 15:13:47 -0800</bug_when>
    <thetext>Created attachment 360382
WIP

Seems close to compiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499274</commentid>
    <comment_count>26</comment_count>
      <attachid>360400</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 16:49:13 -0800</bug_when>
    <thetext>Created attachment 360400
WIP

It compiles. Now to see how wrong it is...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499344</commentid>
    <comment_count>27</comment_count>
      <attachid>360415</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 18:52:08 -0800</bug_when>
    <thetext>Created attachment 360415
WIP

Some tests run... Some don&apos;t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499357</commentid>
    <comment_count>28</comment_count>
      <attachid>360420</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 19:21:11 -0800</bug_when>
    <thetext>Created attachment 360420
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499358</commentid>
    <comment_count>29</comment_count>
      <attachid>360421</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 19:23:59 -0800</bug_when>
    <thetext>Created attachment 360421
WIP

Passing like 70% of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499360</commentid>
    <comment_count>30</comment_count>
      <attachid>360423</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 19:31:01 -0800</bug_when>
    <thetext>Created attachment 360423
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499407</commentid>
    <comment_count>31</comment_count>
      <attachid>360423</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 21:37:06 -0800</bug_when>
    <thetext>Comment on attachment 360423
WIP

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

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3031
&gt; +    append(FloorDouble, arg0, result);

Oops. Add test

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3110
&gt; +        append(SubDouble, result, arg0);

Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499445</commentid>
    <comment_count>32</comment_count>
      <attachid>360444</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-28 23:27:37 -0800</bug_when>
    <thetext>Created attachment 360444
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499472</commentid>
    <comment_count>33</comment_count>
      <attachid>360452</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-29 01:00:02 -0800</bug_when>
    <thetext>Created attachment 360452
WIP

Almost all tests pass. Just a few spec-tests left.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499696</commentid>
    <comment_count>34</comment_count>
      <attachid>360495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-29 13:45:29 -0800</bug_when>
    <thetext>Created attachment 360495
WIP

All wasm tests pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499709</commentid>
    <comment_count>35</comment_count>
      <attachid>360498</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-29 14:05:24 -0800</bug_when>
    <thetext>Created attachment 360498
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499813</commentid>
    <comment_count>36</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-29 16:56:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/47651718&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499835</commentid>
    <comment_count>37</comment_count>
      <attachid>360531</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-29 17:51:54 -0800</bug_when>
    <thetext>Created attachment 360531
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500297</commentid>
    <comment_count>38</comment_count>
      <attachid>360648</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-30 17:02:25 -0800</bug_when>
    <thetext>Created attachment 360648
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500300</commentid>
    <comment_count>39</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-30 17:04:49 -0800</bug_when>
    <thetext>Attachment 360648 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1776:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2061:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2197:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2219:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3029:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3383:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 6 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500302</commentid>
    <comment_count>40</comment_count>
      <attachid>360652</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-30 17:07:06 -0800</bug_when>
    <thetext>Created attachment 360652
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500305</commentid>
    <comment_count>41</comment_count>
      <attachid>360652</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-30 17:10:24 -0800</bug_when>
    <thetext>Comment on attachment 360652
patch

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

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:593
&gt; +    Vector&lt;Tmp, 8&gt; m_freeFPTemps;
&gt; +    Vector&lt;Tmp, 8&gt; m_freeGPTemps;

These should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500306</commentid>
    <comment_count>42</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-30 17:10:40 -0800</bug_when>
    <thetext>Attachment 360652 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1776:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2061:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2197:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2219:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3029:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3383:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 6 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500307</commentid>
    <comment_count>43</comment_count>
      <attachid>360655</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-30 17:11:41 -0800</bug_when>
    <thetext>Created attachment 360655
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500310</commentid>
    <comment_count>44</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-30 17:14:52 -0800</bug_when>
    <thetext>Attachment 360655 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1757:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2042:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2178:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2200:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3010:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:3364:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 6 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500340</commentid>
    <comment_count>45</comment_count>
      <attachid>360655</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-30 18:23:52 -0800</bug_when>
    <thetext>Comment on attachment 360655
patch

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

r=me.

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:305
&gt; +        // FIXME: Fins a way to use origin here.

typo: Fins =&gt; Find

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1290
&gt; +    auto storeArg = [&amp;] () {
&gt; +        if (Arg::isValidAddrForm(offset, B3::widthForBytes(sizeOfStoreOp(op))))
&gt; +            return Arg::addr(pointer, offset);
&gt; +        immTmp = g64();
&gt; +        newPtr = g64();
&gt; +        append(Move, Arg::bigImm(offset), immTmp);
&gt; +        append(Add64, immTmp, pointer, newPtr);
&gt; +        return Arg::addr(newPtr);
&gt; +    };

Why not just make an Arg::Addr and pass that in below rather than have a lambda that you call every time?

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2463
&gt; +        // the numbers are would be positive anyway as a signed integer. Since we cannot materialize constants into fprs we have b3 do it

I think you mean air :P

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2541
&gt; +        // the numbers would be positive anyway as a signed integer. Since we cannot materialize constants into fprs we have b3 do it

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500350</commentid>
    <comment_count>46</comment_count>
      <attachid>360655</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-30 18:40:58 -0800</bug_when>
    <thetext>Comment on attachment 360655
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:305
&gt;&gt; +        // FIXME: Fins a way to use origin here.
&gt; 
&gt; typo: Fins =&gt; Find

fixed

&gt;&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:1290
&gt;&gt; +    };
&gt; 
&gt; Why not just make an Arg::Addr and pass that in below rather than have a lambda that you call every time?

sounds good. Will do the same for load.

&gt;&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:2463
&gt;&gt; +        // the numbers are would be positive anyway as a signed integer. Since we cannot materialize constants into fprs we have b3 do it
&gt; 
&gt; I think you mean air :P

Gonna remove these comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500352</commentid>
    <comment_count>47</comment_count>
      <attachid>360669</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-30 18:46:27 -0800</bug_when>
    <thetext>Created attachment 360669
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500353</commentid>
    <comment_count>48</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-30 18:49:54 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/240752/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356297</attachid>
            <date>2018-11-30 23:16:19 -0800</date>
            <delta_ts>2018-12-11 23:20:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-191802-20181201161618.patch</filename>
            <type>text/plain</type>
            <size>71192</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Nzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZDZkMWMwNDJjMTdlNDIxNjk2MWM0ZjU1OGRjNDM1NDRjZjhkNTE5Li45NDI3YmMwZWZhMzQ1NDNh
ODE5MDBlM2Y0MzEzMTZmNTA5NTU0ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MiBAQAorMjAxOC0xMS0zMCAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93
c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gQWRkIHRlbXBsYXRlIEpJVAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgICogaml0L1JlZ2lzdGVyQmFuay5oOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaC4KKyAgICAgICAgKiB3
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6dGVlTG9jYWwpOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6CisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpiaW5hcnlDYXNlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2FzZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Np
b24pOgorICAgICAgICAqIHdhc20vV2FzbVJhaWxndW5KSVQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RhY2tWYWx1ZTo6Y3JlYXRlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTdGFja1ZhbHVlOjpjcmVhdGVMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0YWNr
VmFsdWU6OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1ZhbHVlOjp0eXBl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RhY2tWYWx1ZTo6bG9jYXRpb24gY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1ZhbHVlOjpTdGFja1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q29udHJvbERhdGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q29udHJvbERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250cm9s
RGF0YTo6dHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjpoYXNO
b25Wb2lkU2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udHJvbERhdGE6
OnRhcmdldEJsb2NrRm9yQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udHJvbERhdGE6
OmNvbnZlcnRJZlRvQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250cm9sRGF0YTo6cmVz
dWx0Rm9yQnJhbmNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6ZW1w
dHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6c2V0UGFyc2Vy
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6bG9jayk6CisgICAgICAgIChKU0M6
Oldhc206OlJhaWxndW5KSVQ6OnVubG9jayk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5K
SVQ6OmFsbG9jYXRlR1BSKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6ZmFpbCBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkdQUk9wZXJhbmQ6OkdQUk9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpHUFJPcGVyYW5kOjp+R1BST3BlcmFuZCk6CisgICAgICAgIChKU0M6
Oldhc206OkdQUk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6Oldhc206OlN0YWNrVmFsdWU6
On5TdGFja1ZhbHVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6UmFpbGd1bkpJ
VCk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZEFyZ3VtZW50cyk6CisgICAg
ICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UmFpbGd1bkpJVDo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3Vu
SklUOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OnNldExvY2Fs
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6dGVlTG9jYWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpSYWlsZ3VuSklUOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpS
YWlsZ3VuSklUOjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjps
b2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6c3RvcmUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRHcm93TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UmFpbGd1bkpJVDo6YWRkQ3VycmVudE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlJh
aWxndW5KSVQ6OmFkZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6YWRkU2Vs
ZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6YWRkVG9wTGV2ZWwpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OlJhaWxndW5KSVQ6OmFkZExvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklU
OjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZEVsc2UpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZFJldHVybik6CisgICAgICAgIChKU0M6Oldh
c206OlJhaWxndW5KSVQ6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5K
SVQ6OmFkZFN3aXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmVuZEJsb2Nr
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6
CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZENhbGwpOgorICAgICAgICAoSlND
OjpXYXNtOjpSYWlsZ3VuSklUOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpSYWlsZ3VuSklUOjphZGRVbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxn
dW5KSVQ6OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAg
ICAgICAqIHdhc20vV2FzbVJhaWxndW5KSVQuaDogQWRkZWQuCisgICAgICAgICogd2FzbS9XYXNt
VmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZW1wdHlFeHByZXNz
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OnRlZUxvY2FsKToKKwogMjAxOC0x
MS0zMCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZp
eCBXaW5kb3dzIGJ1aWxkIGJ5IHVzaW5nIHN0cmNtcCBpbnN0ZWFkIG9mIHN0cmNhc2VjbXAuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYzZWYxYzQyMzgwYjNjZWYyZjAwZmFjNjU4
ZTkyZTlkNmU3OTlmMDMuLjNhYTAyZDNjNDgyOWZmZDliMjAwZmQ0NjMyMDM3YWY2NDE2ZTYxNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjI2LDcgKzEyMjYsNyBAQAogCQk4
NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REI4MTMyOERGODIwMDJCMkFENyAvKiBE
RkdHcmFwaC5oICovOyB9OwogCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29t
cGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RUM5REJDMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oICovOyB9OwogCQk4NkVD
OUREMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzAxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR09wZXJhdGlvbnMuaCAqLzsgfTsKLQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovOyB9
OworCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURDMTEzMjhERjgyMDAy
QjJBRDcgLyogUmVnaXN0ZXJCYW5rLmggKi87IH07CiAJCTg2RUM5REQzMTMyOERGODIwMDJCMkFE
NyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZl
SklULmggKi87IH07CiAJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNFOTEzMkRF
RjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJB
RDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCAq
LzsgfTsKQEAgLTM4OTksNyArMzg5OSw3IEBACiAJCTg2RUM5REJDMTMyOERGODIwMDJCMkFENyAv
KiBERkdKSVRDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdK
SVRDb21waWxlci5oOyBwYXRoID0gZGZnL0RGR0pJVENvbXBpbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25z
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09wZXJhdGlvbnMu
Y3BwOyBwYXRoID0gZGZnL0RGR09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NkVDOURDMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcGVyYXRpb25zLmg7IHBhdGggPSBkZmcv
REZHT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkVDOURDMTEz
MjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVyQmFuay5oOyBwYXRoID0gZGZnL0RGR1JlZ2lzdGVyQmFu
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkVDOURDMTEzMjhERjgyMDAyQjJB
RDcgLyogUmVnaXN0ZXJCYW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJl
Z2lzdGVyQmFuay5oOyBwYXRoID0gaml0L1JlZ2lzdGVyQmFuay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVK
SVQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3BlY3VsYXRp
dmVKSVQuY3BwOyBwYXRoID0gZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NwZWN1bGF0aXZl
SklULmg7IHBhdGggPSBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZS5oOyBwYXRoID0gZGZnL0RGR05vZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3MTMsNiArNTcxMyw3IEBACiAJCQkJ
NjU0MEM3OUYxQjgyRDlDRTAwMEY2Qjc5IC8qIFJlZ2lzdGVyQXRPZmZzZXQuaCAqLywKIAkJCQk2
NTQwQzc5QzFCODJEOTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwICovLAog
CQkJCTY1NDBDNzlEMUI4MkQ5OUQwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0TGlzdC5oICov
LAorCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBSZWdpc3RlckJhbmsuaCAqLywKIAkJ
CQk2MjNBMzdFQjFCODdBN0JEMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCAqLywKIAkJCQkwRkMz
MTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEw
MTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICovLApAQCAtNzQ4OCw3ICs3NDg5LDYg
QEAKIAkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJ
CQkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNw
cCAqLywKIAkJCQkwRjNBMUJGODFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5n
UGhhc2UuaCAqLywKLQkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJC
YW5rLmggKi8sCiAJCQkJNzlGQzhBMDcxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRT
dHJ1Y3R1cmUuaCAqLywKIAkJCQk3OTgwQzE2QTFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0
ZXJlZFN0cnVjdHVyZVNldC5jcHAgKi8sCiAJCQkJNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8q
IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCAqLywKQEAgLTg4MDksNyArODgwOSw2IEBACiAJ
CQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkVDOUREMTEzMjhERjgyMDAy
QjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUZDOEEwODFF
MzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzk4MEMxNkQxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdT
YWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtOTUzMiw2ICs5NTMxLDcgQEAKIAkJCQlCQzE4
QzQ1RDBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
MjhDNkM5MURBNDMyRjkwMEQyNTVGRCAvKiBSZWdpc3RlckF0T2Zmc2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzI4QzZDODFEQTQzMDYxMDBEMjU1RkQgLyogUmVnaXN0ZXJBdE9mZnNldExpc3Qu
aCBpbiBIZWFkZXJzICovLAorCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBSZWdpc3Rl
ckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzJCMEVEMUNFNjkwMEYxRjY4MSAvKiBS
ZWdpc3RlcklELmggaW4gSGVhZGVycyAqLywKIAkJCQk2MjNBMzdFQzFCODdBN0MwMDA3NTQyMDkg
LyogUmVnaXN0ZXJNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAz
MzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKaW5kZXggY2JhNGM0YmE2MDA0ZjkzMGQ1Y2E4NTYzMzEwYTYyNDNlMzY0NDllNS4uYTEw
NjUwOGY1OTc1YWRmOTY2M2E3MGQ5NjMwMWRhZGJiNjJiMGFlZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dApAQCAtOTkzLDYgKzk5Myw3IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNt
L1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21Q
bGFuLmNwcAord2FzbS9XYXNtUmFpbGd1bkpJVC5jcHAKIHdhc20vV2FzbVNlY3Rpb25QYXJzZXIu
Y3BwCiB3YXNtL1dhc21TaWduYXR1cmUuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmluZGV4IDQz
Mzc2NDIxNzU2YTk1ZTAwZGZhMDczZGE4N2Y3YzE1NTE3YjY2M2YuLjUxMmZlYTBhZjE3MjliMjFj
MjNhNGQxZjZlNTUzOGI4NDk1MjQ0ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiREZHSklURmlu
YWxpemVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlv
bnMuaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKICNpbmNsdWRlICJERkdTbG93UGF0
aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCiAjaW5jbHVkZSAi
REZHVGh1bmtzLmgiCkBAIC00Myw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJSZWdpc3RlckJhbmsuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1
ZGUgIlZNLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lz
dGVyQmFuay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA0ZjNjYWRiMDRiNzQ1ZDJjNTcwZTU4YWVm
Y2NjOTgzZTJjNGRkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgotI2luY2x1ZGUgIkZQUkluZm8uaCIKLSNpbmNsdWRlICJHUFJJ
bmZvLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gPT09IFJlZ2lz
dGVyQmFuayA9PT0KLS8vCi0vLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBH
UFIgYW5kIEZQUiByZWdpc3RlciBiYW5rcy4KLS8vIEFsbCByZWdpc3RlcnMgaGF2ZSB0d28gcGll
Y2VzIG9mIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGVtOgotLy8gYSBsb2NrIGNvdW50ICh1c2Vk
IHRvIGluZGljYXRlIHRoaXMgcmVnaXN0ZXIgaXMgYWxyZWFkeSBpbiB1c2UKLS8vIGluIGNvZGUg
Z2VuZXJhdGlvbiBvZiB0aGUgY3VycmVudCBub2RlLCBhbmQgY2Fubm90IGJlIHNwaWxsZWQgb3IK
LS8vIGFsbG9jYXRlZCBhcyBhIHRlbXBvcmFyeSksIGFuZCBWaXJ0dWFsUmVnaXN0ZXIgJ25hbWUn
LCByZWNvcmRpbmcKLS8vIHdoaWNoIHZhbHVlIChpZiBhbnkpIGEgbWFjaGluZSByZWdpc3RlciBj
dXJyZW50bHkgaG9sZHMuCi0vLyBFaXRoZXIgb3IgYm90aCBvZiB0aGVzZSBwaWVjZXMgb2YgaW5m
b3JtYXRpb24gbWF5IGJlIHZhbGlkIGZvciBhCi0vLyBnaXZlbiByZWdpc3Rlci4gQSByZWdpc3Rl
ciBtYXkgYmU6Ci0vLwotLy8gIC0gdW5sb2NrZWQsIGFuZCB1bm5hbWVkOiBBdmFpbGFibGUgZm9y
IGFsbG9jYXRpb24uCi0vLyAgLSBsb2NrZWQsIGJ1dCB1bm5hbWVkOiAgIEFscmVhZHkgYWxsb2Nh
dGVkIGFzIGEgdGVtcG9yYXJ5IG9yCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCBmb3IgdGhlIGN1cnJlbnQgbm9kZS4KLS8vICAtIHVubG9ja2VkLCBidXQgbmFtZWQ6ICAgQ29u
dGFpbnMgdGhlIHJlc3VsdCBvZiBhIHByaW9yIG9wZXJhdGlvbiwKLS8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm90IHlldCBpbiB1c2UgZm9yIHRoaXMgbm9kZSwKLS8vICAtIGxvY2tlZCwg
YnV0IG5hbWVkOiAgICAgQ29udGFpbnMgdGhlIHJlc3VsdCBvZiBhIHByaW9yIG9wZXJhdGlvbiwK
LS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBhbGxvY2F0ZWQgYXMgYSBvcGVy
YW5kIHRvIHRoZQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IG9wZXJhdGlv
bi4KLS8vCi0vLyBGb3IgZXZlcnkgbmFtZWQgcmVnaXN0ZXIgd2UgYWxzbyByZWNvcmQgYSBoaW50
IHZhbHVlIGluZGljYXRpbmcKLS8vIHRoZSBvcmRlciBpbiB3aGljaCByZWdpc3RlcnMgc2hvdWxk
IGJlIHNlbGVjdGVkIHRvIGJlIHNwaWxsZWQ7Ci0vLyByZWdpc3RlcnMgdGhhdCBjYW4gYmUgbW9y
ZSBjaGVhcGx5IHNwaWxsZWQgYW5kL29yIGZpbGxlZCBzaG91bGQKLS8vIGJlIHNlbGVjdGVkIGZp
cnN0LgotLy8KLS8vIExvY2tpbmcgcmVnaXN0ZXIgaXMgYSBzdHJvbmcgcmV0ZW50aW9uIG1lY2hh
bmlzbTsgYSBsb2NrZWQgcmVnaXN0ZXIKLS8vIHdpbGwgbmV2ZXIgYmUgcmVhbGxvY2F0ZWQgKHRo
aXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlIG9wZXJhbmRzIHRvCi0vLyB0aGUgY3VycmVudCBub2Rl
IGFyZSBpbiByZWdpc3RlcnMpLiBOYW1pbmcsIGNvbnZlcnNlbHksIGluIGEgd2VhawotLy8gcmV0
ZW50aW9uIG1lY2hhbmlzbSAtIGFsbG9jYXRpbmcgYSByZWdpc3RlciBtYXkgZm9yY2UgYSBuYW1l
ZCB2YWx1ZQotLy8gdG8gYmUgc3BpbGxlZC4KLS8vCi0vLyBBbGwgbmFtZWQgdmFsdWVzIG11c3Qg
YmUgZ2l2ZW4gYSBoaW50IHRoYXQgaXMgZ3JlYXRlciB0aGFuIE1pbiBhbmQKLS8vIGxlc3MgdGhh
biBNYXguCi10ZW1wbGF0ZTxjbGFzcyBCYW5rSW5mbz4KLWNsYXNzIFJlZ2lzdGVyQmFuayB7Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIFJlZ0lEOwotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgTlVNX1JFR1MgPSBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
Ci0KLSAgICB0eXBlZGVmIHVpbnQzMl90IFNwaWxsSGludDsKLSAgICBzdGF0aWMgY29uc3QgU3Bp
bGxIaW50IFNwaWxsSGludEludmFsaWQgPSAweGZmZmZmZmZmOwotCi1wdWJsaWM6Ci0gICAgUmVn
aXN0ZXJCYW5rKCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gQXR0ZW1wdCB0byBhbGxvY2F0ZSBh
IHJlZ2lzdGVyIC0gdGhpcyBmdW5jdGlvbiBmaW5kcyBhbiB1bmxvY2tlZAotICAgIC8vIHJlZ2lz
dGVyLCBsb2NrcyBpdCwgYW5kIHJldHVybnMgaXQuIElmIG5vbmUgY2FuIGJlIGZvdW5kLCB0aGlz
Ci0gICAgLy8gcmV0dXJucyAtMSAoSW52YWxpZEdQUlJlZyBvciBJbnZhbGlkRlBSUmVnKS4KLSAg
ICBSZWdJRCB0cnlBbGxvY2F0ZSgpCi0gICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdu
b3JlZCA9IFZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IE5VTV9SRUdTOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9kYXRhW2ld
LmxvY2tDb3VudCAmJiAhbV9kYXRhW2ldLm5hbWUuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0ZUludGVybmFsKGksIGlnbm9yZWQpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gKFJlZ0lEKS0xOwotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIGEg
cmVnaXN0ZXIgLSB0aGlzIGZ1bmN0aW9uIGZpbmRzIGFuIHVubG9ja2VkIHJlZ2lzdGVyLAotICAg
IC8vIGxvY2tzIGl0LCBhbmQgcmV0dXJucyBpdC4gSWYgYW55IG5hbWVkIHJlZ2lzdGVycyBleGlz
dCwgb25lCi0gICAgLy8gb2YgdGhlc2Ugc2hvdWxkIGJlIHNlbGVjdGVkIHRvIGJlIGFsbG9jYXRl
ZC4gSWYgYWxsIHVubG9ja2VkCi0gICAgLy8gcmVnaXN0ZXJzIGFyZSBuYW1lZCwgdGhlbiBvbmUg
b2YgdGhlIG5hbWVkIHJlZ2lzdGVycyB3aWxsIG5lZWQKLSAgICAvLyB0byBiZSBzcGlsbGVkLiBJ
biB0aGlzIGNhc2UgdGhlIHJlZ2lzdGVyIHNlbGVjdGVkIHRvIGJlIHNwaWxsZWQKLSAgICAvLyB3
aWxsIGJlIG9uZSBvZiB0aGUgcmVnaXN0ZXJzIHRoYXQgaGFzIHRoZSBsb3dlc3QgJ3NwaWxsT3Jk
ZXInCi0gICAgLy8gY29zdCBhc3NvY2lhdGVkIHdpdGggaXQuCi0gICAgLy8KLSAgICAvLyBUaGlz
IG1ldGhvZCBzZWxlY3QgdGhlIHJlZ2lzdGVyIHRvIGJlIGFsbG9jYXRlZCwgYW5kIGNhbGxzIHRo
ZQotICAgIC8vIHByaXZhdGUgJ2FsbG9jYXRlSW50ZXJuYWwnIG1ldGhvZCB0byB1cGRhdGUgaW50
ZXJuYWwgZGF0YQotICAgIC8vIHN0cnVjdHVyZXMgYWNjb3JkaW5nbHkuCi0gICAgUmVnSUQgYWxs
b2NhdGUoVmlydHVhbFJlZ2lzdGVyICZzcGlsbE1lKQotICAgIHsKLSAgICAgICAgdWludDMyX3Qg
Y3VycmVudExvd2VzdCA9IE5VTV9SRUdTOwotICAgICAgICBTcGlsbEhpbnQgY3VycmVudFNwaWxs
T3JkZXIgPSBTcGlsbEhpbnRJbnZhbGlkOwotCi0gICAgICAgIC8vIFRoaXMgbG9vcCBpcyBicm9r
ZW4gaW50byB0d28gaGFsdmVzLCBsb29waW5nIGZyb20gdGhlIGxhc3QgYWxsb2NhdGVkCi0gICAg
ICAgIC8vIHJlZ2lzdGVyICh0aGUgcmVnaXN0ZXIgcmV0dXJuZWQgbGFzdCB0aW1lIHRoaXMgbWV0
aG9kIHdhcyBjYWxsZWQpIHRvCi0gICAgICAgIC8vIHRoZSBtYXhpbXVtIHJlZ2lzdGVyIHZhbHVl
LCB0aGVuIGZyb20gMCB0byB0aGUgbGFzdCBhbGxvY2F0ZWQuCi0gICAgICAgIC8vIFRoaXMgaW1w
bGVtZW50cyBhIHNpbXBsZSByb3VuZC1yb2JpbiBsaWtlIGFwcHJvYWNoIHRvIHRyeSB0byByZWR1
Y2UKLSAgICAgICAgLy8gdGhyYXNoLCBhbmQgbWluaW1pemUgdGltZSBzcGVudCBzY2FubmluZyBs
b2NrZWQgcmVnaXN0ZXJzIGluIGFsbG9jYXRpb24uCi0gICAgICAgIC8vIElmIGEgdW5sb2NrZWQg
YW5kIHVubmFtZWQgcmVnaXN0ZXIgaXMgZm91bmQgcmV0dXJuIGl0IGltbWVkaWF0ZWx5LgotICAg
ICAgICAvLyBPdGhlcndpc2UsIGZpbmQgdGhlIGZpcnN0IHVubG9ja2VkIHJlZ2lzdGVyIHdpdGgg
dGhlIGxvd2VzdCBzcGlsbE9yZGVyLgotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwIDsgaSA8
IE5VTV9SRUdTOyArK2kpIHsKLSAgICAgICAgICAgIC8vICgxKSBJZiB0aGUgY3VycmVudCByZWdp
c3RlciBpcyBsb2NrZWQsIGl0IGlzIG5vdCBhIGNhbmRpZGF0ZS4KLSAgICAgICAgICAgIGlmICht
X2RhdGFbaV0ubG9ja0NvdW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgLy8gKDIpIElmIHRoZSBjdXJyZW50IHJlZ2lzdGVyJ3Mgc3BpbGwgb3JkZXIgaXMgMCwgcGlj
ayB0aGlzISDigJMgdW5hc3NpZ25lZCByZWdpc3RlcnMgaGF2ZSBzcGlsbCBvcmRlciAwLgotICAg
ICAgICAgICAgU3BpbGxIaW50IHNwaWxsT3JkZXIgPSBtX2RhdGFbaV0uc3BpbGxPcmRlcjsKLSAg
ICAgICAgICAgIGlmIChzcGlsbE9yZGVyID09IFNwaWxsSGludEludmFsaWQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJuYWwoaSwgc3BpbGxNZSk7Ci0gICAgICAgICAgICAv
LyBJZiB0aGlzIHJlZ2lzdGVyIGlzIGJldHRlciAoaGFzIGEgbG93ZXIgc3BpbGwgb3JkZXIgdmFs
dWUpIHRoYW4gYW55IHByaW9yCi0gICAgICAgICAgICAvLyBjYW5kaWRhdGUsIHRoZW4gcmVjb3Jk
IGl0LgotICAgICAgICAgICAgaWYgKHNwaWxsT3JkZXIgPCBjdXJyZW50U3BpbGxPcmRlcikgewot
ICAgICAgICAgICAgICAgIGN1cnJlbnRTcGlsbE9yZGVyID0gc3BpbGxPcmRlcjsKLSAgICAgICAg
ICAgICAgICBjdXJyZW50TG93ZXN0ID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIERlYWRsb2NrIGNoZWNrIC0gdGhpcyBjb3VsZCBvbmx5IG9jY3VyIGlzIGFsbCBy
ZWdpc3RlcnMgYXJlIGxvY2tlZCEKLSAgICAgICAgQVNTRVJUKGN1cnJlbnRMb3dlc3QgIT0gTlVN
X1JFR1MgJiYgY3VycmVudFNwaWxsT3JkZXIgIT0gU3BpbGxIaW50SW52YWxpZCk7Ci0gICAgICAg
IC8vIFRoZXJlIHdlcmUgbm8gYXZhaWxhYmxlIHJlZ2lzdGVyczsgY3VycmVudExvd2VzdCB3aWxs
IG5lZWQgdG8gYmUgc3BpbGxlZC4KLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJuYWwoY3Vy
cmVudExvd2VzdCwgc3BpbGxNZSk7Ci0gICAgfQotCi0gICAgdWludDMyX3QgbG9ja2VkQ291bnQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgdWludDMyX3QgY291bnQgPSAwOwotICAgICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwIDsgaSA8IE5VTV9SRUdTOyArK2kpIHsKLSAgICAgICAgICAgIGlmICht
X2RhdGFbaV0ubG9ja0NvdW50KQotICAgICAgICAgICAgICAgICsrY291bnQ7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGNvdW50OwotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlcyB0aGUgZ2l2
ZW4gcmVnaXN0ZXIsIGV2ZW4gaWYgdGhpcyB3aWxsIGZvcmNlIGEgc3BpbGwuCi0gICAgVmlydHVh
bFJlZ2lzdGVyIGFsbG9jYXRlU3BlY2lmaWMoUmVnSUQgcmVnKQotICAgIHsKLSAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBCYW5rSW5mbzo6dG9JbmRleChyZWcpOwotCi0gICAgICAgICsrbV9kYXRh
W2luZGV4XS5sb2NrQ291bnQ7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbmFtZUF0
SW5kZXgoaW5kZXgpOwotICAgICAgICBpZiAobmFtZS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBy
ZWxlYXNlQXRJbmRleChpbmRleCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbmFtZTsKLSAg
ICB9Ci0KLSAgICAvLyByZXRhaW4vcmVsZWFzZSAtIHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8g
YXNzb2NpYXRlL2Rpc2Fzc29jaWF0ZSBuYW1lcwotICAgIC8vIHdpdGggdmFsdWVzIGluIHJlZ2lz
dGVycy4gcmV0YWluIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBsb2NrZWQgcmVnaXN0ZXJzLgot
ICAgIHZvaWQgcmV0YWluKFJlZ0lEIHJlZywgVmlydHVhbFJlZ2lzdGVyIG5hbWUsIFNwaWxsSGlu
dCBzcGlsbE9yZGVyKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBCYW5rSW5mbzo6
dG9JbmRleChyZWcpOwotCi0gICAgICAgIC8vIFNwaWxsSGludCBtdXN0IGJlIHZhbGlkLgotICAg
ICAgICBBU1NFUlQoc3BpbGxPcmRlciAhPSBTcGlsbEhpbnRJbnZhbGlkKTsKLSAgICAgICAgLy8g
J2luZGV4JyBtdXN0IGJlIGEgdmFsaWQsIGxvY2tlZCByZWdpc3Rlci4KLSAgICAgICAgQVNTRVJU
KGluZGV4IDwgTlVNX1JFR1MpOwotICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5sb2NrQ291
bnQpOwotICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBub3QgY3VycmVudGx5IGJlIG5hbWVkLCB0
aGUgbmV3IG5hbWUgbXVzdCBiZSB2YWxpZC4KLSAgICAgICAgQVNTRVJUKCFtX2RhdGFbaW5kZXhd
Lm5hbWUuaXNWYWxpZCgpKTsKLSAgICAgICAgQVNTRVJUKG5hbWUuaXNWYWxpZCgpKTsKLSAgICAg
ICAgLy8gJ2luZGV4JyBzaG91bGQgbm90IGN1cnJlbnRseSBoYXZlIGEgc3BpbGxPcmRlci4KLSAg
ICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciA9PSBTcGlsbEhpbnRJbnZhbGlk
KTsKLQotICAgICAgICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBuYW1lOwotICAgICAgICBtX2RhdGFb
aW5kZXhdLnNwaWxsT3JkZXIgPSBzcGlsbE9yZGVyOwotICAgIH0KLSAgICB2b2lkIHJlbGVhc2Uo
UmVnSUQgcmVnKQotICAgIHsKLSAgICAgICAgcmVsZWFzZUF0SW5kZXgoQmFua0luZm86OnRvSW5k
ZXgocmVnKSk7Ci0gICAgfQotCi0gICAgLy8gbG9jay91bmxvY2sgcmVnaXN0ZXIsIGVuc3VyZXMg
dGhhdCB0aGV5IGFyZSBub3Qgc3BpbGxlZC4KLSAgICB2b2lkIGxvY2soUmVnSUQgcmVnKQotICAg
IHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBCYW5rSW5mbzo6dG9JbmRleChyZWcpOwotCi0g
ICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKLSAgICAgICAgKyttX2RhdGFbaW5kZXhd
LmxvY2tDb3VudDsKLSAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKLSAg
ICB9Ci0gICAgdm9pZCB1bmxvY2soUmVnSUQgcmVnKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBCYW5rSW5mbzo6dG9JbmRleChyZWcpOwotCi0gICAgICAgIEFTU0VSVChpbmRleCA8
IE5VTV9SRUdTKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKLSAg
ICAgICAgLS1tX2RhdGFbaW5kZXhdLmxvY2tDb3VudDsKLSAgICB9Ci0gICAgYm9vbCBpc0xvY2tl
ZChSZWdJRCByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNMb2NrZWRBdEluZGV4
KEJhbmtJbmZvOjp0b0luZGV4KHJlZykpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgbmFtZSAo
VmlydHVhbFJlZ2lzdGVyKSBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICAgLy8gZ2l2ZW4gcmVnaXN0
ZXIgKG9yIGRlZmF1bHQgVmlydHVhbFJlZ2lzdGVyKCkgZm9yIG5vbmUpLgotICAgIFZpcnR1YWxS
ZWdpc3RlciBuYW1lKFJlZ0lEIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBuYW1l
QXRJbmRleChCYW5rSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBp
c0luVXNlKFJlZ0lEIHJlZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0xvY2tlZChy
ZWcpIHx8IG5hbWUocmVnKS5pc1ZhbGlkKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcCgp
Ci0gICAgewotICAgICAgICAvLyBGb3IgZWFjaCByZWdpc3RlciwgcHJpbnQgdGhlIFZpcnR1YWxS
ZWdpc3RlciAnbmFtZScuCi0gICAgICAgIGZvciAodWludDMyX3QgaSA9MDsgaSA8IE5VTV9SRUdT
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5uYW1lLm9mZnNldCgpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiWy0tXSIpOwotICAg
ICAgICB9Ci0gICAgICAgIGRhdGFMb2dGKCJcbiIpOwotICAgIH0KLQotICAgIGNsYXNzIGl0ZXJh
dG9yIHsKLSAgICBmcmllbmQgY2xhc3MgUmVnaXN0ZXJCYW5rPEJhbmtJbmZvPjsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fYmFuay0+bmFtZUF0SW5kZXgobV9pbmRleCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1fYmFuay0+aXNMb2NrZWRBdEluZGV4KG1faW5kZXgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCByZWxlYXNlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgbV9iYW5r
LT5yZWxlYXNlQXRJbmRleChtX2luZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ0lEIHJl
Z0lEKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjp0b1Jl
Z2lzdGVyKG1faW5kZXgpOwotICAgICAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGNv
bnN0IGNoYXIqIGRlYnVnTmFtZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBCYW5rSW5mbzo6ZGVidWdOYW1lKHJlZ0lEKCkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgIHsKLSAgICAgICAgICAgICsrbV9p
bmRleDsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2JhbmsgPT0gb3RoZXIubV9iYW5rKTsKLSAgICAgICAgICAgIHJl
dHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXg7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNp
Z25lZCBpbmRleCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2luZGV4
OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBpdGVyYXRvcihSZWdpc3RlckJh
bms8QmFua0luZm8+KiBiYW5rLCB1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgICAgIDogbV9iYW5r
KGJhbmspCi0gICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIFJlZ2lzdGVyQmFuazxCYW5rSW5mbz4qIG1fYmFuazsKLSAgICAgICAgdW5z
aWduZWQgbV9pbmRleDsKLSAgICB9OwotCi0gICAgaXRlcmF0b3IgYmVnaW4oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOwotICAgIH0KLQotICAgIGl0ZXJhdG9yIGVu
ZCgpCi0gICAgewotICAgICAgICByZXR1cm4gaXRlcmF0b3IodGhpcywgTlVNX1JFR1MpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzTG9ja2VkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKLSAgICAgICAg
cmV0dXJuIG1fZGF0YVtpbmRleF0ubG9ja0NvdW50OwotICAgIH0KLQotICAgIFZpcnR1YWxSZWdp
c3RlciBuYW1lQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpbmRleCA8IE5VTV9SRUdTKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YVtpbmRleF0ubmFt
ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbGVhc2VBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotICAg
IHsKLSAgICAgICAgLy8gJ2luZGV4JyBtdXN0IGJlIGEgdmFsaWQgcmVnaXN0ZXIuCi0gICAgICAg
IEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKLSAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgY3Vy
cmVudGx5IGJlIG5hbWVkLgotICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5uYW1lLmlzVmFs
aWQoKSk7Ci0gICAgICAgIC8vICdpbmRleCcgc2hvdWxkIGN1cnJlbnRseSBoYXZlIGEgdmFsaWQg
c3BpbGwgb3JkZXIuCi0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgIT0g
U3BpbGxIaW50SW52YWxpZCk7Ci0KLSAgICAgICAgbV9kYXRhW2luZGV4XS5uYW1lID0gVmlydHVh
bFJlZ2lzdGVyKCk7Ci0gICAgICAgIG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciA9IFNwaWxsSGlu
dEludmFsaWQ7Ci0gICAgfQotCi0gICAgLy8gVXNlZCBieSAnYWxsb2NhdGUnLCBhYm92ZSwgdG8g
dXBkYXRlIGluZm9yYW10aW9uIGluIHRoZSBtYXAuCi0gICAgUmVnSUQgYWxsb2NhdGVJbnRlcm5h
bCh1aW50MzJfdCBpLCBWaXJ0dWFsUmVnaXN0ZXIgJnNwaWxsTWUpCi0gICAgewotICAgICAgICAv
LyAnaScgbXVzdCBiZSBhIHZhbGlkLCB1bmxvY2tlZCByZWdpc3Rlci4KLSAgICAgICAgQVNTRVJU
KGkgPCBOVU1fUkVHUyAmJiAhbV9kYXRhW2ldLmxvY2tDb3VudCk7Ci0KLSAgICAgICAgLy8gUmV0
dXJuIHRoZSBWaXJ0dWFsUmVnaXN0ZXIgb2YgdGhlIG5hbWVkIHZhbHVlIGN1cnJlbnRseSBzdG9y
ZWQgaW4KLSAgICAgICAgLy8gdGhlIHJlZ2lzdGVyIGJlaW5nIHJldHVybmVkIC0gb3IgZGVmYXVs
dCBWaXJ0dWFsUmVnaXN0ZXIoKSBpZiBub25lLgotICAgICAgICBzcGlsbE1lID0gbV9kYXRhW2ld
Lm5hbWU7Ci0KLSAgICAgICAgLy8gQ2xlYXIgYW55IG5hbWUvc3BpbGxPcmRlciBjdXJyZW50bHkg
YXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RlciwKLSAgICAgICAgbV9kYXRhW2ldID0gTWFwRW50
cnkoKTsKLSAgICAgICAgLy8gTWFyayB0aGUgcmVnaXN0ZXIgYXMgbG9ja2VkICh3aXRoIGEgbG9j
ayBjb3VudCBvZiAxKS4KLSAgICAgICAgbV9kYXRhW2ldLmxvY2tDb3VudCA9IDE7Ci0KLSAgICAg
ICAgcmV0dXJuIEJhbmtJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgIH0KLQotICAgIC8vID09PSBN
YXBFbnRyeSA9PT0KLSAgICAvLwotICAgIC8vIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9y
bWF0aW9uIGZvciBhbiBpbmRpdmlkdWFsIG1hY2hpbmUgcmVnaXN0ZXIKLSAgICAvLyBiZWluZyBt
YW5hZ2VkIGJ5IHRoZSBSZWdpc3RlckJhbmsuIEZvciBlYWNoIHJlZ2lzdGVyIHdlIHRyYWNrIGEg
bG9jawotICAgIC8vIGNvdW50LCBuYW1lIGFuZCBzcGlsbE9yZGVyIGhpbnQuCi0gICAgc3RydWN0
IE1hcEVudHJ5IHsKLSAgICAgICAgTWFwRW50cnkoKQotICAgICAgICAgICAgOiBuYW1lKFZpcnR1
YWxSZWdpc3RlcigpKQotICAgICAgICAgICAgLCBzcGlsbE9yZGVyKFNwaWxsSGludEludmFsaWQp
Ci0gICAgICAgICAgICAsIGxvY2tDb3VudCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZTsKLSAgICAgICAgU3BpbGxIaW50IHNwaWxsT3JkZXI7
Ci0gICAgICAgIHVpbnQzMl90IGxvY2tDb3VudDsKLSAgICB9OwotCi0gICAgLy8gSG9sZHMgdGhl
IGN1cnJlbnQgc3RhdHVzIG9mIGFsbCByZWdpc3RlcnMuCi0gICAgTWFwRW50cnkgbV9kYXRhW05V
TV9SRUdTXTsKLX07Ci0KLXR5cGVkZWYgUmVnaXN0ZXJCYW5rPEdQUkluZm8+OjppdGVyYXRvciBn
cHJfaXRlcmF0b3I7Ci10eXBlZGVmIFJlZ2lzdGVyQmFuazxGUFJJbmZvPjo6aXRlcmF0b3IgZnBy
X2l0ZXJhdG9yOwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IGFkYjNiYTFj
OGUxN2MwYTQzNWM3NzJmMGZiNDBjMzgzNzA3NDU3MWYuLjAxMDZkN2JmN2JkMTkxY2EyYTk1NjA2
Y2FlOGJkMTExZWM5NDZlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKQEAgLTM0LDExICszNCwxMSBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBp
bGVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKICNpbmNsdWRlICJE
RkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgiCiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5j
bHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKKyNpbmNsdWRlICJS
ZWdpc3RlckJhbmsuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJCYW5rLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQmFuay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzNzQzYjlhOWI2
OWRmOWY5MDQyNWIzYjgwOTA5NDBkNDdmMmVlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQmFuay5oCkBAIC0wLDAgKzEsMzc0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJ
bmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyA9PT0gUmVnaXN0ZXJCYW5rID09PQorLy8K
Ky8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIEdQUiBhbmQgRlBSIHJlZ2lz
dGVyIGJhbmtzLgorLy8gQWxsIHJlZ2lzdGVycyBoYXZlIHR3byBwaWVjZXMgb2Ygc3RhdGUgYXNz
b2NpYXRlZCB3aXRoIHRoZW06CisvLyBhIGxvY2sgY291bnQgKHVzZWQgdG8gaW5kaWNhdGUgdGhp
cyByZWdpc3RlciBpcyBhbHJlYWR5IGluIHVzZQorLy8gaW4gY29kZSBnZW5lcmF0aW9uIG9mIHRo
ZSBjdXJyZW50IG5vZGUsIGFuZCBjYW5ub3QgYmUgc3BpbGxlZCBvcgorLy8gYWxsb2NhdGVkIGFz
IGEgdGVtcG9yYXJ5KSwgYW5kIFZpcnR1YWxSZWdpc3RlciAnbmFtZScsIHJlY29yZGluZworLy8g
d2hpY2ggdmFsdWUgKGlmIGFueSkgYSBtYWNoaW5lIHJlZ2lzdGVyIGN1cnJlbnRseSBob2xkcy4K
Ky8vIEVpdGhlciBvciBib3RoIG9mIHRoZXNlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBtYXkgYmUg
dmFsaWQgZm9yIGEKKy8vIGdpdmVuIHJlZ2lzdGVyLiBBIHJlZ2lzdGVyIG1heSBiZToKKy8vCisv
LyAgLSB1bmxvY2tlZCwgYW5kIHVubmFtZWQ6IEF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKy8v
ICAtIGxvY2tlZCwgYnV0IHVubmFtZWQ6ICAgQWxyZWFkeSBhbGxvY2F0ZWQgYXMgYSB0ZW1wb3Jh
cnkgb3IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGZvciB0aGUgY3VycmVu
dCBub2RlLgorLy8gIC0gdW5sb2NrZWQsIGJ1dCBuYW1lZDogICBDb250YWlucyB0aGUgcmVzdWx0
IG9mIGEgcHJpb3Igb3BlcmF0aW9uLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qg
eWV0IGluIHVzZSBmb3IgdGhpcyBub2RlLAorLy8gIC0gbG9ja2VkLCBidXQgbmFtZWQ6ICAgICBD
b250YWlucyB0aGUgcmVzdWx0IG9mIGEgcHJpb3Igb3BlcmF0aW9uLAorLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbHJlYWR5IGFsbG9jYXRlZCBhcyBhIG9wZXJhbmQgdG8gdGhlCisvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgb3BlcmF0aW9uLgorLy8KKy8vIEZvciBl
dmVyeSBuYW1lZCByZWdpc3RlciB3ZSBhbHNvIHJlY29yZCBhIGhpbnQgdmFsdWUgaW5kaWNhdGlu
ZworLy8gdGhlIG9yZGVyIGluIHdoaWNoIHJlZ2lzdGVycyBzaG91bGQgYmUgc2VsZWN0ZWQgdG8g
YmUgc3BpbGxlZDsKKy8vIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSBtb3JlIGNoZWFwbHkgc3BpbGxl
ZCBhbmQvb3IgZmlsbGVkIHNob3VsZAorLy8gYmUgc2VsZWN0ZWQgZmlyc3QuCisvLworLy8gTG9j
a2luZyByZWdpc3RlciBpcyBhIHN0cm9uZyByZXRlbnRpb24gbWVjaGFuaXNtOyBhIGxvY2tlZCBy
ZWdpc3RlcgorLy8gd2lsbCBuZXZlciBiZSByZWFsbG9jYXRlZCAodGhpcyBpcyB1c2VkIHRvIGVu
c3VyZSB0aGUgb3BlcmFuZHMgdG8KKy8vIHRoZSBjdXJyZW50IG5vZGUgYXJlIGluIHJlZ2lzdGVy
cykuIE5hbWluZywgY29udmVyc2VseSwgaW4gYSB3ZWFrCisvLyByZXRlbnRpb24gbWVjaGFuaXNt
IC0gYWxsb2NhdGluZyBhIHJlZ2lzdGVyIG1heSBmb3JjZSBhIG5hbWVkIHZhbHVlCisvLyB0byBi
ZSBzcGlsbGVkLgorLy8KKy8vIEFsbCBuYW1lZCB2YWx1ZXMgbXVzdCBiZSBnaXZlbiBhIGhpbnQg
dGhhdCBpcyBncmVhdGVyIHRoYW4gTWluIGFuZAorLy8gbGVzcyB0aGFuIE1heC4KK3RlbXBsYXRl
PGNsYXNzIEJhbmtJbmZvPgorY2xhc3MgUmVnaXN0ZXJCYW5rIHsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgUmVnSUQ7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBOVU1fUkVHUyA9IEJhbmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKKworICAgIHR5cGVkZWYg
dWludDMyX3QgU3BpbGxIaW50OworICAgIHN0YXRpYyBjb25zdCBTcGlsbEhpbnQgU3BpbGxIaW50
SW52YWxpZCA9IDB4ZmZmZmZmZmY7CisKK3B1YmxpYzoKKyAgICBSZWdpc3RlckJhbmsoKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBBdHRlbXB0IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgLSB0aGlz
IGZ1bmN0aW9uIGZpbmRzIGFuIHVubG9ja2VkCisgICAgLy8gcmVnaXN0ZXIsIGxvY2tzIGl0LCBh
bmQgcmV0dXJucyBpdC4gSWYgbm9uZSBjYW4gYmUgZm91bmQsIHRoaXMKKyAgICAvLyByZXR1cm5z
IC0xIChJbnZhbGlkR1BSUmVnIG9yIEludmFsaWRGUFJSZWcpLgorICAgIFJlZ0lEIHRyeUFsbG9j
YXRlKCkKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpZ25vcmVkID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgTlVN
X1JFR1M7ICsraSkgeworICAgICAgICAgICAgaWYgKCFtX2RhdGFbaV0ubG9ja0NvdW50ICYmICFt
X2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
SW50ZXJuYWwoaSwgaWdub3JlZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biAoUmVnSUQpLTE7CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSByZWdpc3RlciAtIHRoaXMg
ZnVuY3Rpb24gZmluZHMgYW4gdW5sb2NrZWQgcmVnaXN0ZXIsCisgICAgLy8gbG9ja3MgaXQsIGFu
ZCByZXR1cm5zIGl0LiBJZiBhbnkgbmFtZWQgcmVnaXN0ZXJzIGV4aXN0LCBvbmUKKyAgICAvLyBv
ZiB0aGVzZSBzaG91bGQgYmUgc2VsZWN0ZWQgdG8gYmUgYWxsb2NhdGVkLiBJZiBhbGwgdW5sb2Nr
ZWQKKyAgICAvLyByZWdpc3RlcnMgYXJlIG5hbWVkLCB0aGVuIG9uZSBvZiB0aGUgbmFtZWQgcmVn
aXN0ZXJzIHdpbGwgbmVlZAorICAgIC8vIHRvIGJlIHNwaWxsZWQuIEluIHRoaXMgY2FzZSB0aGUg
cmVnaXN0ZXIgc2VsZWN0ZWQgdG8gYmUgc3BpbGxlZAorICAgIC8vIHdpbGwgYmUgb25lIG9mIHRo
ZSByZWdpc3RlcnMgdGhhdCBoYXMgdGhlIGxvd2VzdCAnc3BpbGxPcmRlcicKKyAgICAvLyBjb3N0
IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAgICAvLworICAgIC8vIFRoaXMgbWV0aG9kIHNlbGVjdCB0
aGUgcmVnaXN0ZXIgdG8gYmUgYWxsb2NhdGVkLCBhbmQgY2FsbHMgdGhlCisgICAgLy8gcHJpdmF0
ZSAnYWxsb2NhdGVJbnRlcm5hbCcgbWV0aG9kIHRvIHVwZGF0ZSBpbnRlcm5hbCBkYXRhCisgICAg
Ly8gc3RydWN0dXJlcyBhY2NvcmRpbmdseS4KKyAgICBSZWdJRCBhbGxvY2F0ZShWaXJ0dWFsUmVn
aXN0ZXIgJnNwaWxsTWUpCisgICAgeworICAgICAgICB1aW50MzJfdCBjdXJyZW50TG93ZXN0ID0g
TlVNX1JFR1M7CisgICAgICAgIFNwaWxsSGludCBjdXJyZW50U3BpbGxPcmRlciA9IFNwaWxsSGlu
dEludmFsaWQ7CisKKyAgICAgICAgLy8gVGhpcyBsb29wIGlzIGJyb2tlbiBpbnRvIHR3byBoYWx2
ZXMsIGxvb3BpbmcgZnJvbSB0aGUgbGFzdCBhbGxvY2F0ZWQKKyAgICAgICAgLy8gcmVnaXN0ZXIg
KHRoZSByZWdpc3RlciByZXR1cm5lZCBsYXN0IHRpbWUgdGhpcyBtZXRob2Qgd2FzIGNhbGxlZCkg
dG8KKyAgICAgICAgLy8gdGhlIG1heGltdW0gcmVnaXN0ZXIgdmFsdWUsIHRoZW4gZnJvbSAwIHRv
IHRoZSBsYXN0IGFsbG9jYXRlZC4KKyAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgc2ltcGxl
IHJvdW5kLXJvYmluIGxpa2UgYXBwcm9hY2ggdG8gdHJ5IHRvIHJlZHVjZQorICAgICAgICAvLyB0
aHJhc2gsIGFuZCBtaW5pbWl6ZSB0aW1lIHNwZW50IHNjYW5uaW5nIGxvY2tlZCByZWdpc3RlcnMg
aW4gYWxsb2NhdGlvbi4KKyAgICAgICAgLy8gSWYgYSB1bmxvY2tlZCBhbmQgdW5uYW1lZCByZWdp
c3RlciBpcyBmb3VuZCByZXR1cm4gaXQgaW1tZWRpYXRlbHkuCisgICAgICAgIC8vIE90aGVyd2lz
ZSwgZmluZCB0aGUgZmlyc3QgdW5sb2NrZWQgcmVnaXN0ZXIgd2l0aCB0aGUgbG93ZXN0IHNwaWxs
T3JkZXIuCisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDAgOyBpIDwgTlVNX1JFR1M7ICsraSkg
eworICAgICAgICAgICAgLy8gKDEpIElmIHRoZSBjdXJyZW50IHJlZ2lzdGVyIGlzIGxvY2tlZCwg
aXQgaXMgbm90IGEgY2FuZGlkYXRlLgorICAgICAgICAgICAgaWYgKG1fZGF0YVtpXS5sb2NrQ291
bnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyAoMikgSWYgdGhl
IGN1cnJlbnQgcmVnaXN0ZXIncyBzcGlsbCBvcmRlciBpcyAwLCBwaWNrIHRoaXMhIOKAkyB1bmFz
c2lnbmVkIHJlZ2lzdGVycyBoYXZlIHNwaWxsIG9yZGVyIDAuCisgICAgICAgICAgICBTcGlsbEhp
bnQgc3BpbGxPcmRlciA9IG1fZGF0YVtpXS5zcGlsbE9yZGVyOworICAgICAgICAgICAgaWYgKHNw
aWxsT3JkZXIgPT0gU3BpbGxIaW50SW52YWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWxs
b2NhdGVJbnRlcm5hbChpLCBzcGlsbE1lKTsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgcmVnaXN0
ZXIgaXMgYmV0dGVyIChoYXMgYSBsb3dlciBzcGlsbCBvcmRlciB2YWx1ZSkgdGhhbiBhbnkgcHJp
b3IKKyAgICAgICAgICAgIC8vIGNhbmRpZGF0ZSwgdGhlbiByZWNvcmQgaXQuCisgICAgICAgICAg
ICBpZiAoc3BpbGxPcmRlciA8IGN1cnJlbnRTcGlsbE9yZGVyKSB7CisgICAgICAgICAgICAgICAg
Y3VycmVudFNwaWxsT3JkZXIgPSBzcGlsbE9yZGVyOworICAgICAgICAgICAgICAgIGN1cnJlbnRM
b3dlc3QgPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRGVhZGxv
Y2sgY2hlY2sgLSB0aGlzIGNvdWxkIG9ubHkgb2NjdXIgaXMgYWxsIHJlZ2lzdGVycyBhcmUgbG9j
a2VkIQorICAgICAgICBBU1NFUlQoY3VycmVudExvd2VzdCAhPSBOVU1fUkVHUyAmJiBjdXJyZW50
U3BpbGxPcmRlciAhPSBTcGlsbEhpbnRJbnZhbGlkKTsKKyAgICAgICAgLy8gVGhlcmUgd2VyZSBu
byBhdmFpbGFibGUgcmVnaXN0ZXJzOyBjdXJyZW50TG93ZXN0IHdpbGwgbmVlZCB0byBiZSBzcGls
bGVkLgorICAgICAgICByZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChjdXJyZW50TG93ZXN0LCBzcGls
bE1lKTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBsb2NrZWRDb3VudCgpIGNvbnN0CisgICAgewor
ICAgICAgICB1aW50MzJfdCBjb3VudCA9IDA7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDAg
OyBpIDwgTlVNX1JFR1M7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fZGF0YVtpXS5sb2NrQ291
bnQpCisgICAgICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Y291bnQ7CisgICAgfQorCisgICAgLy8gQWxsb2NhdGVzIHRoZSBnaXZlbiByZWdpc3RlciwgZXZl
biBpZiB0aGlzIHdpbGwgZm9yY2UgYSBzcGlsbC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxsb2Nh
dGVTcGVjaWZpYyhSZWdJRCByZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEJh
bmtJbmZvOjp0b0luZGV4KHJlZyk7CisKKyAgICAgICAgKyttX2RhdGFbaW5kZXhdLmxvY2tDb3Vu
dDsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBuYW1lQXRJbmRleChpbmRleCk7Cisg
ICAgICAgIGlmIChuYW1lLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJlbGVhc2VBdEluZGV4KGlu
ZGV4KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIC8vIHJl
dGFpbi9yZWxlYXNlIC0gdGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBhc3NvY2lhdGUvZGlzYXNz
b2NpYXRlIG5hbWVzCisgICAgLy8gd2l0aCB2YWx1ZXMgaW4gcmVnaXN0ZXJzLiByZXRhaW4gc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIG9uIGxvY2tlZCByZWdpc3RlcnMuCisgICAgdm9pZCByZXRhaW4o
UmVnSUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSwgU3BpbGxIaW50IHNwaWxsT3JkZXIpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEJhbmtJbmZvOjp0b0luZGV4KHJlZyk7CisK
KyAgICAgICAgLy8gU3BpbGxIaW50IG11c3QgYmUgdmFsaWQuCisgICAgICAgIEFTU0VSVChzcGls
bE9yZGVyICE9IFNwaWxsSGludEludmFsaWQpOworICAgICAgICAvLyAnaW5kZXgnIG11c3QgYmUg
YSB2YWxpZCwgbG9ja2VkIHJlZ2lzdGVyLgorICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVH
Uyk7CisgICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLmxvY2tDb3VudCk7CisgICAgICAgIC8v
ICdpbmRleCcgc2hvdWxkIG5vdCBjdXJyZW50bHkgYmUgbmFtZWQsIHRoZSBuZXcgbmFtZSBtdXN0
IGJlIHZhbGlkLgorICAgICAgICBBU1NFUlQoIW1fZGF0YVtpbmRleF0ubmFtZS5pc1ZhbGlkKCkp
OworICAgICAgICBBU1NFUlQobmFtZS5pc1ZhbGlkKCkpOworICAgICAgICAvLyAnaW5kZXgnIHNo
b3VsZCBub3QgY3VycmVudGx5IGhhdmUgYSBzcGlsbE9yZGVyLgorICAgICAgICBBU1NFUlQobV9k
YXRhW2luZGV4XS5zcGlsbE9yZGVyID09IFNwaWxsSGludEludmFsaWQpOworCisgICAgICAgIG1f
ZGF0YVtpbmRleF0ubmFtZSA9IG5hbWU7CisgICAgICAgIG1fZGF0YVtpbmRleF0uc3BpbGxPcmRl
ciA9IHNwaWxsT3JkZXI7CisgICAgfQorICAgIHZvaWQgcmVsZWFzZShSZWdJRCByZWcpCisgICAg
eworICAgICAgICByZWxlYXNlQXRJbmRleChCYW5rSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9
CisKKyAgICAvLyBsb2NrL3VubG9jayByZWdpc3RlciwgZW5zdXJlcyB0aGF0IHRoZXkgYXJlIG5v
dCBzcGlsbGVkLgorICAgIHZvaWQgbG9jayhSZWdJRCByZWcpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IEJhbmtJbmZvOjp0b0luZGV4KHJlZyk7CisKKyAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgTlVNX1JFR1MpOworICAgICAgICArK21fZGF0YVtpbmRleF0ubG9ja0NvdW50OworICAg
ICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5sb2NrQ291bnQpOworICAgIH0KKyAgICB2b2lkIHVu
bG9jayhSZWdJRCByZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEJhbmtJbmZv
Ojp0b0luZGV4KHJlZyk7CisKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOworICAg
ICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5sb2NrQ291bnQpOworICAgICAgICAtLW1fZGF0YVtp
bmRleF0ubG9ja0NvdW50OworICAgIH0KKyAgICBib29sIGlzTG9ja2VkKFJlZ0lEIHJlZykgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0xvY2tlZEF0SW5kZXgoQmFua0luZm86OnRvSW5k
ZXgocmVnKSk7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBuYW1lIChWaXJ0dWFsUmVnaXN0ZXIp
IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAvLyBnaXZlbiByZWdpc3RlciAob3IgZGVmYXVsdCBW
aXJ0dWFsUmVnaXN0ZXIoKSBmb3Igbm9uZSkuCisgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUoUmVn
SUQgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5hbWVBdEluZGV4KEJhbmtJbmZv
Ojp0b0luZGV4KHJlZykpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW5Vc2UoUmVnSUQgcmVn
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzTG9ja2VkKHJlZykgfHwgbmFtZShyZWcp
LmlzVmFsaWQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKCkKKyAgICB7CisgICAgICAg
IC8vIEZvciBlYWNoIHJlZ2lzdGVyLCBwcmludCB0aGUgVmlydHVhbFJlZ2lzdGVyICduYW1lJy4K
KyAgICAgICAgZm9yICh1aW50MzJfdCBpID0wOyBpIDwgTlVNX1JFR1M7ICsraSkgeworICAgICAg
ICAgICAgaWYgKG1fZGF0YVtpXS5uYW1lLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nRigiWyUwMmRdIiwgbV9kYXRhW2ldLm5hbWUub2Zmc2V0KCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJbLS1dIik7CisgICAgICAgIH0KKyAgICAgICAg
ZGF0YUxvZ0YoIlxuIik7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIGZyaWVu
ZCBjbGFzcyBSZWdpc3RlckJhbms8QmFua0luZm8+OworICAgIHB1YmxpYzoKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG5hbWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9iYW5rLT5uYW1lQXRJbmRleChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
aXNMb2NrZWQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iYW5rLT5p
c0xvY2tlZEF0SW5kZXgobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJlbGVh
c2UoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBtX2JhbmstPnJlbGVhc2VBdEluZGV4
KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgUmVnSUQgcmVnSUQoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gQmFua0luZm86OnRvUmVnaXN0ZXIobV9pbmRleCk7
CisgICAgICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgY29uc3QgY2hhciogZGVidWdO
YW1lKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjpkZWJ1
Z05hbWUocmVnSUQoKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgKyttX2luZGV4OworICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KG1fYmFuayA9PSBvdGhlci5tX2JhbmspOworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggIT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGluZGV4KCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIGl0ZXJhdG9yKFJlZ2lzdGVyQmFuazxCYW5rSW5mbz4qIGJh
bmssIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX2JhbmsoYmFuaykKKyAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVn
aXN0ZXJCYW5rPEJhbmtJbmZvPiogbV9iYW5rOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpCisgICAgeworICAgICAgICByZXR1cm4gaXRl
cmF0b3IodGhpcywgMCk7CisgICAgfQorCisgICAgaXRlcmF0b3IgZW5kKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCBOVU1fUkVHUyk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgaXNMb2NrZWRBdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOworICAgICAgICByZXR1cm4gbV9kYXRhW2lu
ZGV4XS5sb2NrQ291bnQ7CisgICAgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWVBdEluZGV4
KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVN
X1JFR1MpOworICAgICAgICByZXR1cm4gbV9kYXRhW2luZGV4XS5uYW1lOworICAgIH0KKworICAg
IHZvaWQgcmVsZWFzZUF0SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICAvLyAn
aW5kZXgnIG11c3QgYmUgYSB2YWxpZCByZWdpc3Rlci4KKyAgICAgICAgQVNTRVJUKGluZGV4IDwg
TlVNX1JFR1MpOworICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkgYmUgbmFtZWQu
CisgICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxpZCgpKTsKKyAgICAgICAg
Ly8gJ2luZGV4JyBzaG91bGQgY3VycmVudGx5IGhhdmUgYSB2YWxpZCBzcGlsbCBvcmRlci4KKyAg
ICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciAhPSBTcGlsbEhpbnRJbnZhbGlk
KTsKKworICAgICAgICBtX2RhdGFbaW5kZXhdLm5hbWUgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgbV9kYXRhW2luZGV4XS5zcGlsbE9yZGVyID0gU3BpbGxIaW50SW52YWxpZDsKKyAgICB9
CisKKyAgICAvLyBVc2VkIGJ5ICdhbGxvY2F0ZScsIGFib3ZlLCB0byB1cGRhdGUgaW5mb3JhbXRp
b24gaW4gdGhlIG1hcC4KKyAgICBSZWdJRCBhbGxvY2F0ZUludGVybmFsKHVpbnQzMl90IGksIFZp
cnR1YWxSZWdpc3RlciAmc3BpbGxNZSkKKyAgICB7CisgICAgICAgIC8vICdpJyBtdXN0IGJlIGEg
dmFsaWQsIHVubG9ja2VkIHJlZ2lzdGVyLgorICAgICAgICBBU1NFUlQoaSA8IE5VTV9SRUdTICYm
ICFtX2RhdGFbaV0ubG9ja0NvdW50KTsKKworICAgICAgICAvLyBSZXR1cm4gdGhlIFZpcnR1YWxS
ZWdpc3RlciBvZiB0aGUgbmFtZWQgdmFsdWUgY3VycmVudGx5IHN0b3JlZCBpbgorICAgICAgICAv
LyB0aGUgcmVnaXN0ZXIgYmVpbmcgcmV0dXJuZWQgLSBvciBkZWZhdWx0IFZpcnR1YWxSZWdpc3Rl
cigpIGlmIG5vbmUuCisgICAgICAgIHNwaWxsTWUgPSBtX2RhdGFbaV0ubmFtZTsKKworICAgICAg
ICAvLyBDbGVhciBhbnkgbmFtZS9zcGlsbE9yZGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGgg
dGhlIHJlZ2lzdGVyLAorICAgICAgICBtX2RhdGFbaV0gPSBNYXBFbnRyeSgpOworICAgICAgICAv
LyBNYXJrIHRoZSByZWdpc3RlciBhcyBsb2NrZWQgKHdpdGggYSBsb2NrIGNvdW50IG9mIDEpLgor
ICAgICAgICBtX2RhdGFbaV0ubG9ja0NvdW50ID0gMTsKKworICAgICAgICByZXR1cm4gQmFua0lu
Zm86OnRvUmVnaXN0ZXIoaSk7CisgICAgfQorCisgICAgLy8gPT09IE1hcEVudHJ5ID09PQorICAg
IC8vCisgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGFuIGlu
ZGl2aWR1YWwgbWFjaGluZSByZWdpc3RlcgorICAgIC8vIGJlaW5nIG1hbmFnZWQgYnkgdGhlIFJl
Z2lzdGVyQmFuay4gRm9yIGVhY2ggcmVnaXN0ZXIgd2UgdHJhY2sgYSBsb2NrCisgICAgLy8gY291
bnQsIG5hbWUgYW5kIHNwaWxsT3JkZXIgaGludC4KKyAgICBzdHJ1Y3QgTWFwRW50cnkgeworICAg
ICAgICBNYXBFbnRyeSgpCisgICAgICAgICAgICA6IG5hbWUoVmlydHVhbFJlZ2lzdGVyKCkpCisg
ICAgICAgICAgICAsIHNwaWxsT3JkZXIoU3BpbGxIaW50SW52YWxpZCkKKyAgICAgICAgICAgICwg
bG9ja0NvdW50KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBuYW1lOworICAgICAgICBTcGlsbEhpbnQgc3BpbGxPcmRlcjsKKyAgICAgICAgdWludDMy
X3QgbG9ja0NvdW50OworICAgIH07CisKKyAgICAvLyBIb2xkcyB0aGUgY3VycmVudCBzdGF0dXMg
b2YgYWxsIHJlZ2lzdGVycy4KKyAgICBNYXBFbnRyeSBtX2RhdGFbTlVNX1JFR1NdOworfTsKKwor
dHlwZWRlZiBSZWdpc3RlckJhbms8R1BSSW5mbz46Oml0ZXJhdG9yIGdwcl9pdGVyYXRvcjsKK3R5
cGVkZWYgUmVnaXN0ZXJCYW5rPEZQUkluZm8+OjppdGVyYXRvciBmcHJfaXRlcmF0b3I7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA4NmMzYThmODI5OGQ4MzRkMzMxMWZjNWRl
NTVkMTkyYjMwZDA0YzYxLi41NDkzNDQxMmRhOTllMDMzMDUzMWMxN2VlOGY5NDI4MWViNzc4MTk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCkBAIC0xNjEsNyArMTYxLDEwIEBAIGNsYXNzIEIzSVJHZW5lcmF0b3IgewogICAgIHR5cGVk
ZWYgQ29udHJvbERhdGE6OlJlc3VsdExpc3QgUmVzdWx0TGlzdDsKICAgICB0eXBlZGVmIEZ1bmN0
aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnkgQ29udHJvbEVudHJ5OwogCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxs
cHRyOworICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAogICAgIHR5cGVkZWYg
U3RyaW5nIEVycm9yVHlwZTsKICAgICB0eXBlZGVmIFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4
cGVjdGVkUmVzdWx0OwpAQCAtMTg3LDYgKzE5MCw3IEBAIGNsYXNzIEIzSVJHZW5lcmF0b3Igewog
ICAgIC8vIExvY2FscwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUgdmFsdWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHRl
ZUxvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOwogCiAgICAgLy8g
R2xvYmFscwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1
aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CkBAIC02MTksNiArNjIzLDEx
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzCiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBC
M0lSR2VuZXJhdG9yOjp0ZWVMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZh
bHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHNldExvY2FsKGluZGV4LCB2YWx1
ZSk7Cit9CisKIGF1dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFsdWUqIGds
b2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IDA4OGU3MjhjZTRj
YzU0Y2UzYzYwNmI0MGYyNTVhNjA5ZDU3YjNiOTEuLjYyNzQxODAyYTQxMDNhNDA5ZmFiODU3Yzhh
NzdlNmE5OGUwMGFjZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oCkBAIC0xNjcsOSArMTY3LDkgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6YmluYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmlnaHQsICJiaW5hcnkgcmlnaHQiKTsKICAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGxlZnQsICJiaW5hcnkgbGVmdCIpOwotICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPihsZWZ0LCByaWdodCwg
cmVzdWx0KSk7CisgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+
KFdURk1vdmUobGVmdCksIFdURk1vdmUocmlnaHQpLCByZXN1bHQpKTsKIAotICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChX
VEZNb3ZlKHJlc3VsdCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTE4MSw5ICsxODEsOSBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmFyeUNhc2UoKSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogCiAgICAgV0FTTV9UUllfUE9QX0VYUFJF
U1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInVuYXJ5Iik7Ci0gICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+KHZhbHVlLCByZXN1bHQpKTsKKyAgICBXQVNNX1RSWV9B
RERfVE9fQ09OVEVYVCh0ZW1wbGF0ZSBhZGRPcDxvcD4oV1RGTW92ZSh2YWx1ZSksIHJlc3VsdCkp
OwogCi0gICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMjA5LDkgKzIwOSw5IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhw
cmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyhub25aZXJvLCAic2VsZWN0IG5vbi16ZXJvIik7CiAKICAgICAgICAgRXhw
cmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRT
ZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvLCByZXN1bHQpKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoYWRkU2VsZWN0KFdURk1vdmUoY29uZGl0aW9uKSwgV1RGTW92ZShu
b25aZXJvKSwgV1RGTW92ZSh6ZXJvKSwgcmVzdWx0KSk7CiAKLSAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChX
VEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMjI1LDgg
KzIyNSw4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhbGlnbm1lbnQg
PiBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVudE9wY29kZSksICJieXRlIGFsaWdubWVudCAi
LCAxdWxsIDw8IGFsaWdubWVudCwgIiBleGNlZWRzIGxvYWQncyBuYXR1cmFsIGFsaWdubWVudCAi
LCAxdWxsIDw8IG1lbW9yeUxvZzJBbGlnbm1lbnQobV9jdXJyZW50T3Bjb2RlKSk7CiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQg
bG9hZCBvZmZzZXQiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5U
Tyhwb2ludGVyLCAibG9hZCBwb2ludGVyIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKGxvYWQoc3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgcG9pbnRl
ciwgcmVzdWx0LCBvZmZzZXQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJl
c3VsdCk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGxvYWQoc3RhdGljX2Nhc3Q8
TG9hZE9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgV1RGTW92ZShwb2ludGVyKSwgcmVzdWx0LCBv
ZmZzZXQpKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0yNDAsNyArMjQwLDcgQEAgYXV0
byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJl
c3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihvZmZzZXQp
LCAiY2FuJ3QgZ2V0IHN0b3JlIG9mZnNldCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVT
U0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic3RvcmUgdmFsdWUiKTsKICAgICAgICAgV0FTTV9UUllf
UE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAic3RvcmUgcG9pbnRlciIpOwotICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzdG9yZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlw
ZT4obV9jdXJyZW50T3Bjb2RlKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCkpOworICAgICAgICBX
QVNNX1RSWV9BRERfVE9fQ09OVEVYVChzdG9yZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4obV9j
dXJyZW50T3Bjb2RlKSwgV1RGTW92ZShwb2ludGVyKSwgV1RGTW92ZSh2YWx1ZSksIG9mZnNldCkp
OwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjc4
LDcgKzI3OCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lv
bigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBn
ZXQgaW5kZXggZm9yIGdldF9sb2NhbCIpOwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChnZXRMb2NhbChpbmRleCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFw
cGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShy
ZXN1bHQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTI4Nyw3ICsyODcsNyBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9y
IHNldF9sb2NhbCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRP
KHZhbHVlLCAic2V0X2xvY2FsIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNl
dExvY2FsKGluZGV4LCB2YWx1ZSkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChz
ZXRMb2NhbChpbmRleCwgV1RGTW92ZSh2YWx1ZSkpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKQEAgLTI5NSw3ICsyOTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHVpbnQzMl90IGluZGV4
OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJj
YW4ndCBnZXQgaW5kZXggZm9yIHRlZV9sb2NhbCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgImNhbid0IHRlZV9sb2NhbCBvbiBlbXB0
eSBleHByZXNzaW9uIHN0YWNrIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNl
dExvY2FsKGluZGV4LCBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCkpKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQodGVlTG9jYWwoaW5kZXgsIG1fZXhwcmVzc2lvblN0YWNrLmxhc3Qo
KSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMzA0LDcgKzMwNCw3IEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldEdsb2JhbChpbmRl
eCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTMxMyw3ICszMTMsNyBAQCBhdXRvIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
ICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4Iik7CiAg
ICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xv
YmFsIHZhbHVlIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldEdsb2JhbChp
bmRleCwgdmFsdWUpKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0R2xvYmFs
KGluZGV4LCBXVEZNb3ZlKHZhbHVlKSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApA
QCAtMzMwLDE0ICszMzAsMTQgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+IGFyZ3M7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgY2FsbCdzICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCksICIgYXJndW1lbnRzIik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50
SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGFy
Z3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrW2ldKTsKKyAgICAgICAgICAgIGFy
Z3MudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobV9leHByZXNzaW9uU3RhY2tbaV0pKTsKICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKLSAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOworICAg
ICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24oKTsK
ICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbChmdW5jdGlvbkluZGV4LCBj
YWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCi0gICAgICAgIGlmIChyZXN1bHQgIT0g
Q29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2su
YXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHBy
ZXNzaW9uKCkpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShy
ZXN1bHQpKTsKIAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTM1OSwxNCArMzU5LDE0
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZl
Q2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBhcmd1bWVudENvdW50LCAiIGNhbGxfaW5kaXJlY3QgYXJndW1lbnRzIik7CiAgICAgICAg
IHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXggPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBh
cmd1bWVudENvdW50OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4
OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBhcmdzLnVu
Y2hlY2tlZEFwcGVuZChtX2V4cHJlc3Npb25TdGFja1tpXSk7CisgICAgICAgICAgICBhcmdzLnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrW2ldKSk7CiAgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCi0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAg
RXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKCk7CiAgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1
cmUsIGFyZ3MsIHJlc3VsdCkpOwogCi0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1w
dHlFeHByZXNzaW9uKQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3Vs
dCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKCkpCisg
ICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKIAog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTM5Myw4ICszOTMsOCBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2w7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGlmJ3MgaW5saW5l
IHNpZ25hdHVyZSIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRP
KGNvbmRpdGlvbiwgImlmIGNvbmRpdGlvbiIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGRJZihjb25kaXRpb24sIGlubGluZVNpZ25hdHVyZSwgY29udHJvbCkpOwotICAgICAg
ICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgY29u
dHJvbCB9KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkSWYoV1RGTW92ZShj
b25kaXRpb24pLCBpbmxpbmVTaWduYXR1cmUsIGNvbnRyb2wpKTsKKyAgICAgICAgbV9jb250cm9s
U3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIFdURk1vdmUoY29udHJv
bCkgfSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC00MDksNyArNDA5LDcgQEAgYXV0byBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAg
IGNhc2UgQnI6CiAgICAgY2FzZSBCcklmOiB7CiAgICAgICAgIHVpbnQzMl90IHRhcmdldDsKLSAg
ICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9u
OworICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24gPSBDb250ZXh0OjplbXB0eUV4cHJl
c3Npb24oKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFy
Z2V0KSwgImNhbid0IGdldCBiciAvIGJyX2lmJ3MgdGFyZ2V0Iik7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyIC8gYnJfaWYn
cyB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFjayBzaXplICIsIG1fY29u
dHJvbFN0YWNrLnNpemUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRPcGNvZGUgPT0gQnJJZikK
QEAgLTQxOSw3ICs0MTksNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAgQ29udHJvbFR5cGUmIGRhdGEg
PSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250
cm9sRGF0YTsKIAotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRCcmFuY2goZGF0
YSwgY29uZGl0aW9uLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRCcmFuY2goZGF0YSwgV1RGTW92ZShjb25kaXRpb24pLCBtX2V4cHJlc3Np
b25TdGFjaykpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtNDQ0LDcgKzQ0NCw3
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihkZWZhdWx0VGFyZ2V0ID49
IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyX3RhYmxlJ3MgZGVmYXVsdCB0YXJnZXQgIiwgZGVm
YXVsdFRhcmdldCwgIiBleGNlZWRzIGNvbnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFj
ay5zaXplKCkpOwogCiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8o
Y29uZGl0aW9uLCAiYnJfdGFibGUgY29uZGl0aW9uIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZFN3aXRjaChjb25kaXRpb24sIHRhcmdldHMsIG1fY29udHJvbFN0YWNrW21f
Y29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSBkZWZhdWx0VGFyZ2V0XS5jb250cm9sRGF0YSwgbV9l
eHByZXNzaW9uU3RhY2spKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkU3dp
dGNoKFdURk1vdmUoY29uZGl0aW9uKSwgdGFyZ2V0cywgbV9jb250cm9sU3RhY2tbbV9jb250cm9s
U3RhY2suc2l6ZSgpIC0gMSAtIGRlZmF1bHRUYXJnZXRdLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Np
b25TdGFjaykpOwogCiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwogICAgICAgICBy
ZXR1cm4geyB9OwpAQCAtNDU1LDcgKzQ1NSw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgaWYgKG1fc2ln
bmF0dXJlLnJldHVyblR5cGUoKSAhPSBWb2lkKSB7CiAgICAgICAgICAgICBFeHByZXNzaW9uVHlw
ZSByZXR1cm5WYWx1ZTsKICAgICAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNL
X0lOVE8ocmV0dXJuVmFsdWUsICJyZXR1cm4iKTsKLSAgICAgICAgICAgIHJldHVyblZhbHVlcy5h
cHBlbmQocmV0dXJuVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChXVEZN
b3ZlKHJldHVyblZhbHVlKSk7CiAgICAgICAgIH0KIAogICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRSZXR1cm4obV9jb250cm9sU3RhY2tbMF0uY29udHJvbERhdGEsIHJldHVyblZh
bHVlcykpOwpAQCAtNTAwLDggKzUwMCw4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9UUllfUE9Q
X0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhkZWx0YSwgImV4cGVjdCBhbiBpMzIgYXJndW1lbnQgdG8g
Z3Jvd19tZW1vcnkgb24gdGhlIHN0YWNrIik7CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVz
dWx0OwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRHcm93TWVtb3J5KGRlbHRh
LCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEdyb3dNZW1vcnkoV1RGTW92ZShkZWx0
YSksIHJlc3VsdCkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShy
ZXN1bHQpKTsKIAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTUxNSw3ICs1MTUsNyBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0
aWFsUmVzdWx0CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChhZGRDdXJyZW50TWVtb3J5KHJlc3VsdCkpOwotICAgICAgICBt
X2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUmFpbGd1bkpJVC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUmFpbGd1bkpJVC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWViYjQ0Mjk5MzQxZDU3MGUzNTM3ZmU2MTIzZGEzZDUyYjIzMGNmNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21SYWlsZ3VuSklULmNwcApA
QCAtMCwwICsxLDU3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtp
IDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtUmFp
bGd1bkpJVC5oIgorCisjaW5jbHVkZSAiUmVnaXN0ZXJCYW5rLmgiCisjaW5jbHVkZSAiV2FzbUZ1
bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKK25hbWVzcGFj
ZSBXYXNtUmFpbGd1bkpJVEludGVybmFsIHsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7Cit9CisKK2NsYXNzIFJhaWxndW5KSVQ7CisKK2NsYXNzIFN0YWNrVmFsdWUgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrVmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHN0cnVjdCBMb2NhbCB7CisgICAgICAgIHVpbnQzMl90
IHNsb3QgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBDb25zdGFudCB7CisgICAgICAgIHVp
bnQ2NF90IGJpdHMgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBSZWdpc3RlciB7CisgICAg
ICAgIFJlZyByZWc7CisgICAgfTsKKworICAgIHN0cnVjdCBTdGFjayB7CisgICAgICAgIHVpbnQz
Ml90IHNsb3QgeyAwIH07CisgICAgfTsKKworICAgIC8vIEtlZXAgdGhlIG9yZGVyIGluIHN5bmMg
d2l0aCB0aGUgb3JkZXIgaW4gVmFyaWFudC4KKyAgICBlbnVtIGNsYXNzIExvY2F0aW9uIDogdWlu
dDhfdCB7CisgICAgICAgIExvY2FsID0gMCwKKyAgICAgICAgQ29uc3RhbnQsCisgICAgICAgIFJl
Z2lzdGVyLAorICAgICAgICBTdGFjaywKKyAgICB9OworICAgIHVzaW5nIERhdGEgPSBWYXJpYW50
PExvY2FsLCBDb25zdGFudCwgUmVnaXN0ZXIsIFN0YWNrPjsKKworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8U3RhY2tWYWx1ZT4gY3JlYXRlQ29uc3RhbnQoUmFpbGd1bkpJVCogaml0LCBUeXBl
IHR5cGUsIHVpbnQ2NF90IGJpdHMpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxTdGFja1ZhbHVlPihqaXQsIHR5cGUsIENvbnN0YW50IHsgYml0cyB9KTsKKyAgICB9CisK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVmFsdWU+IGNyZWF0ZUxvY2FsKFJhaWxn
dW5KSVQqIGppdCwgVHlwZSB0eXBlLCB1aW50MzJfdCBzbG90KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8U3RhY2tWYWx1ZT4oaml0LCB0eXBlLCBMb2NhbCB7IHNsb3Qg
fSk7CisgICAgfQorCisgICAgRGF0YSBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2RhdGE7CisgICAgfQorCisgICAgVHlwZSB0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3R5cGU7CisgICAgfQorCisgICAgTG9jYXRpb24gbG9jYXRpb24oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuCisgICAgfQorCisgICAgflN0YWNrVmFsdWUoKTsKKworICAg
IFN0YWNrVmFsdWUoUmFpbGd1bkpJVCogaml0LCBUeXBlIHR5cGUsIExvY2FsIGxvY2FsKQorICAg
ICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2Rh
dGEobG9jYWwpCisgICAgeworICAgIH0KKworICAgIFN0YWNrVmFsdWUoUmFpbGd1bkpJVCogaml0
LCBUeXBlIHR5cGUsIENvbnN0YW50IGNvbnN0YW50KQorICAgICAgICA6IG1faml0KGppdCkKKyAg
ICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2RhdGEoY29uc3RhbnQpCisgICAgewor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBSYWlsZ3VuSklUKiBtX2ppdDsKKyAgICBUeXBlIG1fdHlw
ZTsKKyAgICBEYXRhIG1fZGF0YTsKK307CisKK2NsYXNzIEJhc2ljQmxvY2sgeworfTsKKworY2xh
c3MgQ29udHJvbERhdGEgeworcHVibGljOgorICAgIENvbnRyb2xEYXRhKEJsb2NrVHlwZSB0eXBl
LCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24pCisgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisg
ICAgICAgICwgY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICB7CisgICAgfQorCisgICAg
Q29udHJvbERhdGEoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
QmxvY2tUeXBlOjpJZjoKKyAgICAgICAgICAgIG91dC5wcmludCgiSWY6ICAgICAgICIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAg
ICAgIG91dC5wcmludCgiQmxvY2s6ICAgICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgICAg
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVs
OgorICAgICAgICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gYmxvY2tUeXBlOyB9CisKKyAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7
IHJldHVybiByZXN1bHQuc2l6ZSgpOyB9CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0Zv
ckJyYW5jaCgpCisgICAgeworICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkK
KyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsOworICAgICAgICByZXR1cm4gY29udGludWF0aW9u
OworICAgIH0KKworICAgIHZvaWQgY29udmVydElmVG9CbG9jaygpCisgICAgeworICAgICAgICBB
U1NFUlQodHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgICAgICBibG9ja1R5cGUgPSBCbG9j
a1R5cGU6OkJsb2NrOworICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB1
c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1ZhbHVlPj47IC8v
IFN0YWNrVmFsdWUgbXVzdCBiZSBmbHVzaGVkLgorCisgICAgY29uc3QgUmVzdWx0TGlzdCogcmVz
dWx0Rm9yQnJhbmNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tU
eXBlOjpMb29wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAm
cmVzdWx0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQjNJUkdlbmVyYXRv
cjsKKyAgICBCbG9ja1R5cGUgYmxvY2tUeXBlOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
bjsKKyAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOworICAgIFJlc3VsdExpc3QgcmVzdWx0OworfTsK
KworCitjbGFzcyBSYWlsZ3VuSklUIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSYWlsZ3Vu
SklUKTsKK3B1YmxpYzoKKyAgICBSYWlsZ3VuSklUKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
SW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9y
eU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhj
ZXB0aW9uKTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gc3RkOjp1bmlxdWVfcHRyPFN0
YWNrVmFsdWU+OworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNp
bmcgRXhwcmVzc2lvbkxpc3QgPSBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrVmFsdWU+PjsK
KyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxSYWlsZ3VuSklUPjo6Q29u
dHJvbEVudHJ5OworCisgICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigp
CisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB1c2luZyBFcnJv
clR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8
RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9
IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlv
blBhcnNlcjxSYWlsZ3VuSklUPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OworCisg
ICAgLy8gbG9jayBhbmQgdW5sb2NrIEdQUiAmIEZQUiByZWdpc3RlcnMuCisgICAgdm9pZCBsb2Nr
KEdQUlJlZyByZWcpCisgICAgeworICAgICAgICBtX2dwcnMubG9jayhyZWcpOworICAgIH0KKyAg
ICB2b2lkIGxvY2soRlBSUmVnIHJlZykKKyAgICB7CisgICAgICAgIG1fZnBycy5sb2NrKHJlZyk7
CisgICAgfQorICAgIHZvaWQgdW5sb2NrKEdQUlJlZyByZWcpCisgICAgeworICAgICAgICBtX2dw
cnMudW5sb2NrKHJlZyk7CisgICAgfQorICAgIHZvaWQgdW5sb2NrKEZQUlJlZyByZWcpCisgICAg
eworICAgICAgICBtX2ZwcnMudW5sb2NrKHJlZyk7CisgICAgfQorCisgICAgR1BSUmVnIGFsbG9j
YXRlR1BSKFN0YWNrVmFsdWUmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5M
SU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdz
KSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8v
IFNlZSBBREwgY29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5n
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisjZGVmaW5lIFdBU01fQ09NUElM
RV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKGNv
bmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19W
QV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworICAgIC8vIEZ1bmN0
aW9ucyBpbnZva2VkIGJ5IEZ1bmN0aW9uUGFyc2VyLgorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CisgICAg
RXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOworCisgICAgLy8gTG9j
YWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdGVlTG9jYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSk7CisKKyAgICAvLyBHbG9iYWxzCisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVl
KTsKKworICAgIC8vIE1lbW9yeQorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIEJhc2lj
IG9wZXJhdG9ycworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpOworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5
cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CisKKyAgICAvLyBDb250cm9sIGZsb3cKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlw
ZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVh
Y2hhYmxlKENvbnRyb2xEYXRhJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYg
cmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRC
cmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxD
b250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBl
eHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisKKyAgICAvLyBDYWxscworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOworCisgICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBl
eHByZXNzaW9uU3RhY2spOworCitwcml2YXRlOgorICAgIHZvaWQgc3BpbGwodWludDMyX3Qgc3Rh
Y2tTbG90LCBTdGFja1ZhbHVlJik7CisKKyAgICBDQ2FsbEhlbHBlcnMgbV9qaXQ7CisgICAgUmVn
aXN0ZXJCYW5rPEdQUkluZm8+IG1fZ3ByczsKKyAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4gbV9m
cHJzOworICAgIFZlY3RvcjxUeXBlPiBtX2xvY2FsczsKKyAgICBGdW5jdGlvblBhcnNlcjxSYWls
Z3VuSklUPiogbV9wYXJzZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlO
VF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07Cisg
ICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9Owor
fTsKKworY2xhc3MgR1BST3BlcmFuZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR1BST3Bl
cmFuZCk7CitwdWJsaWM6CisgICAgR1BST3BlcmFuZChSYWlsZ3VuSklUKiBqaXQsIHN0ZDo6dW5p
cXVlX3B0cjxTdGFja1ZhbHVlPiYmIHZhbHVlKQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAg
ICAgLCBtX3ZhbHVlKFdURk1vdmUodmFsdWUpKQorICAgIHsKKyAgICAgICAgU3RhY2tWYWx1ZTo6
RGF0YSBkYXRhID0gbV92YWx1ZS0+ZGF0YSgpOworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxTdGFja1ZhbHVlOjpSZWdpc3Rlcj4oZGF0YSkpIHsKKyAgICAgICAgICAgIG1fZ3By
ID0gV1RGOjpnZXQ8U3RhY2tWYWx1ZTo6UmVnaXN0ZXI+KGRhdGEpLnJlZy5ncHIoKTsKKyAgICAg
ICAgICAgIG1faml0LT5sb2NrKG1fZ3ByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlR1BSKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+
R1BST3BlcmFuZCgpCisgICAgeworICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByKTsKKyAgICB9
CisKKyAgICBHUFJSZWcgZ3ByKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2dwcjsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmFpbGd1bkpJVCogbV9qaXQ7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFN0YWNrVmFsdWU+IG1fdmFsdWU7CisgICAgR1BSUmVnIG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9
OworfTsKKworU3RhY2tWYWx1ZTo6flN0YWNrVmFsdWUoKQoreworfQorCitSYWlsZ3VuSklUOjpS
YWlsZ3VuSklUKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBJbnRlcm5hbEZ1bmN0aW9u
KiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9u
KQorICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fZnVuY3Rp
b25JbmRleChmdW5jdGlvbkluZGV4KQorICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV90
aHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAgIFVOVVNFRF9QQVJB
TShjb21waWxhdGlvbik7Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKCFt
X2xvY2Fscy5zaXplKCkpOworICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCFtX2xvY2Fscy50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7
CisKKyAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOworCisgICAg
Ly8gRklYTUU6IEZpeCB0aGUgY29kZS4KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFp
bGd1bkpJVDo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVz
Q2hlY2tlZCA9IGNvdW50OworICAgIHRvdGFsQnl0ZXNDaGVja2VkICs9IG1fbG9jYWxzLnNpemUo
KTsKKyAgICB1aW50MzJfdCB0b3RhbEJ5dGVzOworICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCh0
b3RhbEJ5dGVzQ2hlY2tlZC5zYWZlR2V0KHRvdGFsQnl0ZXMpID09IENoZWNrZWRTdGF0ZTo6RGlk
T3ZlcmZsb3cpIHx8ICFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxCeXRlcyksICJj
YW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFsQnl0ZXMsICIgbG9jYWxzIik7CisKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpbnQzMl90
IHN0YWNrU2xvdCA9IG1fbG9jYWxzLnNpemUoKTsKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2Vk
QXBwZW5kKHR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBl
OjpBbnlmdW5jOgorICAgICAgICBjYXNlIFR5cGU6OkZ1bmM6CisgICAgICAgIGNhc2UgVHlwZTo6
Vm9pZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICAvLyBGSVhNRTogQWRkcmVzcyBvZmZzZXQgb3ZlcmZs
b3cuCisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLShzdGFja1Ns
b3QgKiA4KSkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgY2FzZSBUeXBlOjpJ
NjQ6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAtKHN0YWNrU2xvdCAqIDgpKSk7CisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
UmFpbGd1bkpJVDo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCB1aW50NjRfdCBiaXRzKSAtPiBFeHBy
ZXNzaW9uVHlwZQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZTo6QW55ZnVu
YzoKKyAgICBjYXNlIFR5cGU6OkZ1bmM6CisgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworCisgICAg
Y2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgY2FzZSBUeXBlOjpGMzI6
CisgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIHJldHVybiBTdGFja1ZhbHVlOjpjcmVhdGVD
b25zdGFudCh0aGlzLCB0eXBlLCBiaXRzKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBSYWlsZ3VuSklUOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0p
OworICAgIHJlc3VsdCA9IFN0YWNrVmFsdWU6OmNyZWF0ZUxvY2FsKHRoaXMsIG1fbG9jYWxzW2lu
ZGV4XSwgaW5kZXgpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6c2V0
TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjp0ZWVMb2NhbCh1
aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjpnZXRHbG9iYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OnNldEdsb2JhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklU
OjpzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlw
ZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkQ3VycmVudE1lbW9yeShFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8T3BUeXBlPgorYXV0byBSYWlsZ3VuSklUOjphZGRPcChFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTxPcFR5cGU+CithdXRvIFJhaWxndW5KSVQ6OmFk
ZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgR1BST3BlcmFuZCBsZWZ0T3Bl
cmFuZCh0aGlzLCBXVEZNb3ZlKGxlZnQpKTsKKyAgICBHUFJPcGVyYW5kIHJpZ2h0T3BlcmFuZCh0
aGlzLCBXVEZNb3ZlKHJpZ2h0KSk7CisKKyAgICBHUFJSZWcgbGVmdEdQUiA9IGxlZnRPcGVyYW5k
LmdwcigpOworICAgIEdQUlJlZyByaWdodEdQUiA9IHJpZ2h0T3BlcmFuZC5ncHIoKTsKKworICAg
IG1faml0LmFkZDMyKGxlZnRHUFIsIHJpZ2h0R1BSKTsKKworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gUmFpbGd1bkpJVDo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhw
cmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
UmFpbGd1bkpJVDo6YWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpIC0+IENvbnRyb2xEYXRhCit7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRCbG9jayhUeXBlIHNp
Z25hdHVyZSkgLT4gQ29udHJvbERhdGEKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFJh
aWxndW5KSVQ6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpIC0+IENvbnRyb2xEYXRhCit7CisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRJZihFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRFbHNl
KENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRFbHNlVG9VbnJlYWNo
YWJsZShDb250cm9sRGF0YSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIFJhaWxndW5KSVQ6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0
IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZEJyYW5jaChDb250cm9sRGF0YSYs
IEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFp
bGd1bkpJVDo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9y
PENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6ZW5kQmxvY2soQ29udHJvbEVu
dHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkRW5kVG9VbnJlYWNo
YWJsZShDb250cm9sRW50cnkmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBSYWlsZ3VuSklUOjphZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBSYWlsZ3VuSklUOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkVW5yZWFj
aGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBS
YWlsZ3VuSklUOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ss
IGNvbnN0IEV4cHJlc3Npb25MaXN0KiBleHByZXNzaW9uU3RhY2spCit7Cit9CisKK0V4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3Qq
IGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUs
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4
Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCit7CisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1h
a2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQu
ZW1iZWRkZXJFbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7
CisgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3Vu
aXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisKKyAgICBSYWlsZ3VuSklUIGNvbXBpbGVyKGluZm8sIHJl
c3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgs
IHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBGdW5jdGlvblBhcnNlcjxSYWlsZ3Vu
SklUPiBwYXJzZXIoY29tcGlsZXIsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIGluZm8pOworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNl
KCkpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworCisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUmFpbGd1bkpJVC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVJhaWxndW5KSVQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjZkZDI0
NTE3NzA3OTNjYzQ4NGViNzRlNTliNWI1YzUzMWJlMzIyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVJhaWxndW5KSVQuaApAQCAtMCwwICsxLDM0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBz
bG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVZhbGlkYXRlLmNwcAppbmRleCBlYTRhNzU5OGZhMDQ5NTQ0Zjg3Njg0YTUwZTNjZmNiOTEz
MTA4ZWFmLi5mNjM2YmZkNGIwYTlkZmVjODkzY2YzZWZlNzcwZGM3ZWI1YjQ4MTZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAgLTgzLDcgKzgzLDEw
IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICB0eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwg
MT4gRXhwcmVzc2lvbkxpc3Q7CiAgICAgdHlwZWRlZiBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT46
OkNvbnRyb2xFbnRyeSBDb250cm9sRW50cnk7CiAKLSAgICBzdGF0aWMgY29uc3QgRXhwcmVzc2lv
blR5cGUgZW1wdHlFeHByZXNzaW9uID0gVm9pZDsKKyAgICBzdGF0aWMgY29uc3RleHByIEV4cHJl
c3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpCisgICAgeworICAgICAgICByZXR1cm4gVm9pZDsK
KyAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJ
TkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3Mp
IGNvbnN0CkBAIC0xMDMsNiArMTA2LDcgQEAgY2xhc3MgVmFsaWRhdGUgewogICAgIC8vIExvY2Fs
cwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHRlZUxvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgdmFsdWUpOwogCiAgICAgLy8gR2xvYmFscwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
QEAgLTE5Miw2ICsxOTYsMTEgQEAgYXV0byBWYWxpZGF0ZTo6c2V0TG9jYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQog
CithdXRvIFZhbGlkYXRlOjp0ZWVMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHZhbHVlKSAtPiBSZXN1bHQKK3sKKyAgICByZXR1cm4gc2V0TG9jYWwoaW5kZXgsIHZhbHVlKTsK
K30KKwogYXV0byBWYWxpZGF0ZTo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGlu
ZGV4ID49IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBv
ZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357108</attachid>
            <date>2018-12-11 23:20:13 -0800</date>
            <delta_ts>2018-12-11 23:48:40 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-191802-20181212162012.patch</filename>
            <type>text/plain</type>
            <size>81513</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ZTM0ZThlZjYzOWYwOTFkNjFmZmNlODlmNTMxZWQyMTNjNTdiNTJiLi41ODJjOTg4MDUyZmU5MWM0
ZGZkMGRlMTI0ODNkNTY5NGUxNGE4OWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NSBAQAorMjAxOC0xMi0xMSAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93
c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gQWRkIHRlbXBsYXRlIEpJVAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgICogaml0L1JlZ2lzdGVyQmFuay5oOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaC4KKyAgICAgICAgKiB3
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6dGVlTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRC
cmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6YmluYXJ5Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmFyeUNhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNt
L1dhc21SYWlsZ3VuSklULmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OlN0YWNrVmFs
dWU6OmNyZWF0ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RhY2tWYWx1ZTo6Y3Jl
YXRlTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1ZhbHVlOjpkYXRhIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U3RhY2tWYWx1ZTo6dHlwZSBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OlN0YWNrVmFsdWU6OmxvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U3RhY2tWYWx1ZTo6U3RhY2tWYWx1ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRyb2xE
YXRhOjpDb250cm9sRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjpkdW1w
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29udHJvbERhdGE6OnR5cGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb250cm9sRGF0YTo6aGFzTm9uVm9pZFNpZ25hdHVyZSBjb25z
dCk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjp0YXJnZXRCbG9ja0ZvckJyYW5j
aCk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjpjb252ZXJ0SWZUb0Jsb2NrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q29udHJvbERhdGE6OnJlc3VsdEZvckJyYW5jaCBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OnNldFBhcnNlcik6CisgICAgICAgIChK
U0M6Oldhc206OlJhaWxndW5KSVQ6OmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3Vu
SklUOjp1bmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphbGxvY2F0ZUdQ
Uik6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmZhaWwgY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpHUFJPcGVyYW5kOjpHUFJPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6R1BST3BlcmFuZDo6fkdQUk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpXYXNtOjpHUFJPcGVy
YW5kOjpncHIpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1ZhbHVlOjp+U3RhY2tWYWx1ZSk6
CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OlJhaWxndW5KSVQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpSYWlsZ3VuSklUOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6
OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6Z2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjpzZXRMb2NhbCk6CisgICAgICAgIChK
U0M6Oldhc206OlJhaWxndW5KSVQ6OnRlZUxvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFp
bGd1bkpJVDo6Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6c2V0
R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6bG9hZCk6CisgICAgICAg
IChKU0M6Oldhc206OlJhaWxndW5KSVQ6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFp
bGd1bkpJVDo6YWRkR3Jvd01lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6
OmFkZEN1cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRP
cCk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZFNlbGVjdCk6CisgICAgICAg
IChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UmFpbGd1bkpJVDo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklU
OjphZGRMb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6YWRkSWYpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRFbHNlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UmFpbGd1bkpJVDo6YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpSYWlsZ3VuSklUOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklU
OjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRTd2l0Y2gp
OgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjplbmRCbG9jayk6CisgICAgICAgIChK
U0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpSYWlsZ3VuSklUOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1
bkpJVDo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6
YWRkVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjpkdW1wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dh
c21SYWlsZ3VuSklULmg6IEFkZGVkLgorICAgICAgICAqIHdhc20vV2FzbVZhbGlkYXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OnRlZUxvY2FsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRl
OjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZENhbGxJbmRpcmVj
dCk6CisKIDIwMTgtMTItMTEgIEp1c3RpbiBNaWNoYXVkICA8anVzdGluX21pY2hhdWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIEltcGxlbWVudCBmZWF0dXJlIGZsYWcgZm9yIENTUyBUeXBlZCBPTQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmM2VmMWM0MjM4MGIzY2VmMmYwMGZhYzY1
OGU5MmU5ZDZlNzk5ZjAzLi4zYWEwMmQzYzQ4MjlmZmQ5YjIwMGZkNDYzMjAzN2FmNjQxNmU2MTZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTIyNiw3ICsxMjI2LDcgQEAKIAkJ
ODZFQzlEQzgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyog
REZHR3JhcGguaCAqLzsgfTsKIAkJODZFQzlEQ0MxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENv
bXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLzsgfTsKIAkJODZF
QzlERDAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMwMTMyOERGODIwMDJCMkFENyAv
KiBERkdPcGVyYXRpb25zLmggKi87IH07Ci0JCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBE
RkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLzsg
fTsKKwkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIFJlZ2lzdGVyQmFuay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzExMzI4REY4MjAw
MkIyQUQ3IC8qIFJlZ2lzdGVyQmFuay5oICovOyB9OwogCQk4NkVDOUREMzEzMjhERjgyMDAyQjJB
RDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2
ZUpJVC5oICovOyB9OwogCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRTkxMzJE
RUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLzsgfTsKIAkJODZFQ0EzRkExMzJERjI1QTAwMkIy
QUQ3IC8qIERGR1Njb3JlQm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmgg
Ki87IH07CkBAIC0zODk5LDcgKzM4OTksNyBAQAogCQk4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcg
LyogREZHSklUQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
SklUQ29tcGlsZXIuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPcGVyYXRpb25z
LmNwcDsgcGF0aCA9IGRmZy9ERkdPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZFQzlEQzAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT3BlcmF0aW9ucy5oOyBwYXRoID0gZGZn
L0RGR09wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZFQzlEQzEx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlckJhbmsuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlckJh
bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFQzlEQzExMzI4REY4MjAwMkIy
QUQ3IC8qIFJlZ2lzdGVyQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBS
ZWdpc3RlckJhbmsuaDsgcGF0aCA9IGppdC9SZWdpc3RlckJhbmsuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZl
SklULmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NwZWN1bGF0
aXZlSklULmNwcDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxh
dGl2ZUpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTcGVjdWxhdGl2
ZUpJVC5oOyBwYXRoID0gZGZnL0RGR1NwZWN1bGF0aXZlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGUuaDsgcGF0aCA9IGRmZy9ERkdOb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NzEzLDYgKzU3MTMsNyBAQAogCQkJ
CTY1NDBDNzlGMUI4MkQ5Q0UwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmggKi8sCiAJCQkJ
NjU0MEM3OUMxQjgyRDk5RDAwMEY2Qjc5IC8qIFJlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcCAqLywK
IAkJCQk2NTQwQzc5RDFCODJEOTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3QuaCAq
LywKKwkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyogUmVnaXN0ZXJCYW5rLmggKi8sCiAJ
CQkJNjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8sCiAJCQkJMEZD
MzE0MTQxODE0NkQ3MDAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmNwcCAqLywKIAkJCQkwRkMzMTQx
MDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCAqLywKQEAgLTc0ODgsNyArNzQ4OSw2
IEBACiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCiAJCQkJMEYzQTFCRjgxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmggKi8sCi0JCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVy
QmFuay5oICovLAogCQkJCTc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVk
U3RydWN0dXJlLmggKi8sCiAJCQkJNzk4MEMxNkExRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lz
dGVyZWRTdHJ1Y3R1cmVTZXQuY3BwICovLAogCQkJCTc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAv
KiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggKi8sCkBAIC04ODA5LDcgKzg4MDksNiBAQAog
CQkJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0ExQkZBMUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRT
dGFja1NpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODZFQzlERDExMzI4REY4MjAw
MkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlGQzhBMDgx
RTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTc5ODBDMTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJl
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZH
U2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTk1MzIsNiArOTUzMSw3IEBACiAJCQkJQkMx
OEM0NUQwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzI4QzZDOTFEQTQzMkY5MDBEMjU1RkQgLyogUmVnaXN0ZXJBdE9mZnNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMyOEM2QzgxREE0MzA2MTAwRDI1NUZEIC8qIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogUmVnaXN0
ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcyQjBFRDFDRTY5MDBGMUY2ODEgLyog
UmVnaXN0ZXJJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjIzQTM3RUMxQjg3QTdDMDAwNzU0MjA5
IC8qIFJlZ2lzdGVyTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzMTQxMjE4MTQ1NTkxMDAw
MzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGNiYTRjNGJhNjAwNGY5MzBkNWNhODU2MzMxMGE2MjQzZTM2NDQ5ZTUuLmEx
MDY1MDhmNTk3NWFkZjk2NjNhNzBkOTYzMDFkYWRiYjYyYjBhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKQEAgLTk5Myw2ICs5OTMsNyBAQCB3YXNtL1dhc21PTUdQbGFuLmNwcAogd2Fz
bS9XYXNtT3Bjb2RlT3JpZ2luLmNwcAogd2FzbS9XYXNtUGFnZUNvdW50LmNwcAogd2FzbS9XYXNt
UGxhbi5jcHAKK3dhc20vV2FzbVJhaWxndW5KSVQuY3BwCiB3YXNtL1dhc21TZWN0aW9uUGFyc2Vy
LmNwcAogd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAogd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA0
MzM3NjQyMTc1NmE5NWUwMGRmYTA3M2RhODdmN2MxNTUxN2I2NjNmLi41MTJmZWEwYWYxNzI5YjIx
YzIzYTRkMWY2ZTU1MzhiODQ5NTI0NGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkRGR0pJVEZp
bmFsaXplci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdPcGVyYXRp
b25zLmgiCi0jaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiREZHU2xvd1Bh
dGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogI2luY2x1ZGUg
IkRGR1RodW5rcy5oIgpAQCAtNDMsNiArNDIsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNs
dWRlICJWTS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdp
c3RlckJhbmsuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNGYzY2FkYjA0Yjc0NWQyYzU3MGU1OGFl
ZmNjYzk4M2UyYzRkZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAorKysgL2Rl
di9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNp
bmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlICJGUFJJbmZvLmgiCi0jaW5jbHVkZSAiR1BS
SW5mby5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8vID09PSBSZWdp
c3RlckJhbmsgPT09Ci0vLwotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUg
R1BSIGFuZCBGUFIgcmVnaXN0ZXIgYmFua3MuCi0vLyBBbGwgcmVnaXN0ZXJzIGhhdmUgdHdvIHBp
ZWNlcyBvZiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlbToKLS8vIGEgbG9jayBjb3VudCAodXNl
ZCB0byBpbmRpY2F0ZSB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgaW4gdXNlCi0vLyBpbiBjb2Rl
IGdlbmVyYXRpb24gb2YgdGhlIGN1cnJlbnQgbm9kZSwgYW5kIGNhbm5vdCBiZSBzcGlsbGVkIG9y
Ci0vLyBhbGxvY2F0ZWQgYXMgYSB0ZW1wb3JhcnkpLCBhbmQgVmlydHVhbFJlZ2lzdGVyICduYW1l
JywgcmVjb3JkaW5nCi0vLyB3aGljaCB2YWx1ZSAoaWYgYW55KSBhIG1hY2hpbmUgcmVnaXN0ZXIg
Y3VycmVudGx5IGhvbGRzLgotLy8gRWl0aGVyIG9yIGJvdGggb2YgdGhlc2UgcGllY2VzIG9mIGlu
Zm9ybWF0aW9uIG1heSBiZSB2YWxpZCBmb3IgYQotLy8gZ2l2ZW4gcmVnaXN0ZXIuIEEgcmVnaXN0
ZXIgbWF5IGJlOgotLy8KLS8vICAtIHVubG9ja2VkLCBhbmQgdW5uYW1lZDogQXZhaWxhYmxlIGZv
ciBhbGxvY2F0aW9uLgotLy8gIC0gbG9ja2VkLCBidXQgdW5uYW1lZDogICBBbHJlYWR5IGFsbG9j
YXRlZCBhcyBhIHRlbXBvcmFyeSBvcgotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgZm9yIHRoZSBjdXJyZW50IG5vZGUuCi0vLyAgLSB1bmxvY2tlZCwgYnV0IG5hbWVkOiAgIENv
bnRhaW5zIHRoZSByZXN1bHQgb2YgYSBwcmlvciBvcGVyYXRpb24sCi0vLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vdCB5ZXQgaW4gdXNlIGZvciB0aGlzIG5vZGUsCi0vLyAgLSBsb2NrZWQs
IGJ1dCBuYW1lZDogICAgIENvbnRhaW5zIHRoZSByZXN1bHQgb2YgYSBwcmlvciBvcGVyYXRpb24s
Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYWxsb2NhdGVkIGFzIGEgb3Bl
cmFuZCB0byB0aGUKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCBvcGVyYXRp
b24uCi0vLwotLy8gRm9yIGV2ZXJ5IG5hbWVkIHJlZ2lzdGVyIHdlIGFsc28gcmVjb3JkIGEgaGlu
dCB2YWx1ZSBpbmRpY2F0aW5nCi0vLyB0aGUgb3JkZXIgaW4gd2hpY2ggcmVnaXN0ZXJzIHNob3Vs
ZCBiZSBzZWxlY3RlZCB0byBiZSBzcGlsbGVkOwotLy8gcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIG1v
cmUgY2hlYXBseSBzcGlsbGVkIGFuZC9vciBmaWxsZWQgc2hvdWxkCi0vLyBiZSBzZWxlY3RlZCBm
aXJzdC4KLS8vCi0vLyBMb2NraW5nIHJlZ2lzdGVyIGlzIGEgc3Ryb25nIHJldGVudGlvbiBtZWNo
YW5pc207IGEgbG9ja2VkIHJlZ2lzdGVyCi0vLyB3aWxsIG5ldmVyIGJlIHJlYWxsb2NhdGVkICh0
aGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBvcGVyYW5kcyB0bwotLy8gdGhlIGN1cnJlbnQgbm9k
ZSBhcmUgaW4gcmVnaXN0ZXJzKS4gTmFtaW5nLCBjb252ZXJzZWx5LCBpbiBhIHdlYWsKLS8vIHJl
dGVudGlvbiBtZWNoYW5pc20gLSBhbGxvY2F0aW5nIGEgcmVnaXN0ZXIgbWF5IGZvcmNlIGEgbmFt
ZWQgdmFsdWUKLS8vIHRvIGJlIHNwaWxsZWQuCi0vLwotLy8gQWxsIG5hbWVkIHZhbHVlcyBtdXN0
IGJlIGdpdmVuIGEgaGludCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBNaW4gYW5kCi0vLyBsZXNzIHRo
YW4gTWF4LgotdGVtcGxhdGU8Y2xhc3MgQmFua0luZm8+Ci1jbGFzcyBSZWdpc3RlckJhbmsgewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBSZWdJRDsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IE5VTV9SRUdTID0gQmFua0luZm86Om51bWJlck9mUmVnaXN0ZXJz
OwotCi0gICAgdHlwZWRlZiB1aW50MzJfdCBTcGlsbEhpbnQ7Ci0gICAgc3RhdGljIGNvbnN0IFNw
aWxsSGludCBTcGlsbEhpbnRJbnZhbGlkID0gMHhmZmZmZmZmZjsKLQotcHVibGljOgotICAgIFJl
Z2lzdGVyQmFuaygpCi0gICAgewotICAgIH0KLQotICAgIC8vIEF0dGVtcHQgdG8gYWxsb2NhdGUg
YSByZWdpc3RlciAtIHRoaXMgZnVuY3Rpb24gZmluZHMgYW4gdW5sb2NrZWQKLSAgICAvLyByZWdp
c3RlciwgbG9ja3MgaXQsIGFuZCByZXR1cm5zIGl0LiBJZiBub25lIGNhbiBiZSBmb3VuZCwgdGhp
cwotICAgIC8vIHJldHVybnMgLTEgKEludmFsaWRHUFJSZWcgb3IgSW52YWxpZEZQUlJlZykuCi0g
ICAgUmVnSUQgdHJ5QWxsb2NhdGUoKQotICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGln
bm9yZWQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBOVU1fUkVHUzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZGF0YVtp
XS5sb2NrQ291bnQgJiYgIW1fZGF0YVtpXS5uYW1lLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChpLCBpZ25vcmVkKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIChSZWdJRCktMTsKLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZSBh
IHJlZ2lzdGVyIC0gdGhpcyBmdW5jdGlvbiBmaW5kcyBhbiB1bmxvY2tlZCByZWdpc3RlciwKLSAg
ICAvLyBsb2NrcyBpdCwgYW5kIHJldHVybnMgaXQuIElmIGFueSBuYW1lZCByZWdpc3RlcnMgZXhp
c3QsIG9uZQotICAgIC8vIG9mIHRoZXNlIHNob3VsZCBiZSBzZWxlY3RlZCB0byBiZSBhbGxvY2F0
ZWQuIElmIGFsbCB1bmxvY2tlZAotICAgIC8vIHJlZ2lzdGVycyBhcmUgbmFtZWQsIHRoZW4gb25l
IG9mIHRoZSBuYW1lZCByZWdpc3RlcnMgd2lsbCBuZWVkCi0gICAgLy8gdG8gYmUgc3BpbGxlZC4g
SW4gdGhpcyBjYXNlIHRoZSByZWdpc3RlciBzZWxlY3RlZCB0byBiZSBzcGlsbGVkCi0gICAgLy8g
d2lsbCBiZSBvbmUgb2YgdGhlIHJlZ2lzdGVycyB0aGF0IGhhcyB0aGUgbG93ZXN0ICdzcGlsbE9y
ZGVyJwotICAgIC8vIGNvc3QgYXNzb2NpYXRlZCB3aXRoIGl0LgotICAgIC8vCi0gICAgLy8gVGhp
cyBtZXRob2Qgc2VsZWN0IHRoZSByZWdpc3RlciB0byBiZSBhbGxvY2F0ZWQsIGFuZCBjYWxscyB0
aGUKLSAgICAvLyBwcml2YXRlICdhbGxvY2F0ZUludGVybmFsJyBtZXRob2QgdG8gdXBkYXRlIGlu
dGVybmFsIGRhdGEKLSAgICAvLyBzdHJ1Y3R1cmVzIGFjY29yZGluZ2x5LgotICAgIFJlZ0lEIGFs
bG9jYXRlKFZpcnR1YWxSZWdpc3RlciAmc3BpbGxNZSkKLSAgICB7Ci0gICAgICAgIHVpbnQzMl90
IGN1cnJlbnRMb3dlc3QgPSBOVU1fUkVHUzsKLSAgICAgICAgU3BpbGxIaW50IGN1cnJlbnRTcGls
bE9yZGVyID0gU3BpbGxIaW50SW52YWxpZDsKLQotICAgICAgICAvLyBUaGlzIGxvb3AgaXMgYnJv
a2VuIGludG8gdHdvIGhhbHZlcywgbG9vcGluZyBmcm9tIHRoZSBsYXN0IGFsbG9jYXRlZAotICAg
ICAgICAvLyByZWdpc3RlciAodGhlIHJlZ2lzdGVyIHJldHVybmVkIGxhc3QgdGltZSB0aGlzIG1l
dGhvZCB3YXMgY2FsbGVkKSB0bwotICAgICAgICAvLyB0aGUgbWF4aW11bSByZWdpc3RlciB2YWx1
ZSwgdGhlbiBmcm9tIDAgdG8gdGhlIGxhc3QgYWxsb2NhdGVkLgotICAgICAgICAvLyBUaGlzIGlt
cGxlbWVudHMgYSBzaW1wbGUgcm91bmQtcm9iaW4gbGlrZSBhcHByb2FjaCB0byB0cnkgdG8gcmVk
dWNlCi0gICAgICAgIC8vIHRocmFzaCwgYW5kIG1pbmltaXplIHRpbWUgc3BlbnQgc2Nhbm5pbmcg
bG9ja2VkIHJlZ2lzdGVycyBpbiBhbGxvY2F0aW9uLgotICAgICAgICAvLyBJZiBhIHVubG9ja2Vk
IGFuZCB1bm5hbWVkIHJlZ2lzdGVyIGlzIGZvdW5kIHJldHVybiBpdCBpbW1lZGlhdGVseS4KLSAg
ICAgICAgLy8gT3RoZXJ3aXNlLCBmaW5kIHRoZSBmaXJzdCB1bmxvY2tlZCByZWdpc3RlciB3aXRo
IHRoZSBsb3dlc3Qgc3BpbGxPcmRlci4KLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMCA7IGkg
PCBOVU1fUkVHUzsgKytpKSB7Ci0gICAgICAgICAgICAvLyAoMSkgSWYgdGhlIGN1cnJlbnQgcmVn
aXN0ZXIgaXMgbG9ja2VkLCBpdCBpcyBub3QgYSBjYW5kaWRhdGUuCi0gICAgICAgICAgICBpZiAo
bV9kYXRhW2ldLmxvY2tDb3VudCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIC8vICgyKSBJZiB0aGUgY3VycmVudCByZWdpc3RlcidzIHNwaWxsIG9yZGVyIGlzIDAsIHBp
Y2sgdGhpcyEg4oCTIHVuYXNzaWduZWQgcmVnaXN0ZXJzIGhhdmUgc3BpbGwgb3JkZXIgMC4KLSAg
ICAgICAgICAgIFNwaWxsSGludCBzcGlsbE9yZGVyID0gbV9kYXRhW2ldLnNwaWxsT3JkZXI7Ci0g
ICAgICAgICAgICBpZiAoc3BpbGxPcmRlciA9PSBTcGlsbEhpbnRJbnZhbGlkKQotICAgICAgICAg
ICAgICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFsKGksIHNwaWxsTWUpOwotICAgICAgICAgICAg
Ly8gSWYgdGhpcyByZWdpc3RlciBpcyBiZXR0ZXIgKGhhcyBhIGxvd2VyIHNwaWxsIG9yZGVyIHZh
bHVlKSB0aGFuIGFueSBwcmlvcgotICAgICAgICAgICAgLy8gY2FuZGlkYXRlLCB0aGVuIHJlY29y
ZCBpdC4KLSAgICAgICAgICAgIGlmIChzcGlsbE9yZGVyIDwgY3VycmVudFNwaWxsT3JkZXIpIHsK
LSAgICAgICAgICAgICAgICBjdXJyZW50U3BpbGxPcmRlciA9IHNwaWxsT3JkZXI7Ci0gICAgICAg
ICAgICAgICAgY3VycmVudExvd2VzdCA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBEZWFkbG9jayBjaGVjayAtIHRoaXMgY291bGQgb25seSBvY2N1ciBpcyBhbGwg
cmVnaXN0ZXJzIGFyZSBsb2NrZWQhCi0gICAgICAgIEFTU0VSVChjdXJyZW50TG93ZXN0ICE9IE5V
TV9SRUdTICYmIGN1cnJlbnRTcGlsbE9yZGVyICE9IFNwaWxsSGludEludmFsaWQpOwotICAgICAg
ICAvLyBUaGVyZSB3ZXJlIG5vIGF2YWlsYWJsZSByZWdpc3RlcnM7IGN1cnJlbnRMb3dlc3Qgd2ls
bCBuZWVkIHRvIGJlIHNwaWxsZWQuCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFsKGN1
cnJlbnRMb3dlc3QsIHNwaWxsTWUpOwotICAgIH0KLQotICAgIHVpbnQzMl90IGxvY2tlZENvdW50
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gMCA7IGkgPCBOVU1fUkVHUzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
bV9kYXRhW2ldLmxvY2tDb3VudCkKLSAgICAgICAgICAgICAgICArK2NvdW50OwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBjb3VudDsKLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZXMgdGhlIGdp
dmVuIHJlZ2lzdGVyLCBldmVuIGlmIHRoaXMgd2lsbCBmb3JjZSBhIHNwaWxsLgotICAgIFZpcnR1
YWxSZWdpc3RlciBhbGxvY2F0ZVNwZWNpZmljKFJlZ0lEIHJlZykKLSAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gQmFua0luZm86OnRvSW5kZXgocmVnKTsKLQotICAgICAgICArK21fZGF0
YVtpbmRleF0ubG9ja0NvdW50OwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSA9IG5hbWVB
dEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKG5hbWUuaXNWYWxpZCgpKQotICAgICAgICAgICAg
cmVsZWFzZUF0SW5kZXgoaW5kZXgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0g
ICAgfQotCi0gICAgLy8gcmV0YWluL3JlbGVhc2UgLSB0aGVzZSBtZXRob2RzIGFyZSB1c2VkIHRv
IGFzc29jaWF0ZS9kaXNhc3NvY2lhdGUgbmFtZXMKLSAgICAvLyB3aXRoIHZhbHVlcyBpbiByZWdp
c3RlcnMuIHJldGFpbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbG9ja2VkIHJlZ2lzdGVycy4K
LSAgICB2b2lkIHJldGFpbihSZWdJRCByZWcsIFZpcnR1YWxSZWdpc3RlciBuYW1lLCBTcGlsbEhp
bnQgc3BpbGxPcmRlcikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQmFua0luZm86
OnRvSW5kZXgocmVnKTsKLQotICAgICAgICAvLyBTcGlsbEhpbnQgbXVzdCBiZSB2YWxpZC4KLSAg
ICAgICAgQVNTRVJUKHNwaWxsT3JkZXIgIT0gU3BpbGxIaW50SW52YWxpZCk7Ci0gICAgICAgIC8v
ICdpbmRleCcgbXVzdCBiZSBhIHZhbGlkLCBsb2NrZWQgcmVnaXN0ZXIuCi0gICAgICAgIEFTU0VS
VChpbmRleCA8IE5VTV9SRUdTKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0Nv
dW50KTsKLSAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgbm90IGN1cnJlbnRseSBiZSBuYW1lZCwg
dGhlIG5ldyBuYW1lIG11c3QgYmUgdmFsaWQuCi0gICAgICAgIEFTU0VSVCghbV9kYXRhW2luZGV4
XS5uYW1lLmlzVmFsaWQoKSk7Ci0gICAgICAgIEFTU0VSVChuYW1lLmlzVmFsaWQoKSk7Ci0gICAg
ICAgIC8vICdpbmRleCcgc2hvdWxkIG5vdCBjdXJyZW50bHkgaGF2ZSBhIHNwaWxsT3JkZXIuCi0g
ICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgPT0gU3BpbGxIaW50SW52YWxp
ZCk7Ci0KLSAgICAgICAgbV9kYXRhW2luZGV4XS5uYW1lID0gbmFtZTsKLSAgICAgICAgbV9kYXRh
W2luZGV4XS5zcGlsbE9yZGVyID0gc3BpbGxPcmRlcjsKLSAgICB9Ci0gICAgdm9pZCByZWxlYXNl
KFJlZ0lEIHJlZykKLSAgICB7Ci0gICAgICAgIHJlbGVhc2VBdEluZGV4KEJhbmtJbmZvOjp0b0lu
ZGV4KHJlZykpOwotICAgIH0KLQotICAgIC8vIGxvY2svdW5sb2NrIHJlZ2lzdGVyLCBlbnN1cmVz
IHRoYXQgdGhleSBhcmUgbm90IHNwaWxsZWQuCi0gICAgdm9pZCBsb2NrKFJlZ0lEIHJlZykKLSAg
ICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQmFua0luZm86OnRvSW5kZXgocmVnKTsKLQot
ICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7Ci0gICAgICAgICsrbV9kYXRhW2luZGV4
XS5sb2NrQ291bnQ7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLmxvY2tDb3VudCk7Ci0g
ICAgfQotICAgIHZvaWQgdW5sb2NrKFJlZ0lEIHJlZykKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gQmFua0luZm86OnRvSW5kZXgocmVnKTsKLQotICAgICAgICBBU1NFUlQoaW5kZXgg
PCBOVU1fUkVHUyk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLmxvY2tDb3VudCk7Ci0g
ICAgICAgIC0tbV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7Ci0gICAgfQotICAgIGJvb2wgaXNMb2Nr
ZWQoUmVnSUQgcmVnKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTG9ja2VkQXRJbmRl
eChCYW5rSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgdGhlIG5hbWUg
KFZpcnR1YWxSZWdpc3RlcikgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAgIC8vIGdpdmVuIHJlZ2lz
dGVyIChvciBkZWZhdWx0IFZpcnR1YWxSZWdpc3RlcigpIGZvciBub25lKS4KLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgbmFtZShSZWdJRCByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbmFt
ZUF0SW5kZXgoQmFua0luZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
aXNJblVzZShSZWdJRCByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNMb2NrZWQo
cmVnKSB8fCBuYW1lKHJlZykuaXNWYWxpZCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAo
KQotICAgIHsKLSAgICAgICAgLy8gRm9yIGVhY2ggcmVnaXN0ZXIsIHByaW50IHRoZSBWaXJ0dWFs
UmVnaXN0ZXIgJ25hbWUnLgotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPTA7IGkgPCBOVU1fUkVH
UzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9kYXRhW2ldLm5hbWUuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCJbJTAyZF0iLCBtX2RhdGFbaV0ubmFtZS5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlstLV0iKTsKLSAg
ICAgICAgfQotICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSAgICB9Ci0KLSAgICBjbGFzcyBpdGVy
YXRvciB7Ci0gICAgZnJpZW5kIGNsYXNzIFJlZ2lzdGVyQmFuazxCYW5rSW5mbz47Ci0gICAgcHVi
bGljOgotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX2JhbmstPm5hbWVBdEluZGV4KG1faW5kZXgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBtX2JhbmstPmlzTG9ja2VkQXRJbmRleChtX2luZGV4KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgcmVsZWFzZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFu
ay0+cmVsZWFzZUF0SW5kZXgobV9pbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdJRCBy
ZWdJRCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBCYW5rSW5mbzo6dG9S
ZWdpc3RlcihtX2luZGV4KTsKLSAgICAgICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBj
b25zdCBjaGFyKiBkZWJ1Z05hbWUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gQmFua0luZm86OmRlYnVnTmFtZShyZWdJRCgpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAg
ICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21f
aW5kZXg7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9iYW5rID09IG90aGVyLm1fYmFuayk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCAhPSBvdGhlci5tX2luZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9pbmRl
eDsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgaXRlcmF0b3IoUmVnaXN0ZXJC
YW5rPEJhbmtJbmZvPiogYmFuaywgdW5zaWduZWQgaW5kZXgpCi0gICAgICAgICAgICA6IG1fYmFu
ayhiYW5rKQotICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBSZWdpc3RlckJhbms8QmFua0luZm8+KiBtX2Jhbms7Ci0gICAgICAgIHVu
c2lnbmVkIG1faW5kZXg7Ci0gICAgfTsKLQotICAgIGl0ZXJhdG9yIGJlZ2luKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsKLSAgICB9Ci0KLSAgICBpdGVyYXRvciBl
bmQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIE5VTV9SRUdTKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc0xvY2tlZEF0SW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7Ci0gICAgICAg
IHJldHVybiBtX2RhdGFbaW5kZXhdLmxvY2tDb3VudDsKLSAgICB9Ci0KLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgbmFtZUF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFbaW5kZXhdLm5h
bWU7Ci0gICAgfQotCi0gICAgdm9pZCByZWxlYXNlQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAg
ICB7Ci0gICAgICAgIC8vICdpbmRleCcgbXVzdCBiZSBhIHZhbGlkIHJlZ2lzdGVyLgotICAgICAg
ICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7Ci0gICAgICAgIC8vICdpbmRleCcgc2hvdWxkIGN1
cnJlbnRseSBiZSBuYW1lZC4KLSAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubmFtZS5pc1Zh
bGlkKCkpOwotICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkgaGF2ZSBhIHZhbGlk
IHNwaWxsIG9yZGVyLgotICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5zcGlsbE9yZGVyICE9
IFNwaWxsSGludEludmFsaWQpOwotCi0gICAgICAgIG1fZGF0YVtpbmRleF0ubmFtZSA9IFZpcnR1
YWxSZWdpc3RlcigpOwotICAgICAgICBtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgPSBTcGlsbEhp
bnRJbnZhbGlkOwotICAgIH0KLQotICAgIC8vIFVzZWQgYnkgJ2FsbG9jYXRlJywgYWJvdmUsIHRv
IHVwZGF0ZSBpbmZvcmFtdGlvbiBpbiB0aGUgbWFwLgotICAgIFJlZ0lEIGFsbG9jYXRlSW50ZXJu
YWwodWludDMyX3QgaSwgVmlydHVhbFJlZ2lzdGVyICZzcGlsbE1lKQotICAgIHsKLSAgICAgICAg
Ly8gJ2knIG11c3QgYmUgYSB2YWxpZCwgdW5sb2NrZWQgcmVnaXN0ZXIuCi0gICAgICAgIEFTU0VS
VChpIDwgTlVNX1JFR1MgJiYgIW1fZGF0YVtpXS5sb2NrQ291bnQpOwotCi0gICAgICAgIC8vIFJl
dHVybiB0aGUgVmlydHVhbFJlZ2lzdGVyIG9mIHRoZSBuYW1lZCB2YWx1ZSBjdXJyZW50bHkgc3Rv
cmVkIGluCi0gICAgICAgIC8vIHRoZSByZWdpc3RlciBiZWluZyByZXR1cm5lZCAtIG9yIGRlZmF1
bHQgVmlydHVhbFJlZ2lzdGVyKCkgaWYgbm9uZS4KLSAgICAgICAgc3BpbGxNZSA9IG1fZGF0YVtp
XS5uYW1lOwotCi0gICAgICAgIC8vIENsZWFyIGFueSBuYW1lL3NwaWxsT3JkZXIgY3VycmVudGx5
IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0ZXIsCi0gICAgICAgIG1fZGF0YVtpXSA9IE1hcEVu
dHJ5KCk7Ci0gICAgICAgIC8vIE1hcmsgdGhlIHJlZ2lzdGVyIGFzIGxvY2tlZCAod2l0aCBhIGxv
Y2sgY291bnQgb2YgMSkuCi0gICAgICAgIG1fZGF0YVtpXS5sb2NrQ291bnQgPSAxOwotCi0gICAg
ICAgIHJldHVybiBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICB9Ci0KLSAgICAvLyA9PT0g
TWFwRW50cnkgPT09Ci0gICAgLy8KLSAgICAvLyBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZv
cm1hdGlvbiBmb3IgYW4gaW5kaXZpZHVhbCBtYWNoaW5lIHJlZ2lzdGVyCi0gICAgLy8gYmVpbmcg
bWFuYWdlZCBieSB0aGUgUmVnaXN0ZXJCYW5rLiBGb3IgZWFjaCByZWdpc3RlciB3ZSB0cmFjayBh
IGxvY2sKLSAgICAvLyBjb3VudCwgbmFtZSBhbmQgc3BpbGxPcmRlciBoaW50LgotICAgIHN0cnVj
dCBNYXBFbnRyeSB7Ci0gICAgICAgIE1hcEVudHJ5KCkKLSAgICAgICAgICAgIDogbmFtZShWaXJ0
dWFsUmVnaXN0ZXIoKSkKLSAgICAgICAgICAgICwgc3BpbGxPcmRlcihTcGlsbEhpbnRJbnZhbGlk
KQotICAgICAgICAgICAgLCBsb2NrQ291bnQoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWU7Ci0gICAgICAgIFNwaWxsSGludCBzcGlsbE9yZGVy
OwotICAgICAgICB1aW50MzJfdCBsb2NrQ291bnQ7Ci0gICAgfTsKLQotICAgIC8vIEhvbGRzIHRo
ZSBjdXJyZW50IHN0YXR1cyBvZiBhbGwgcmVnaXN0ZXJzLgotICAgIE1hcEVudHJ5IG1fZGF0YVtO
VU1fUkVHU107Ci19OwotCi10eXBlZGVmIFJlZ2lzdGVyQmFuazxHUFJJbmZvPjo6aXRlcmF0b3Ig
Z3ByX2l0ZXJhdG9yOwotdHlwZWRlZiBSZWdpc3RlckJhbms8RlBSSW5mbz46Oml0ZXJhdG9yIGZw
cl9pdGVyYXRvcjsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCBhMjBlMzlh
ODNhZmU4Y2JiMjkyOTI3MWQzY2UyNWFmZTMzZTdlYTg3Li4yN2MxZDRjMDExZDQyNzgxMTBjMzZm
NDRiNDM1NWQxMWM4NjBkMWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCkBAIC0zNCwxMSArMzQsMTEgQEAKICNpbmNsdWRlICJERkdKSVRDb21w
aWxlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAi
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIgogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCisjaW5jbHVkZSAi
UmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQmFuay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckJhbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMzc0M2I5YTli
NjlkZjlmOTA0MjViM2I4MDkwOTQwZDQ3ZjJlZWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckJhbmsuaApAQCAtMCwwICsxLDM3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BS
SW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gPT09IFJlZ2lzdGVyQmFuayA9PT0KKy8v
CisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBHUFIgYW5kIEZQUiByZWdp
c3RlciBiYW5rcy4KKy8vIEFsbCByZWdpc3RlcnMgaGF2ZSB0d28gcGllY2VzIG9mIHN0YXRlIGFz
c29jaWF0ZWQgd2l0aCB0aGVtOgorLy8gYSBsb2NrIGNvdW50ICh1c2VkIHRvIGluZGljYXRlIHRo
aXMgcmVnaXN0ZXIgaXMgYWxyZWFkeSBpbiB1c2UKKy8vIGluIGNvZGUgZ2VuZXJhdGlvbiBvZiB0
aGUgY3VycmVudCBub2RlLCBhbmQgY2Fubm90IGJlIHNwaWxsZWQgb3IKKy8vIGFsbG9jYXRlZCBh
cyBhIHRlbXBvcmFyeSksIGFuZCBWaXJ0dWFsUmVnaXN0ZXIgJ25hbWUnLCByZWNvcmRpbmcKKy8v
IHdoaWNoIHZhbHVlIChpZiBhbnkpIGEgbWFjaGluZSByZWdpc3RlciBjdXJyZW50bHkgaG9sZHMu
CisvLyBFaXRoZXIgb3IgYm90aCBvZiB0aGVzZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gbWF5IGJl
IHZhbGlkIGZvciBhCisvLyBnaXZlbiByZWdpc3Rlci4gQSByZWdpc3RlciBtYXkgYmU6CisvLwor
Ly8gIC0gdW5sb2NrZWQsIGFuZCB1bm5hbWVkOiBBdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCisv
LyAgLSBsb2NrZWQsIGJ1dCB1bm5hbWVkOiAgIEFscmVhZHkgYWxsb2NhdGVkIGFzIGEgdGVtcG9y
YXJ5IG9yCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBmb3IgdGhlIGN1cnJl
bnQgbm9kZS4KKy8vICAtIHVubG9ja2VkLCBidXQgbmFtZWQ6ICAgQ29udGFpbnMgdGhlIHJlc3Vs
dCBvZiBhIHByaW9yIG9wZXJhdGlvbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90
IHlldCBpbiB1c2UgZm9yIHRoaXMgbm9kZSwKKy8vICAtIGxvY2tlZCwgYnV0IG5hbWVkOiAgICAg
Q29udGFpbnMgdGhlIHJlc3VsdCBvZiBhIHByaW9yIG9wZXJhdGlvbiwKKy8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxyZWFkeSBhbGxvY2F0ZWQgYXMgYSBvcGVyYW5kIHRvIHRoZQorLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IG9wZXJhdGlvbi4KKy8vCisvLyBGb3Ig
ZXZlcnkgbmFtZWQgcmVnaXN0ZXIgd2UgYWxzbyByZWNvcmQgYSBoaW50IHZhbHVlIGluZGljYXRp
bmcKKy8vIHRoZSBvcmRlciBpbiB3aGljaCByZWdpc3RlcnMgc2hvdWxkIGJlIHNlbGVjdGVkIHRv
IGJlIHNwaWxsZWQ7CisvLyByZWdpc3RlcnMgdGhhdCBjYW4gYmUgbW9yZSBjaGVhcGx5IHNwaWxs
ZWQgYW5kL29yIGZpbGxlZCBzaG91bGQKKy8vIGJlIHNlbGVjdGVkIGZpcnN0LgorLy8KKy8vIExv
Y2tpbmcgcmVnaXN0ZXIgaXMgYSBzdHJvbmcgcmV0ZW50aW9uIG1lY2hhbmlzbTsgYSBsb2NrZWQg
cmVnaXN0ZXIKKy8vIHdpbGwgbmV2ZXIgYmUgcmVhbGxvY2F0ZWQgKHRoaXMgaXMgdXNlZCB0byBl
bnN1cmUgdGhlIG9wZXJhbmRzIHRvCisvLyB0aGUgY3VycmVudCBub2RlIGFyZSBpbiByZWdpc3Rl
cnMpLiBOYW1pbmcsIGNvbnZlcnNlbHksIGluIGEgd2VhaworLy8gcmV0ZW50aW9uIG1lY2hhbmlz
bSAtIGFsbG9jYXRpbmcgYSByZWdpc3RlciBtYXkgZm9yY2UgYSBuYW1lZCB2YWx1ZQorLy8gdG8g
YmUgc3BpbGxlZC4KKy8vCisvLyBBbGwgbmFtZWQgdmFsdWVzIG11c3QgYmUgZ2l2ZW4gYSBoaW50
IHRoYXQgaXMgZ3JlYXRlciB0aGFuIE1pbiBhbmQKKy8vIGxlc3MgdGhhbiBNYXguCit0ZW1wbGF0
ZTxjbGFzcyBCYW5rSW5mbz4KK2NsYXNzIFJlZ2lzdGVyQmFuayB7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIFJlZ0lEOworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgTlVNX1JFR1MgPSBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7CisKKyAgICB0eXBlZGVm
IHVpbnQzMl90IFNwaWxsSGludDsKKyAgICBzdGF0aWMgY29uc3QgU3BpbGxIaW50IFNwaWxsSGlu
dEludmFsaWQgPSAweGZmZmZmZmZmOworCitwdWJsaWM6CisgICAgUmVnaXN0ZXJCYW5rKCkKKyAg
ICB7CisgICAgfQorCisgICAgLy8gQXR0ZW1wdCB0byBhbGxvY2F0ZSBhIHJlZ2lzdGVyIC0gdGhp
cyBmdW5jdGlvbiBmaW5kcyBhbiB1bmxvY2tlZAorICAgIC8vIHJlZ2lzdGVyLCBsb2NrcyBpdCwg
YW5kIHJldHVybnMgaXQuIElmIG5vbmUgY2FuIGJlIGZvdW5kLCB0aGlzCisgICAgLy8gcmV0dXJu
cyAtMSAoSW52YWxpZEdQUlJlZyBvciBJbnZhbGlkRlBSUmVnKS4KKyAgICBSZWdJRCB0cnlBbGxv
Y2F0ZSgpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdub3JlZCA9IFZpcnR1YWxS
ZWdpc3RlcigpOworICAgICAgICAKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5V
TV9SRUdTOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9kYXRhW2ldLmxvY2tDb3VudCAmJiAh
bV9kYXRhW2ldLm5hbWUuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0
ZUludGVybmFsKGksIGlnbm9yZWQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gKFJlZ0lEKS0xOworICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgcmVnaXN0ZXIgLSB0aGlz
IGZ1bmN0aW9uIGZpbmRzIGFuIHVubG9ja2VkIHJlZ2lzdGVyLAorICAgIC8vIGxvY2tzIGl0LCBh
bmQgcmV0dXJucyBpdC4gSWYgYW55IG5hbWVkIHJlZ2lzdGVycyBleGlzdCwgb25lCisgICAgLy8g
b2YgdGhlc2Ugc2hvdWxkIGJlIHNlbGVjdGVkIHRvIGJlIGFsbG9jYXRlZC4gSWYgYWxsIHVubG9j
a2VkCisgICAgLy8gcmVnaXN0ZXJzIGFyZSBuYW1lZCwgdGhlbiBvbmUgb2YgdGhlIG5hbWVkIHJl
Z2lzdGVycyB3aWxsIG5lZWQKKyAgICAvLyB0byBiZSBzcGlsbGVkLiBJbiB0aGlzIGNhc2UgdGhl
IHJlZ2lzdGVyIHNlbGVjdGVkIHRvIGJlIHNwaWxsZWQKKyAgICAvLyB3aWxsIGJlIG9uZSBvZiB0
aGUgcmVnaXN0ZXJzIHRoYXQgaGFzIHRoZSBsb3dlc3QgJ3NwaWxsT3JkZXInCisgICAgLy8gY29z
dCBhc3NvY2lhdGVkIHdpdGggaXQuCisgICAgLy8KKyAgICAvLyBUaGlzIG1ldGhvZCBzZWxlY3Qg
dGhlIHJlZ2lzdGVyIHRvIGJlIGFsbG9jYXRlZCwgYW5kIGNhbGxzIHRoZQorICAgIC8vIHByaXZh
dGUgJ2FsbG9jYXRlSW50ZXJuYWwnIG1ldGhvZCB0byB1cGRhdGUgaW50ZXJuYWwgZGF0YQorICAg
IC8vIHN0cnVjdHVyZXMgYWNjb3JkaW5nbHkuCisgICAgUmVnSUQgYWxsb2NhdGUoVmlydHVhbFJl
Z2lzdGVyICZzcGlsbE1lKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgY3VycmVudExvd2VzdCA9
IE5VTV9SRUdTOworICAgICAgICBTcGlsbEhpbnQgY3VycmVudFNwaWxsT3JkZXIgPSBTcGlsbEhp
bnRJbnZhbGlkOworCisgICAgICAgIC8vIFRoaXMgbG9vcCBpcyBicm9rZW4gaW50byB0d28gaGFs
dmVzLCBsb29waW5nIGZyb20gdGhlIGxhc3QgYWxsb2NhdGVkCisgICAgICAgIC8vIHJlZ2lzdGVy
ICh0aGUgcmVnaXN0ZXIgcmV0dXJuZWQgbGFzdCB0aW1lIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQp
IHRvCisgICAgICAgIC8vIHRoZSBtYXhpbXVtIHJlZ2lzdGVyIHZhbHVlLCB0aGVuIGZyb20gMCB0
byB0aGUgbGFzdCBhbGxvY2F0ZWQuCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHNpbXBs
ZSByb3VuZC1yb2JpbiBsaWtlIGFwcHJvYWNoIHRvIHRyeSB0byByZWR1Y2UKKyAgICAgICAgLy8g
dGhyYXNoLCBhbmQgbWluaW1pemUgdGltZSBzcGVudCBzY2FubmluZyBsb2NrZWQgcmVnaXN0ZXJz
IGluIGFsbG9jYXRpb24uCisgICAgICAgIC8vIElmIGEgdW5sb2NrZWQgYW5kIHVubmFtZWQgcmVn
aXN0ZXIgaXMgZm91bmQgcmV0dXJuIGl0IGltbWVkaWF0ZWx5LgorICAgICAgICAvLyBPdGhlcndp
c2UsIGZpbmQgdGhlIGZpcnN0IHVubG9ja2VkIHJlZ2lzdGVyIHdpdGggdGhlIGxvd2VzdCBzcGls
bE9yZGVyLgorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwIDsgaSA8IE5VTV9SRUdTOyArK2kp
IHsKKyAgICAgICAgICAgIC8vICgxKSBJZiB0aGUgY3VycmVudCByZWdpc3RlciBpcyBsb2NrZWQs
IGl0IGlzIG5vdCBhIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIGlmIChtX2RhdGFbaV0ubG9ja0Nv
dW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gKDIpIElmIHRo
ZSBjdXJyZW50IHJlZ2lzdGVyJ3Mgc3BpbGwgb3JkZXIgaXMgMCwgcGljayB0aGlzISDigJMgdW5h
c3NpZ25lZCByZWdpc3RlcnMgaGF2ZSBzcGlsbCBvcmRlciAwLgorICAgICAgICAgICAgU3BpbGxI
aW50IHNwaWxsT3JkZXIgPSBtX2RhdGFbaV0uc3BpbGxPcmRlcjsKKyAgICAgICAgICAgIGlmIChz
cGlsbE9yZGVyID09IFNwaWxsSGludEludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlSW50ZXJuYWwoaSwgc3BpbGxNZSk7CisgICAgICAgICAgICAvLyBJZiB0aGlzIHJlZ2lz
dGVyIGlzIGJldHRlciAoaGFzIGEgbG93ZXIgc3BpbGwgb3JkZXIgdmFsdWUpIHRoYW4gYW55IHBy
aW9yCisgICAgICAgICAgICAvLyBjYW5kaWRhdGUsIHRoZW4gcmVjb3JkIGl0LgorICAgICAgICAg
ICAgaWYgKHNwaWxsT3JkZXIgPCBjdXJyZW50U3BpbGxPcmRlcikgeworICAgICAgICAgICAgICAg
IGN1cnJlbnRTcGlsbE9yZGVyID0gc3BpbGxPcmRlcjsKKyAgICAgICAgICAgICAgICBjdXJyZW50
TG93ZXN0ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERlYWRs
b2NrIGNoZWNrIC0gdGhpcyBjb3VsZCBvbmx5IG9jY3VyIGlzIGFsbCByZWdpc3RlcnMgYXJlIGxv
Y2tlZCEKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRMb3dlc3QgIT0gTlVNX1JFR1MgJiYgY3VycmVu
dFNwaWxsT3JkZXIgIT0gU3BpbGxIaW50SW52YWxpZCk7CisgICAgICAgIC8vIFRoZXJlIHdlcmUg
bm8gYXZhaWxhYmxlIHJlZ2lzdGVyczsgY3VycmVudExvd2VzdCB3aWxsIG5lZWQgdG8gYmUgc3Bp
bGxlZC4KKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJuYWwoY3VycmVudExvd2VzdCwgc3Bp
bGxNZSk7CisgICAgfQorCisgICAgdWludDMyX3QgbG9ja2VkQ291bnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgdWludDMyX3QgY291bnQgPSAwOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
IDsgaSA8IE5VTV9SRUdTOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGFbaV0ubG9ja0Nv
dW50KQorICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGNvdW50OworICAgIH0KKworICAgIC8vIEFsbG9jYXRlcyB0aGUgZ2l2ZW4gcmVnaXN0ZXIsIGV2
ZW4gaWYgdGhpcyB3aWxsIGZvcmNlIGEgc3BpbGwuCisgICAgVmlydHVhbFJlZ2lzdGVyIGFsbG9j
YXRlU3BlY2lmaWMoUmVnSUQgcmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBC
YW5rSW5mbzo6dG9JbmRleChyZWcpOworCisgICAgICAgICsrbV9kYXRhW2luZGV4XS5sb2NrQ291
bnQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbmFtZUF0SW5kZXgoaW5kZXgpOwor
ICAgICAgICBpZiAobmFtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZWxlYXNlQXRJbmRleChp
bmRleCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICAvLyBy
ZXRhaW4vcmVsZWFzZSAtIHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8gYXNzb2NpYXRlL2Rpc2Fz
c29jaWF0ZSBuYW1lcworICAgIC8vIHdpdGggdmFsdWVzIGluIHJlZ2lzdGVycy4gcmV0YWluIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBsb2NrZWQgcmVnaXN0ZXJzLgorICAgIHZvaWQgcmV0YWlu
KFJlZ0lEIHJlZywgVmlydHVhbFJlZ2lzdGVyIG5hbWUsIFNwaWxsSGludCBzcGlsbE9yZGVyKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBCYW5rSW5mbzo6dG9JbmRleChyZWcpOwor
CisgICAgICAgIC8vIFNwaWxsSGludCBtdXN0IGJlIHZhbGlkLgorICAgICAgICBBU1NFUlQoc3Bp
bGxPcmRlciAhPSBTcGlsbEhpbnRJbnZhbGlkKTsKKyAgICAgICAgLy8gJ2luZGV4JyBtdXN0IGJl
IGEgdmFsaWQsIGxvY2tlZCByZWdpc3Rlci4KKyAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JF
R1MpOworICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5sb2NrQ291bnQpOworICAgICAgICAv
LyAnaW5kZXgnIHNob3VsZCBub3QgY3VycmVudGx5IGJlIG5hbWVkLCB0aGUgbmV3IG5hbWUgbXVz
dCBiZSB2YWxpZC4KKyAgICAgICAgQVNTRVJUKCFtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxpZCgp
KTsKKyAgICAgICAgQVNTRVJUKG5hbWUuaXNWYWxpZCgpKTsKKyAgICAgICAgLy8gJ2luZGV4JyBz
aG91bGQgbm90IGN1cnJlbnRseSBoYXZlIGEgc3BpbGxPcmRlci4KKyAgICAgICAgQVNTRVJUKG1f
ZGF0YVtpbmRleF0uc3BpbGxPcmRlciA9PSBTcGlsbEhpbnRJbnZhbGlkKTsKKworICAgICAgICBt
X2RhdGFbaW5kZXhdLm5hbWUgPSBuYW1lOworICAgICAgICBtX2RhdGFbaW5kZXhdLnNwaWxsT3Jk
ZXIgPSBzcGlsbE9yZGVyOworICAgIH0KKyAgICB2b2lkIHJlbGVhc2UoUmVnSUQgcmVnKQorICAg
IHsKKyAgICAgICAgcmVsZWFzZUF0SW5kZXgoQmFua0luZm86OnRvSW5kZXgocmVnKSk7CisgICAg
fQorCisgICAgLy8gbG9jay91bmxvY2sgcmVnaXN0ZXIsIGVuc3VyZXMgdGhhdCB0aGV5IGFyZSBu
b3Qgc3BpbGxlZC4KKyAgICB2b2lkIGxvY2soUmVnSUQgcmVnKQorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBCYW5rSW5mbzo6dG9JbmRleChyZWcpOworCisgICAgICAgIEFTU0VSVChp
bmRleCA8IE5VTV9SRUdTKTsKKyAgICAgICAgKyttX2RhdGFbaW5kZXhdLmxvY2tDb3VudDsKKyAg
ICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKKyAgICB9CisgICAgdm9pZCB1
bmxvY2soUmVnSUQgcmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBCYW5rSW5m
bzo6dG9JbmRleChyZWcpOworCisgICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKKyAg
ICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKKyAgICAgICAgLS1tX2RhdGFb
aW5kZXhdLmxvY2tDb3VudDsKKyAgICB9CisgICAgYm9vbCBpc0xvY2tlZChSZWdJRCByZWcpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNMb2NrZWRBdEluZGV4KEJhbmtJbmZvOjp0b0lu
ZGV4KHJlZykpOworICAgIH0KKworICAgIC8vIEdldCB0aGUgbmFtZSAoVmlydHVhbFJlZ2lzdGVy
KSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgLy8gZ2l2ZW4gcmVnaXN0ZXIgKG9yIGRlZmF1bHQg
VmlydHVhbFJlZ2lzdGVyKCkgZm9yIG5vbmUpLgorICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lKFJl
Z0lEIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lQXRJbmRleChCYW5rSW5m
bzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0luVXNlKFJlZ0lEIHJl
ZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0xvY2tlZChyZWcpIHx8IG5hbWUocmVn
KS5pc1ZhbGlkKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcCgpCisgICAgeworICAgICAg
ICAvLyBGb3IgZWFjaCByZWdpc3RlciwgcHJpbnQgdGhlIFZpcnR1YWxSZWdpc3RlciAnbmFtZScu
CisgICAgICAgIGZvciAodWludDMyX3QgaSA9MDsgaSA8IE5VTV9SRUdTOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChtX2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIlslMDJkXSIsIG1fZGF0YVtpXS5uYW1lLm9mZnNldCgpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiWy0tXSIpOworICAgICAgICB9CisgICAgICAg
IGRhdGFMb2dGKCJcbiIpOworICAgIH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBmcmll
bmQgY2xhc3MgUmVnaXN0ZXJCYW5rPEJhbmtJbmZvPjsKKyAgICBwdWJsaWM6CisgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBuYW1lKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fYmFuay0+bmFtZUF0SW5kZXgobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IGlzTG9ja2VkKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYmFuay0+
aXNMb2NrZWRBdEluZGV4KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZWxl
YXNlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYW5rLT5yZWxlYXNlQXRJbmRl
eChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ0lEIHJlZ0lEKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjp0b1JlZ2lzdGVyKG1faW5kZXgp
OworICAgICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGNvbnN0IGNoYXIqIGRlYnVn
TmFtZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYW5rSW5mbzo6ZGVi
dWdOYW1lKHJlZ0lEKCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrbV9pbmRleDsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2JhbmsgPT0gb3RoZXIubV9iYW5rKTsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ICE9
IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBpdGVyYXRvcihSZWdpc3RlckJhbms8QmFua0luZm8+KiBi
YW5rLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9iYW5rKGJhbmspCisgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJl
Z2lzdGVyQmFuazxCYW5rSW5mbz4qIG1fYmFuazsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsK
KyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yKHRoaXMsIDApOworICAgIH0KKworICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgeworICAg
ICAgICByZXR1cm4gaXRlcmF0b3IodGhpcywgTlVNX1JFR1MpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBib29sIGlzTG9ja2VkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtp
bmRleF0ubG9ja0NvdW50OworICAgIH0KKworICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lQXRJbmRl
eCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IE5V
TV9SRUdTKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtpbmRleF0ubmFtZTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlbGVhc2VBdEluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgLy8g
J2luZGV4JyBtdXN0IGJlIGEgdmFsaWQgcmVnaXN0ZXIuCisgICAgICAgIEFTU0VSVChpbmRleCA8
IE5VTV9SRUdTKTsKKyAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgY3VycmVudGx5IGJlIG5hbWVk
LgorICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5uYW1lLmlzVmFsaWQoKSk7CisgICAgICAg
IC8vICdpbmRleCcgc2hvdWxkIGN1cnJlbnRseSBoYXZlIGEgdmFsaWQgc3BpbGwgb3JkZXIuCisg
ICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgIT0gU3BpbGxIaW50SW52YWxp
ZCk7CisKKyAgICAgICAgbV9kYXRhW2luZGV4XS5uYW1lID0gVmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgICAgIG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciA9IFNwaWxsSGludEludmFsaWQ7CisgICAg
fQorCisgICAgLy8gVXNlZCBieSAnYWxsb2NhdGUnLCBhYm92ZSwgdG8gdXBkYXRlIGluZm9yYW10
aW9uIGluIHRoZSBtYXAuCisgICAgUmVnSUQgYWxsb2NhdGVJbnRlcm5hbCh1aW50MzJfdCBpLCBW
aXJ0dWFsUmVnaXN0ZXIgJnNwaWxsTWUpCisgICAgeworICAgICAgICAvLyAnaScgbXVzdCBiZSBh
IHZhbGlkLCB1bmxvY2tlZCByZWdpc3Rlci4KKyAgICAgICAgQVNTRVJUKGkgPCBOVU1fUkVHUyAm
JiAhbV9kYXRhW2ldLmxvY2tDb3VudCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBWaXJ0dWFs
UmVnaXN0ZXIgb2YgdGhlIG5hbWVkIHZhbHVlIGN1cnJlbnRseSBzdG9yZWQgaW4KKyAgICAgICAg
Ly8gdGhlIHJlZ2lzdGVyIGJlaW5nIHJldHVybmVkIC0gb3IgZGVmYXVsdCBWaXJ0dWFsUmVnaXN0
ZXIoKSBpZiBub25lLgorICAgICAgICBzcGlsbE1lID0gbV9kYXRhW2ldLm5hbWU7CisKKyAgICAg
ICAgLy8gQ2xlYXIgYW55IG5hbWUvc3BpbGxPcmRlciBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRo
IHRoZSByZWdpc3RlciwKKyAgICAgICAgbV9kYXRhW2ldID0gTWFwRW50cnkoKTsKKyAgICAgICAg
Ly8gTWFyayB0aGUgcmVnaXN0ZXIgYXMgbG9ja2VkICh3aXRoIGEgbG9jayBjb3VudCBvZiAxKS4K
KyAgICAgICAgbV9kYXRhW2ldLmxvY2tDb3VudCA9IDE7CisKKyAgICAgICAgcmV0dXJuIEJhbmtJ
bmZvOjp0b1JlZ2lzdGVyKGkpOworICAgIH0KKworICAgIC8vID09PSBNYXBFbnRyeSA9PT0KKyAg
ICAvLworICAgIC8vIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciBhbiBp
bmRpdmlkdWFsIG1hY2hpbmUgcmVnaXN0ZXIKKyAgICAvLyBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBS
ZWdpc3RlckJhbmsuIEZvciBlYWNoIHJlZ2lzdGVyIHdlIHRyYWNrIGEgbG9jaworICAgIC8vIGNv
dW50LCBuYW1lIGFuZCBzcGlsbE9yZGVyIGhpbnQuCisgICAgc3RydWN0IE1hcEVudHJ5IHsKKyAg
ICAgICAgTWFwRW50cnkoKQorICAgICAgICAgICAgOiBuYW1lKFZpcnR1YWxSZWdpc3RlcigpKQor
ICAgICAgICAgICAgLCBzcGlsbE9yZGVyKFNwaWxsSGludEludmFsaWQpCisgICAgICAgICAgICAs
IGxvY2tDb3VudCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbmFtZTsKKyAgICAgICAgU3BpbGxIaW50IHNwaWxsT3JkZXI7CisgICAgICAgIHVpbnQz
Ml90IGxvY2tDb3VudDsKKyAgICB9OworCisgICAgLy8gSG9sZHMgdGhlIGN1cnJlbnQgc3RhdHVz
IG9mIGFsbCByZWdpc3RlcnMuCisgICAgTWFwRW50cnkgbV9kYXRhW05VTV9SRUdTXTsKK307CisK
K3R5cGVkZWYgUmVnaXN0ZXJCYW5rPEdQUkluZm8+OjppdGVyYXRvciBncHJfaXRlcmF0b3I7Cit0
eXBlZGVmIFJlZ2lzdGVyQmFuazxGUFJJbmZvPjo6aXRlcmF0b3IgZnByX2l0ZXJhdG9yOworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggODZjM2E4ZjgyOThkODM0ZDMzMTFmYzVk
ZTU1ZDE5MmIzMGQwNGM2MS4uYTU1MDIyZGQwMTJhOWU5Y2NkMzdjZjVmODE5Mjk4YzViYTA5OWEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcApAQCAtMTYxLDggKzE2MSw2IEBAIGNsYXNzIEIzSVJHZW5lcmF0b3IgewogICAgIHR5cGVk
ZWYgQ29udHJvbERhdGE6OlJlc3VsdExpc3QgUmVzdWx0TGlzdDsKICAgICB0eXBlZGVmIEZ1bmN0
aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnkgQ29udHJvbEVudHJ5OwogCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxs
cHRyOwotCiAgICAgdHlwZWRlZiBTdHJpbmcgRXJyb3JUeXBlOwogICAgIHR5cGVkZWYgVW5leHBl
Y3RlZDxFcnJvclR5cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7CiAgICAgdHlwZWRlZiBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT4gUmVzdWx0OwpAQCAt
MTg3LDYgKzE4NSw3IEBAIGNsYXNzIEIzSVJHZW5lcmF0b3IgewogICAgIC8vIExvY2FscwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHRlZUxvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOwogCiAgICAgLy8gR2xvYmFscwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CkBAIC0yMTQsMTQgKzIxMywxNCBAQCBjbGFzcyBCM0lSR2Vu
ZXJhdG9yIHsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9V
bnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHJldHVyblZhbHVlcyk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Np
b25UeXBlPiBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250
cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENv
bnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVu
dHJ5Jik7CiAKICAgICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQz
Ml90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0KTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0
dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgc3RkOjpvcHRpb25hbDxFeHByZXNz
aW9uVHlwZT4mIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVu
dHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNr
KTsKQEAgLTYxOSw2ICs2MTgsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXMKICAgICByZXR1
cm4geyB9OwogfQogCithdXRvIEIzSVJHZW5lcmF0b3I6OnRlZUxvY2FsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
c2V0TG9jYWwoaW5kZXgsIHZhbHVlKTsKK30KKwogYXV0byBCM0lSR2VuZXJhdG9yOjpnZXRHbG9i
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5z
dGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxz
KCkpKTsKQEAgLTEwMTEsMTQgKzEwMTUsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1
cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmEKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9s
RGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9uVHlwZT4g
Y29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJl
c3VsdEZvckJyYW5jaCgpKTsKIAogICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0
QmxvY2tGb3JCcmFuY2goKTsKICAgICBpZiAoY29uZGl0aW9uKSB7CiAgICAgICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBjb25k
aXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEIzOjpCcmFuY2gsIG9yaWdpbigpLCBjb25kaXRpb24udmFsdWUoKSk7CiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpLCBGcmVxdWVu
dGVkQmxvY2soY29udGludWF0aW9uKSk7CiAgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3Io
bV9jdXJyZW50QmxvY2spOwogICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1f
Y3VycmVudEJsb2NrKTsKQEAgLTEwNzksNyArMTA4Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7
CiAKQEAgLTExNDgsMTggKzExNTIsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOwogCi0gICAgICAgIGlmIChyZXR1cm5U
eXBlID09IFZvaWQpCi0gICAgICAgICAgICByZXN1bHQgPSBudWxscHRyOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIFBoaSwgdG9CM1R5cGUocmV0dXJuVHlwZSksIG9yaWdpbigpKTsKLSAgICAgICAgICAg
IHdhc21DYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7Ci0gICAgICAgICAgICBlbWJl
ZGRlckNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAgaWYgKHJldHVy
blR5cGUgIT0gVm9pZCkgeworICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0VmFsdWUg
PSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJl
dHVyblR5cGUpLCBvcmlnaW4oKSk7CisgICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVwc2lsb24t
PnNldFBoaShyZXN1bHRWYWx1ZSk7CisgICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1bHRVcHNp
bG9uLT5zZXRQaGkocmVzdWx0VmFsdWUpOworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0VmFs
dWU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8g
YW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmll
ZCBvdXIgTWVtb3J5LgogICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0
b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCks
IG1fcHJvYywgY29udGludWF0aW9uKTsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywg
b3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAorICAgICAgICBFeHByZXNzaW9u
VHlwZSByZXN1bHRWYWx1ZSA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3By
b2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSks
CiAgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTEx
NzIsMTIgKzExNzUsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOworICAgICAgICBp
ZiAocmVzdWx0VmFsdWUpCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRWYWx1ZTsKICAgICB9
CiAKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJ
bmRleCA9IGFyZ3MudGFrZUxhc3QoKTsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSA9PSBhcmdzLnNpemUoKSk7CkBAIC0xMzEwLDcgKzEzMTUsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3NpbwogICAgICAgICBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCaXRYb3IsIG9yaWdpbigpLCBjYWxsZWVDb2RlLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2Rl
UG9pc29uKSk7CiAKICAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgp
OwotICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisg
ICAgYXV0byogcmVzdWx0VmFsdWUgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwo
bV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5
cGUpLAogICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwogICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CkBAIC0xMzI3LDYgKzEz
MzIsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgICAgICAgICAgICAgIGppdC5jYWxs
KHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CisgICAgaWYgKHJlc3VsdFZhbHVlKQor
ICAgICAgICByZXN1bHQgPSByZXN1bHRWYWx1ZTsKIAogICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhh
dmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBo
YXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCiAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3Rh
dGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VW
YWx1ZSgpLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggMDg4ZTcyOGNlNGNjNTRjZTNjNjA2
YjQwZjI1NWE2MDlkNTdiM2I5MS4uNzAyYzZiODk2ZTIwZWZiNWNmYmZjNDI4YjE1OWJiZjBlNmI3
NWYxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFy
c2VyLmgKQEAgLTE2Nyw5ICsxNjcsOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpi
aW5hcnlDYXNlKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyhyaWdodCwgImJpbmFyeSByaWdodCIpOwogICAgIFdBU01fVFJZX1BPUF9F
WFBSRVNTSU9OX1NUQUNLX0lOVE8obGVmdCwgImJpbmFyeSBsZWZ0Iik7Ci0gICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCByZXN1bHQpKTsK
KyAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVCh0ZW1wbGF0ZSBhZGRPcDxvcD4oV1RGTW92ZShs
ZWZ0KSwgV1RGTW92ZShyaWdodCksIHJlc3VsdCkpOwogCi0gICAgbV9leHByZXNzaW9uU3RhY2su
YXBwZW5kKHJlc3VsdCk7CisgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVz
dWx0KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTgxLDkgKzE4MSw5IEBAIGF1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQ7CiAKICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFD
S19JTlRPKHZhbHVlLCAidW5hcnkiKTsKLSAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVCh0ZW1w
bGF0ZSBhZGRPcDxvcD4odmFsdWUsIHJlc3VsdCkpOworICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKHRlbXBsYXRlIGFkZE9wPG9wPihXVEZNb3ZlKHZhbHVlKSwgcmVzdWx0KSk7CiAKLSAgICBt
X2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICBtX2V4cHJlc3Npb25TdGFjay5h
cHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0yMDksOSAr
MjA5LDkgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkg
LT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19J
TlRPKG5vblplcm8sICJzZWxlY3Qgbm9uLXplcm8iKTsKIAogICAgICAgICBFeHByZXNzaW9uVHlw
ZSByZXN1bHQ7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFNlbGVjdChjb25k
aXRpb24sIG5vblplcm8sIHplcm8sIHJlc3VsdCkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRTZWxlY3QoV1RGTW92ZShjb25kaXRpb24pLCBXVEZNb3ZlKG5vblplcm8pLCBX
VEZNb3ZlKHplcm8pLCByZXN1bHQpKTsKIAotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBl
bmQocmVzdWx0KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVz
dWx0KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0yMjUsOCArMjI1LDggQEAg
YXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFsaWdubWVudCA+IG1lbW9yeUxv
ZzJBbGlnbm1lbnQobV9jdXJyZW50T3Bjb2RlKSwgImJ5dGUgYWxpZ25tZW50ICIsIDF1bGwgPDwg
YWxpZ25tZW50LCAiIGV4Y2VlZHMgbG9hZCdzIG5hdHVyYWwgYWxpZ25tZW50ICIsIDF1bGwgPDwg
bWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRPcGNvZGUpKTsKICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBsb2FkIG9mZnNl
dCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIs
ICJsb2FkIHBvaW50ZXIiKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQobG9hZChz
dGF0aWNfY2FzdDxMb2FkT3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBwb2ludGVyLCByZXN1bHQs
IG9mZnNldCkpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBl
PihtX2N1cnJlbnRPcGNvZGUpLCBXVEZNb3ZlKHBvaW50ZXIpLCByZXN1bHQsIG9mZnNldCkpOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTI0MCw3ICsyNDAsNyBAQCBhdXRvIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBn
ZXQgc3RvcmUgb2Zmc2V0Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNL
X0lOVE8odmFsdWUsICJzdG9yZSB2YWx1ZSIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVT
U0lPTl9TVEFDS19JTlRPKHBvaW50ZXIsICJzdG9yZSBwb2ludGVyIik7Ci0gICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKHN0b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihtX2N1cnJl
bnRPcGNvZGUpLCBwb2ludGVyLCB2YWx1ZSwgb2Zmc2V0KSk7CisgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKHN0b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihtX2N1cnJlbnRPcGNv
ZGUpLCBXVEZNb3ZlKHBvaW50ZXIpLCBXVEZNb3ZlKHZhbHVlKSwgb2Zmc2V0KSk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogI3VuZGVmIENSRUFURV9DQVNFCkBAIC0yNzgsNyArMjc4LDcg
QEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFy
dGlhbFJlc3VsdAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBm
b3IgZ2V0X2xvY2FsIik7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldExvY2Fs
KGluZGV4LCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3Vs
dCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMjg3LDcgKzI4Nyw3IEBAIGF1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBmb3Igc2V0X2xvY2Fs
Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJz
ZXRfbG9jYWwiKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5k
ZXgsIHZhbHVlKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGlu
ZGV4LCBXVEZNb3ZlKHZhbHVlKSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAt
Mjk1LDcgKzI5NSw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVz
c2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBp
bmRleCBmb3IgdGVlX2xvY2FsIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9leHBy
ZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiY2FuJ3QgdGVlX2xvY2FsIG9uIGVtcHR5IGV4cHJlc3Np
b24gc3RhY2siKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5k
ZXgsIG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKSkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVCh0ZWVMb2NhbChpbmRleCwgbV9leHByZXNzaW9uU3RhY2subGFzdCgpKSk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0zMDQsNyArMzA0LDcgQEAgYXV0byBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAg
ICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsK
ICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0R2xvYmFsKGluZGV4LCByZXN1bHQp
KTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIApAQCAtMzEzLDcgKzMxMyw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgRXhwcmVz
c2lvblR5cGUgdmFsdWU7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGluZGV4KSwgImNhbid0IGdldCBzZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKICAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInNldF9nbG9iYWwgdmFsdWUi
KTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0R2xvYmFsKGluZGV4LCB2YWx1
ZSkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzZXRHbG9iYWwoaW5kZXgsIFdU
Rk1vdmUodmFsdWUpKSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0zMzAsMTQg
KzMzMCwxNCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24o
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoY2Fs
bGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVt
b3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1
bWVudHMiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8
IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYXJncy51bmNoZWNr
ZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2tbaV0pOworICAgICAgICAgICAgYXJncy51bmNoZWNr
ZWRBcHBlbmQoV1RGTW92ZShtX2V4cHJlc3Npb25TdGFja1tpXSkpOwogICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAotICAgICAgICBFeHByZXNz
aW9uVHlwZSByZXN1bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247CisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+IHJlc3VsdDsKICAgICAgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQoYWRkQ2FsbChmdW5jdGlvbkluZGV4LCBjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJl
c3VsdCkpOwogCi0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9u
KQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAg
IGlmIChyZXN1bHQpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92
ZShyZXN1bHQudmFsdWUoKSkpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtMzU5
LDE0ICszNTksMTQgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdz
LnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yICIsIGFyZ3VtZW50Q291bnQsICIgY2FsbF9pbmRpcmVjdCBhcmd1bWVudHMi
KTsKICAgICAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSAtIGFyZ3VtZW50Q291bnQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFy
Z3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrW2ldKTsKKyAgICAgICAg
ICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobV9leHByZXNzaW9uU3RhY2tbaV0pKTsK
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAK
LSAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9u
OworICAgICAgICBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiByZXN1bHQ7CiAgICAgICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUs
IGFyZ3MsIHJlc3VsdCkpOwogCi0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlF
eHByZXNzaW9uKQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBl
bmQoV1RGTW92ZShyZXN1bHQudmFsdWUoKSkpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQpAQCAtMzkzLDggKzM5Myw4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
RXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgQ29udHJvbFR5cGUgY29udHJv
bDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGlubGluZVNp
Z25hdHVyZSksICJjYW4ndCBnZXQgaWYncyBpbmxpbmUgc2lnbmF0dXJlIik7CiAgICAgICAgIFdB
U01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiaWYgY29uZGl0aW9u
Iik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZElmKGNvbmRpdGlvbiwgaW5s
aW5lU2lnbmF0dXJlLCBjb250cm9sKSk7Ci0gICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7
IFdURk1vdmUobV9leHByZXNzaW9uU3RhY2spLCBjb250cm9sIH0pOworICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRJZihXVEZNb3ZlKGNvbmRpdGlvbiksIGlubGluZVNpZ25hdHVy
ZSwgY29udHJvbCkpOworICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoeyBXVEZNb3ZlKG1f
ZXhwcmVzc2lvblN0YWNrKSwgV1RGTW92ZShjb250cm9sKSB9KTsKICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2sgPSBFeHByZXNzaW9uTGlzdCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
QEAgLTQwOSw3ICs0MDksNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgY2FzZSBCcjoKICAgICBjYXNlIEJySWY6
IHsKICAgICAgICAgdWludDMyX3QgdGFyZ2V0OwotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24gPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
RXhwcmVzc2lvblR5cGU+IGNvbmRpdGlvbjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIodGFyZ2V0KSwgImNhbid0IGdldCBiciAvIGJyX2lmJ3MgdGFyZ2V0Iik7
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNp
emUoKSwgImJyIC8gYnJfaWYncyB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBz
dGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJl
bnRPcGNvZGUgPT0gQnJJZikKQEAgLTQxOSw3ICs0MTksNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAg
Q29udHJvbFR5cGUmIGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkg
LSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YTsKIAotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGRCcmFuY2goZGF0YSwgY29uZGl0aW9uLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRCcmFuY2goZGF0YSwgV1RGTW92ZShjb25k
aXRpb24pLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IApAQCAtNDQ0LDcgKzQ0NCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
RXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihkZWZhdWx0VGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyX3RhYmxlJ3MgZGVm
YXVsdCB0YXJnZXQgIiwgZGVmYXVsdFRhcmdldCwgIiBleGNlZWRzIGNvbnRyb2wgc3RhY2sgc2l6
ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXplKCkpOwogCiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBS
RVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiYnJfdGFibGUgY29uZGl0aW9uIik7Ci0gICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFN3aXRjaChjb25kaXRpb24sIHRhcmdldHMs
IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSBkZWZhdWx0VGFyZ2V0
XS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKKyAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoYWRkU3dpdGNoKFdURk1vdmUoY29uZGl0aW9uKSwgdGFyZ2V0cywgbV9jb250
cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGRlZmF1bHRUYXJnZXRdLmNvbnRy
b2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogCiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9j
a3MgPSAxOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU1LDcgKzQ1NSw3IEBAIGF1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICAgICAgaWYgKG1fc2lnbmF0dXJlLnJldHVyblR5cGUoKSAhPSBWb2lkKSB7CiAgICAgICAg
ICAgICBFeHByZXNzaW9uVHlwZSByZXR1cm5WYWx1ZTsKICAgICAgICAgICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmV0dXJuVmFsdWUsICJyZXR1cm4iKTsKLSAgICAgICAg
ICAgIHJldHVyblZhbHVlcy5hcHBlbmQocmV0dXJuVmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
VmFsdWVzLmFwcGVuZChXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXR1cm4obV9jb250cm9sU3RhY2tbMF0uY29u
dHJvbERhdGEsIHJldHVyblZhbHVlcykpOwpAQCAtNTAwLDggKzUwMCw4IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhkZWx0YSwgImV4cGVjdCBh
biBpMzIgYXJndW1lbnQgdG8gZ3Jvd19tZW1vcnkgb24gdGhlIHN0YWNrIik7CiAKICAgICAgICAg
RXhwcmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChh
ZGRHcm93TWVtb3J5KGRlbHRhLCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2su
YXBwZW5kKHJlc3VsdCk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEdyb3dN
ZW1vcnkoV1RGTW92ZShkZWx0YSksIHJlc3VsdCkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKIAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
QEAgLTUxNSw3ICs1MTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVz
dWx0OwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDdXJyZW50TWVtb3J5KHJl
c3VsdCkpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUmFpbGd1bkpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUmFp
bGd1bkpJVC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE3NTIyODRiMmVhZTcyMjE2ZDFmMzNhYTFkMTBkZjEx
Y2M3OWRjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21SYWlsZ3VuSklULmNwcApAQCAtMCwwICsxLDU2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXYXNtUmFpbGd1bkpJVC5oIgorCisjaW5jbHVkZSAiUmVnaXN0ZXJCYW5rLmgi
CisjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKK25hbWVzcGFjZSBXYXNtUmFpbGd1bkpJVEludGVybmFsIHsKK3N0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKK2NsYXNzIFJhaWxndW5KSVQ7CisKK2Ns
YXNzIFN0YWNrVmFsdWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrVmFsdWUpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0cnVjdCBMb2NhbCB7
CisgICAgICAgIHVpbnQzMl90IHNsb3QgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBDb25z
dGFudCB7CisgICAgICAgIHVpbnQ2NF90IGJpdHMgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVj
dCBSZWdpc3RlciB7CisgICAgICAgIFJlZyByZWc7CisgICAgfTsKKworICAgIHN0cnVjdCBTdGFj
ayB7CisgICAgICAgIHVpbnQzMl90IHNsb3QgeyAwIH07CisgICAgfTsKKworICAgIC8vIEtlZXAg
dGhlIG9yZGVyIGluIHN5bmMgd2l0aCB0aGUgb3JkZXIgaW4gVmFyaWFudC4KKyAgICBlbnVtIGNs
YXNzIExvY2F0aW9uIDogdWludDhfdCB7CisgICAgICAgIExvY2FsID0gMCwKKyAgICAgICAgQ29u
c3RhbnQsCisgICAgICAgIFJlZ2lzdGVyLAorICAgICAgICBTdGFjaywKKyAgICB9OworICAgIHVz
aW5nIERhdGEgPSBWYXJpYW50PExvY2FsLCBDb25zdGFudCwgUmVnaXN0ZXIsIFN0YWNrPjsKKwor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tWYWx1ZT4gY3JlYXRlQ29uc3RhbnQoUmFp
bGd1bkpJVCogaml0LCBUeXBlIHR5cGUsIHVpbnQ2NF90IGJpdHMpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTdGFja1ZhbHVlPihqaXQsIHR5cGUsIENvbnN0YW50IHsg
Yml0cyB9KTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVmFsdWU+
IGNyZWF0ZUxvY2FsKFJhaWxndW5KSVQqIGppdCwgVHlwZSB0eXBlLCB1aW50MzJfdCBzbG90KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U3RhY2tWYWx1ZT4oaml0LCB0
eXBlLCBMb2NhbCB7IHNsb3QgfSk7CisgICAgfQorCisgICAgRGF0YSBkYXRhKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQorCisgICAgVHlwZSB0eXBlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGU7CisgICAgfQorCisgICAgTG9jYXRpb24g
bG9jYXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExvY2F0
aW9uPihtX2RhdGEuaW5kZXgoKSk7CisgICAgfQorCisgICAgflN0YWNrVmFsdWUoKTsKKworICAg
IFN0YWNrVmFsdWUoUmFpbGd1bkpJVCogaml0LCBUeXBlIHR5cGUsIExvY2FsIGxvY2FsKQorICAg
ICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2Rh
dGEobG9jYWwpCisgICAgeworICAgIH0KKworICAgIFN0YWNrVmFsdWUoUmFpbGd1bkpJVCogaml0
LCBUeXBlIHR5cGUsIENvbnN0YW50IGNvbnN0YW50KQorICAgICAgICA6IG1faml0KGppdCkKKyAg
ICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2RhdGEoY29uc3RhbnQpCisgICAgewor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBSYWlsZ3VuSklUKiBtX2ppdDsKKyAgICBUeXBlIG1fdHlw
ZTsKKyAgICBEYXRhIG1fZGF0YTsKK307CisKK2NsYXNzIEJhc2ljQmxvY2sgeworfTsKKworY2xh
c3MgQ29udHJvbERhdGEgeworcHVibGljOgorICAgIENvbnRyb2xEYXRhKEJsb2NrVHlwZSB0eXBl
LCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24pCisgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisg
ICAgICAgICwgY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICB7CisgICAgfQorCisgICAg
Q29udHJvbERhdGEoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
QmxvY2tUeXBlOjpJZjoKKyAgICAgICAgICAgIG91dC5wcmludCgiSWY6ICAgICAgICIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAg
ICAgIG91dC5wcmludCgiQmxvY2s6ICAgICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgICAg
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVs
OgorICAgICAgICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gYmxvY2tUeXBlOyB9CisKKyAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7
IHJldHVybiByZXN1bHQuc2l6ZSgpOyB9CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0Zv
ckJyYW5jaCgpCisgICAgeworICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkK
KyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsOworICAgICAgICByZXR1cm4gY29udGludWF0aW9u
OworICAgIH0KKworICAgIHZvaWQgY29udmVydElmVG9CbG9jaygpCisgICAgeworICAgICAgICBB
U1NFUlQodHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgICAgICBibG9ja1R5cGUgPSBCbG9j
a1R5cGU6OkJsb2NrOworICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB1
c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1ZhbHVlPj47IC8v
IFN0YWNrVmFsdWUgbXVzdCBiZSBmbHVzaGVkLgorCisgICAgY29uc3QgUmVzdWx0TGlzdCogcmVz
dWx0Rm9yQnJhbmNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tU
eXBlOjpMb29wKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAm
cmVzdWx0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQjNJUkdlbmVyYXRv
cjsKKyAgICBCbG9ja1R5cGUgYmxvY2tUeXBlOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
bjsKKyAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOworICAgIFJlc3VsdExpc3QgcmVzdWx0OworfTsK
KworCitjbGFzcyBSYWlsZ3VuSklUIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSYWlsZ3Vu
SklUKTsKK3B1YmxpYzoKKyAgICBSYWlsZ3VuSklUKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
SW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9y
eU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhj
ZXB0aW9uKTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gc3RkOjp1bmlxdWVfcHRyPFN0
YWNrVmFsdWU+OworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNp
bmcgRXhwcmVzc2lvbkxpc3QgPSBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrVmFsdWU+PjsK
KyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxSYWlsZ3VuSklUPjo6Q29u
dHJvbEVudHJ5OworCisgICAgdXNpbmcgRXJyb3JUeXBlID0gU3RyaW5nOworICAgIHVzaW5nIFVu
ZXhwZWN0ZWRSZXN1bHQgPSBVbmV4cGVjdGVkPEVycm9yVHlwZT47CisgICAgdXNpbmcgUmVzdWx0
ID0gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+
OworICAgIHVzaW5nIFBhcnRpYWxSZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+Owor
CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8UmFpbGd1bkpJVD4qIHBhcnNlcikg
eyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKKworICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBG
UFIgcmVnaXN0ZXJzLgorICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAg
bV9ncHJzLmxvY2socmVnKTsKKyAgICB9CisgICAgdm9pZCBsb2NrKEZQUlJlZyByZWcpCisgICAg
eworICAgICAgICBtX2ZwcnMubG9jayhyZWcpOworICAgIH0KKyAgICB2b2lkIHVubG9jayhHUFJS
ZWcgcmVnKQorICAgIHsKKyAgICAgICAgbV9ncHJzLnVubG9jayhyZWcpOworICAgIH0KKyAgICB2
b2lkIHVubG9jayhGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgbV9mcHJzLnVubG9jayhyZWcp
OworICAgIH0KKworICAgIEdQUlJlZyBhbGxvY2F0ZUdQUihTdGFja1ZhbHVlJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5n
IG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNl
ci5oLgorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3Nl
bWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7
CisgICAgfQorI2RlZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8g
eyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAg
IH0gd2hpbGUgKDApCisKKyAgICAvLyBGdW5jdGlvbnMgaW52b2tlZCBieSBGdW5jdGlvblBhcnNl
ci4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
TG9jYWwoVHlwZSwgdWludDMyX3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5
cGUsIHVpbnQ2NF90KTsKKworICAgIC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHRlZUxvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYg
dmFsdWUpOworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBNZW1vcnkKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZz
ZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEdyb3dNZW1vcnko
RXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMKKyAgICB0ZW1wbGF0ZTxPcFR5
cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHpl
cm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93CisgICAg
Q29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJl
KTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soVHlwZSBzaWdu
YXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKFR5cGUg
c2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihF
eHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVz
dWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRy
b2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOworCisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xE
YXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgc3RkOjpvcHRp
b25hbDxFeHByZXNzaW9uVHlwZT4gY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0
dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0
Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYg
dGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNr
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hh
YmxlKENvbnRyb2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9wdGlvbmFsPEV4cHJl
c3Npb25UeXBlPiYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9uVHlwZT4mIHJlc3VsdCk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKworICAgIHZv
aWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBF
eHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNw
aWxsKHVpbnQzMl90IHN0YWNrU2xvdCwgU3RhY2tWYWx1ZSYpOworCisgICAgQ0NhbGxIZWxwZXJz
IG1faml0OworICAgIFJlZ2lzdGVyQmFuazxHUFJJbmZvPiBtX2dwcnM7CisgICAgUmVnaXN0ZXJC
YW5rPEZQUkluZm8+IG1fZnByczsKKyAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7CisgICAgRnVu
Y3Rpb25QYXJzZXI8UmFpbGd1bkpJVD4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OworICAgIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUg
eyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVu
Y3Rpb25JbmRleCB7IFVJTlRfTUFYIH07CisgICAgY29uc3QgVGllclVwQ291bnQqIG1fdGllclVw
IHsgbnVsbHB0ciB9OworICAgIFRocm93V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2VwdGlv
biB7IG51bGxwdHIgfTsKK307CisKK2NsYXNzIEdQUk9wZXJhbmQgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEdQUk9wZXJhbmQpOworcHVibGljOgorICAgIEdQUk9wZXJhbmQoUmFpbGd1bkpJ
VCogaml0LCBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tWYWx1ZT4mJiB2YWx1ZSkKKyAgICAgICAgOiBt
X2ppdChqaXQpCisgICAgICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKKyAgICB7CisgICAg
ICAgIFN0YWNrVmFsdWU6OkRhdGEgZGF0YSA9IG1fdmFsdWUtPmRhdGEoKTsKKyAgICAgICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RhY2tWYWx1ZTo6UmVnaXN0ZXI+KGRhdGEpKSB7Cisg
ICAgICAgICAgICBtX2dwciA9IFdURjo6Z2V0PFN0YWNrVmFsdWU6OlJlZ2lzdGVyPihkYXRhKS5y
ZWcuZ3ByKCk7CisgICAgICAgICAgICBtX2ppdC0+bG9jayhtX2dwcik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZUdQUigqbV92YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB+R1BST3BlcmFuZCgpCisgICAgeworICAgICAgICBtX2pp
dC0+dW5sb2NrKG1fZ3ByKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2dwcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmFpbGd1bkpJVCogbV9q
aXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrVmFsdWU+IG1fdmFsdWU7CisgICAgR1BSUmVn
IG1fZ3ByIHsgSW52YWxpZEdQUlJlZyB9OworfTsKKworU3RhY2tWYWx1ZTo6flN0YWNrVmFsdWUo
KQoreworfQorCitSYWlsZ3VuSklUOjpSYWlsZ3VuSklUKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNl
cHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21v
ZGUobW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQorICAgICwgbV90
aWVyVXAodGllclVwKQorICAgICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0
aW9uKQoreworICAgIFVOVVNFRF9QQVJBTShjb21waWxhdGlvbik7Cit9CisKK2F1dG8gUmFpbGd1
bkpJVDo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOworICAgIFdBU01fQ09NUElM
RV9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCksICIgYXJndW1lbnRzIik7CisKKyAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCkpOworCisgICAgLy8gRklYTUU6IEZpeCB0aGUgY29kZS4KKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50
MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IGNvdW50OworICAgIHRvdGFsQnl0ZXND
aGVja2VkICs9IG1fbG9jYWxzLnNpemUoKTsKKyAgICB1aW50MzJfdCB0b3RhbEJ5dGVzOworICAg
IFdBU01fQ09NUElMRV9GQUlMX0lGKCh0b3RhbEJ5dGVzQ2hlY2tlZC5zYWZlR2V0KHRvdGFsQnl0
ZXMpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHx8ICFtX2xvY2Fscy50cnlSZXNlcnZl
Q2FwYWNpdHkodG90YWxCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFs
Qnl0ZXMsICIgbG9jYWxzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBpbnQzMl90IHN0YWNrU2xvdCA9IG1fbG9jYWxzLnNpemUoKTsKKyAg
ICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpBbnlmdW5jOgorICAgICAgICBjYXNlIFR5cGU6OkZ1
bmM6CisgICAgICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAvLyBGSVhN
RTogQWRkcmVzcyBvZmZzZXQgb3ZlcmZsb3cuCisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAg
ICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgLShzdGFja1Nsb3QgKiA4KSkpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAtKHN0YWNrU2xv
dCAqIDgpKSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkQ29uc3RhbnQoVHlwZSB0eXBl
LCB1aW50NjRfdCBiaXRzKSAtPiBFeHByZXNzaW9uVHlwZQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgVHlwZTo6QW55ZnVuYzoKKyAgICBjYXNlIFR5cGU6OkZ1bmM6CisgICAgY2Fz
ZSBUeXBlOjpWb2lkOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4geyB9OworCisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJ
NjQ6CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIHJl
dHVybiBTdGFja1ZhbHVlOjpjcmVhdGVDb25zdGFudCh0aGlzLCB0eXBlLCBiaXRzKTsKKyAgICB9
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjpnZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOworICAgIHJlc3VsdCA9IFN0YWNrVmFsdWU6OmNyZWF0
ZUxvY2FsKHRoaXMsIG1fbG9jYWxzW2luZGV4XSwgaW5kZXgpOworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gUmFpbGd1bkpJVDo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBSYWlsZ3VuSklUOjp0ZWVMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZh
bHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWls
Z3VuSklUOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5K
SVQ6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6Omxv
YWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBSYWlsZ3VuSklUOjpzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRk
R3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJ
VDo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8T3BUeXBlPgorYXV0byBSYWls
Z3VuSklUOjphZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTxPcFR5
cGU+CithdXRvIFJhaWxndW5KSVQ6OmFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgR1BST3BlcmFuZCBsZWZ0T3BlcmFuZCh0aGlzLCBXVEZNb3ZlKGxlZnQpKTsKKyAgICBH
UFJPcGVyYW5kIHJpZ2h0T3BlcmFuZCh0aGlzLCBXVEZNb3ZlKHJpZ2h0KSk7CisKKyAgICBHUFJS
ZWcgbGVmdEdQUiA9IGxlZnRPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyByaWdodEdQUiA9IHJp
Z2h0T3BlcmFuZC5ncHIoKTsKKworICAgIG1faml0LmFkZDMyKGxlZnRHUFIsIHJpZ2h0R1BSKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkU2VsZWN0KEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5
cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkVG9wTGV2ZWwoVHlwZSBzaWdu
YXR1cmUpIC0+IENvbnRyb2xEYXRhCit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWls
Z3VuSklUOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkgLT4gQ29udHJvbERhdGEKK3sKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUp
IC0+IENvbnRyb2xEYXRhCit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklU
OjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9s
RGF0YSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBSYWlsZ3VuSklUOjphZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWls
Z3VuSklUOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZFJldHVybihj
b25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6
OmFkZEJyYW5jaChDb250cm9sRGF0YSYsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+IGNv
bmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkU3dpdGNo
KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRh
cmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gUmFpbGd1bkpJVDo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkm
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3Vu
SklUOjphZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBS
YWlsZ3VuSklUOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9uVHlwZT4mIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJ
VDo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordm9pZCBSYWlsZ3VuSklUOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBj
b250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBleHByZXNzaW9uU3RhY2spCit7Cit9
CisKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNv
bnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1v
cnlNb2RlIG1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAs
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCit7CisgICAgYXV0byByZXN1
bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CisKKyAgICBjb21waWxh
dGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2Fs
bEhlbHBlcnM+KCk7CisgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0g
c3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisKKyAgICBSYWlsZ3VuSklUIGNvbXBp
bGVyKGluZm8sIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1
bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBGdW5jdGlvblBh
cnNlcjxSYWlsZ3VuSklUPiBwYXJzZXIoY29tcGlsZXIsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VyLnBhcnNlKCkpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworCisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUmFpbGd1bkpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVJhaWxndW5KSVQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41MjZkZDI0NTE3NzA3OTNjYzQ4NGViNzRlNTliNWI1YzUzMWJlMzIyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVJhaWxndW5KSVQuaApAQCAt
MCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1
c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCBlYTRhNzU5OGZhMDQ5NTQ0Zjg3Njg0
YTUwZTNjZmNiOTEzMTA4ZWFmLi44NzY2OWVhMDhlMzg2NWMzOWFmMWFmNjI5NmE4MDM5ZmZlZDRl
YjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAg
LTgzLDggKzgzLDYgQEAgY2xhc3MgVmFsaWRhdGUgewogICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJl
c3Npb25UeXBlLCAxPiBFeHByZXNzaW9uTGlzdDsKICAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2Vy
PFZhbGlkYXRlPjo6Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsKIAotICAgIHN0YXRpYyBjb25z
dCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBWb2lkOwotCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAogICAgIHsKQEAgLTEwMyw2
ICsxMDEsNyBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAgICAgLy8gTG9jYWxzCiAgICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gdGVlTG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSk7CiAK
ICAgICAvLyBHbG9iYWxzCiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRHbG9iYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtMTI4LDcgKzEyNyw3
IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVs
c2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKICAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFJldHVybihDb250cm9sRGF0YSYgdG9wTGV2ZWwsIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJh
bmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEJyYW5jaChDb250cm9sRGF0YSYsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+IGNv
bmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1
bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwpAQCAtMTM4LDggKzEzNyw4IEBAIGNs
YXNzIFZhbGlkYXRlIHsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hh
YmxlKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwotICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7Ci0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29u
c3QgU2lnbmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
KHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0
KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBT
aWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9wdGlv
bmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0KTsKIAogICAgIGJvb2wgaGFzTWVtb3J5KCkgY29u
c3QgeyByZXR1cm4gISFtX21vZHVsZS5tZW1vcnk7IH0KIApAQCAtMTkyLDYgKzE5MSwxMSBAQCBh
dXRvIFZhbGlkYXRlOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFs
dWUpIC0+IFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gVmFsaWRhdGU6OnRlZUxv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFJlc3VsdAorewor
ICAgIHJldHVybiBzZXRMb2NhbChpbmRleCwgdmFsdWUpOworfQorCiBhdXRvIFZhbGlkYXRlOjpn
ZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3Vs
dAogewogICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9tb2R1bGUuZ2xvYmFs
cy5zaXplKCksICJnZXRfZ2xvYmFsICIsIGluZGV4LCAiIG9mIHVua25vd24gZ2xvYmFsLCBsaW1p
dCBpcyAiLCBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSk7CkBAIC0yNzUsMTAgKzI3OSwxMCBAQCBh
dXRvIFZhbGlkYXRlOjpjaGVja0JyYW5jaFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0LCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgZXhwcgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRh
dGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBzdGFjaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRl
OjphZGRCcmFuY2goQ29udHJvbFR5cGUmIHRhcmdldCwgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9u
VHlwZT4gY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+IFJlc3VsdAog
ewogICAgIC8vIFZvaWQgbWVhbnMgdGhpcyBpcyBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaC4KLSAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBWb2lkICYmIGNvbmRpdGlvbiAh
PSBJMzIsICJjb25kaXRpb25hbCBicmFuY2ggd2l0aCBub24taTMyIGNvbmRpdGlvbiAiLCBjb25k
aXRpb24pOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICYmIGNvbmRpdGlv
bi52YWx1ZSgpICE9IEkzMiwgImNvbmRpdGlvbmFsIGJyYW5jaCB3aXRoIG5vbi1pMzIgY29uZGl0
aW9uICIsIGNvbmRpdGlvbi52YWx1ZSgpKTsKICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQo
dGFyZ2V0LCBzdGFjayk7CiB9CiAKQEAgLTMyMSwxOCArMzI1LDE5IEBAIGF1dG8gVmFsaWRhdGU6
OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkgLT4gUmVzdWx0CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbCh1bnNpZ25lZCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkQ2Fs
bCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQp
IC0+IFJlc3VsdAogewogICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSAhPSBhcmdzLnNpemUoKSwgImFyaXR5IG1pc21hdGNoIGluIGNhbGwsIGdvdCAi
LCBhcmdzLnNpemUoKSwgIiBhcmd1bWVudHMsIGV4cGVjdGVkICIsIHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyAr
K2kpCiAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnc1tpXSAhPSBzaWduYXR1cmUu
YXJndW1lbnQoaSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGwsIGdvdCAiLCBhcmdz
W2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUuYXJndW1lbnQoaSkpOwogCi0gICAgcmVzdWx0
ID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBpZiAoc2lnbmF0dXJlLnJldHVyblR5cGUo
KSAhPSBWb2lkKQorICAgICAgICByZXN1bHQgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdChjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpIC0+
IFJlc3VsdAogewogICAgIGNvbnN0IGF1dG8gYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7CiAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmd1bWVudENvdW50ICE9
IGFyZ3Muc2l6ZSgpIC0gMSwgImFyaXR5IG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAi
LCBhcmdzLnNpemUoKSAtIDEsICIgYXJndW1lbnRzLCBleHBlY3RlZCAiLCBhcmd1bWVudENvdW50
KTsKQEAgLTM0Miw3ICszNDcsOCBAQCBhdXRvIFZhbGlkYXRlOjphZGRDYWxsSW5kaXJlY3QoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaQogCiAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRihhcmdzLmxhc3QoKSAhPSBJMzIsICJub24taTMyIGNhbGxfaW5k
aXJlY3QgaW5kZXggIiwgYXJncy5sYXN0KCkpOwogCi0gICAgcmVzdWx0ID0gc2lnbmF0dXJlLnJl
dHVyblR5cGUoKTsKKyAgICBpZiAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSAhPSBWb2lkKQorICAg
ICAgICByZXN1bHQgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwogICAgIHJldHVybiB7IH07CiB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357110</attachid>
            <date>2018-12-11 23:48:42 -0800</date>
            <delta_ts>2019-01-24 17:42:12 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-191802-20181212164841.patch</filename>
            <type>text/plain</type>
            <size>81479</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
ZTM0ZThlZjYzOWYwOTFkNjFmZmNlODlmNTMxZWQyMTNjNTdiNTJiLi41OGM0NGIzNzNhZDlhYzcx
YTE4YzgxMWMzOGRmN2FiMGJjMDFhYWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NSBAQAorMjAxOC0xMi0xMSAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93
c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gQWRkIHRlbXBsYXRlIEpJVAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgICogaml0L1JlZ2lzdGVyQmFuay5oOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaC4KKyAgICAgICAgKiB3
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6dGVlTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRC
cmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6YmluYXJ5Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmFyeUNhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNt
L1dhc21SYWlsZ3VuSklULmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OlN0YWNrVmFs
dWU6OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1ZhbHVlOjp0eXBlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RhY2tWYWx1ZTo6bG9jYXRpb24gY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1ZhbHVlOjpTdGFja1ZhbHVlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U3RhY2tWYWx1ZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3Rh
Y2tWYWx1ZTo6c3dhcCk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjpDb250cm9s
RGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjpkdW1wIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q29udHJvbERhdGE6OnR5cGUgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpDb250cm9sRGF0YTo6aGFzTm9uVm9pZFNpZ25hdHVyZSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjp0YXJnZXRCbG9ja0ZvckJyYW5jaCk6CisgICAgICAg
IChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjpjb252ZXJ0SWZUb0Jsb2NrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29udHJvbERhdGE6OnJlc3VsdEZvckJyYW5jaCBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OlJhaWxndW5KSVQ6OnNldFBhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206OlJh
aWxndW5KSVQ6OmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjp1bmxvY2sp
OgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphbGxvY2F0ZUdQUik6CisgICAgICAg
IChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmZhaWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpHUFJPcGVyYW5kOjpHUFJPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6V2FzbTo6R1BST3BlcmFu
ZDo6fkdQUk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpXYXNtOjpHUFJPcGVyYW5kOjpncHIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1ZhbHVlOjp+U3RhY2tWYWx1ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlJhaWxndW5KSVQ6OlJhaWxndW5KSVQpOgorICAgICAgICAoSlNDOjpXYXNtOjpS
YWlsZ3VuSklUOjphZGRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklU
OjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6Z2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpSYWlsZ3VuSklUOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlJh
aWxndW5KSVQ6OnRlZUxvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6Z2V0
R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6c2V0R2xvYmFsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6bG9hZCk6CisgICAgICAgIChKU0M6Oldhc206
OlJhaWxndW5KSVQ6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6YWRk
R3Jvd01lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZEN1cnJlbnRN
ZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRPcCk6CisgICAgICAg
IChKU0M6Oldhc206OlJhaWxndW5KSVQ6OmFkZFNlbGVjdCk6CisgICAgICAgIChKU0M6Oldhc206
OlJhaWxndW5KSVQ6OmFkZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJ
VDo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRMb29wKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6YWRkSWYpOgorICAgICAgICAoSlNDOjpX
YXNtOjpSYWlsZ3VuSklUOjphZGRFbHNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJ
VDo6YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklU
OjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRCcmFuY2gp
OgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjphZGRTd2l0Y2gpOgorICAgICAgICAo
SlNDOjpXYXNtOjpSYWlsZ3VuSklUOjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OlJh
aWxndW5KSVQ6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWls
Z3VuSklUOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6YWRkQ2Fs
bEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmFpbGd1bkpJVDo6YWRkVW5yZWFjaGFi
bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSYWlsZ3VuSklUOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21SYWlsZ3VuSklU
Lmg6IEFkZGVkLgorICAgICAgICAqIHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VmFsaWRhdGU6OnRlZUxvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRh
dGU6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRDYWxsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdCk6CisKIDIwMTgt
MTItMTEgIEp1c3RpbiBNaWNoYXVkICA8anVzdGluX21pY2hhdWRAYXBwbGUuY29tPgogCiAgICAg
ICAgIEltcGxlbWVudCBmZWF0dXJlIGZsYWcgZm9yIENTUyBUeXBlZCBPTQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBmM2VmMWM0MjM4MGIzY2VmMmYwMGZhYzY1OGU5MmU5ZDZlNzk5
ZjAzLi4zYWEwMmQzYzQ4MjlmZmQ5YjIwMGZkNDYzMjAzN2FmNjQxNmU2MTZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTIyNiw3ICsxMjI2LDcgQEAKIAkJODZFQzlEQzgxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCAq
LzsgfTsKIAkJODZFQzlEQ0MxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURCQzEzMjhE
RjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLzsgfTsKIAkJODZFQzlERDAxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRp
b25zLmggKi87IH07Ci0JCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJh
bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5
REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLzsgfTsKKwkJODZFQzlE
RDExMzI4REY4MjAwMkIyQUQ3IC8qIFJlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIFJl
Z2lzdGVyQmFuay5oICovOyB9OwogCQk4NkVDOUREMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3Bl
Y3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oICovOyB9
OwogCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3
IC8qIERGR05vZGUuaCAqLzsgfTsKIAkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Nj
b3JlQm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi87IH07CkBAIC0z
ODk5LDcgKzM4OTksNyBAQAogCQk4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29t
cGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29tcGlsZXIu
aDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPcGVyYXRpb25zLmNwcDsgcGF0aCA9
IGRmZy9ERkdPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZF
QzlEQzAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHT3BlcmF0aW9ucy5oOyBwYXRoID0gZGZnL0RGR09wZXJhdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZFQzlEQzExMzI4REY4MjAwMkIy
QUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdSZWdpc3RlckJhbmsuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlckJhbmsuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIFJlZ2lz
dGVyQmFuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWdpc3RlckJhbmsu
aDsgcGF0aCA9IGppdC9SZWdpc3RlckJhbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZFQzlEQzIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NwZWN1bGF0aXZlSklULmNwcDsg
cGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTcGVjdWxhdGl2ZUpJVC5oOyBwYXRo
ID0gZGZnL0RGR1NwZWN1bGF0aXZlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR05vZGUuaDsgcGF0aCA9IGRmZy9ERkdOb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NzEzLDYgKzU3MTMsNyBAQAogCQkJCTY1NDBDNzlGMUI4
MkQ5Q0UwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmggKi8sCiAJCQkJNjU0MEM3OUMxQjgy
RDk5RDAwMEY2Qjc5IC8qIFJlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcCAqLywKIAkJCQk2NTQwQzc5
RDFCODJEOTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3QuaCAqLywKKwkJCQk4NkVD
OURDMTEzMjhERjgyMDAyQjJBRDcgLyogUmVnaXN0ZXJCYW5rLmggKi8sCiAJCQkJNjIzQTM3RUIx
Qjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8sCiAJCQkJMEZDMzE0MTQxODE0NkQ3
MDAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmNwcCAqLywKIAkJCQkwRkMzMTQxMDE4MTQ1NTkxMDAw
MzMyMzIgLyogUmVnaXN0ZXJTZXQuaCAqLywKQEAgLTc0ODgsNyArNzQ4OSw2IEBACiAJCQkJMEZC
MTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAogCQkJCTBGM0ExQkY3
MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi8sCiAJCQkJ
MEYzQTFCRjgxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmggKi8s
Ci0JCQkJODZFQzlEQzExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLAog
CQkJCTc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlLmgg
Ki8sCiAJCQkJNzk4MEMxNkExRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQuY3BwICovLAogCQkJCTc5ODBDMTZCMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3Rl
cmVkU3RydWN0dXJlU2V0LmggKi8sCkBAIC04ODA5LDcgKzg4MDksNiBAQAogCQkJCTBGRkM5MjE2
MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGM0ExQkZBMUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlGQzhBMDgxRTMyRTlGMDAwRDg4
RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5ODBD
MTZEMUUzQTk0MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTk1MzIsNiArOTUzMSw3IEBACiAJCQkJQkMxOEM0NUQwRTE2RjVD
RDAwQjM0NDYwIC8qIFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4QzZDOTFEQTQz
MkY5MDBEMjU1RkQgLyogUmVnaXN0ZXJBdE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMy
OEM2QzgxREE0MzA2MTAwRDI1NUZEIC8qIFJlZ2lzdGVyQXRPZmZzZXRMaXN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogUmVnaXN0ZXJCYW5rLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NjlBMDcyQjBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjIzQTM3RUMxQjg3QTdDMDAwNzU0MjA5IC8qIFJlZ2lzdGVy
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVn
aXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGNiYTRjNGJhNjAwNGY5MzBkNWNhODU2MzMxMGE2MjQzZTM2NDQ5ZTUuLmExMDY1MDhmNTk3NWFk
Zjk2NjNhNzBkOTYzMDFkYWRiYjYyYjBhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQK
QEAgLTk5Myw2ICs5OTMsNyBAQCB3YXNtL1dhc21PTUdQbGFuLmNwcAogd2FzbS9XYXNtT3Bjb2Rl
T3JpZ2luLmNwcAogd2FzbS9XYXNtUGFnZUNvdW50LmNwcAogd2FzbS9XYXNtUGxhbi5jcHAKK3dh
c20vV2FzbVJhaWxndW5KSVQuY3BwCiB3YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAogd2FzbS9X
YXNtU2lnbmF0dXJlLmNwcAogd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA0MzM3NjQyMTc1NmE5
NWUwMGRmYTA3M2RhODdmN2MxNTUxN2I2NjNmLi41MTJmZWEwYWYxNzI5YjIxYzIzYTRkMWY2ZTU1
MzhiODQ5NTI0NGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkRGR0pJVEZpbmFsaXplci5oIgog
I2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0jaW5j
bHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5o
IgpAQCAtNDMsNiArNDIsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJWTS5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGUwNGYzY2FkYjA0Yjc0NWQyYzU3MGU1OGFlZmNjYzk4M2UyYzRk
ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAorKysgL2Rldi9udWxsCkBAIC0x
LDM3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdD
b21tb24uaCIKLSNpbmNsdWRlICJGUFJJbmZvLmgiCi0jaW5jbHVkZSAiR1BSSW5mby5oIgotCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8vID09PSBSZWdpc3RlckJhbmsgPT09
Ci0vLwotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgR1BSIGFuZCBGUFIg
cmVnaXN0ZXIgYmFua3MuCi0vLyBBbGwgcmVnaXN0ZXJzIGhhdmUgdHdvIHBpZWNlcyBvZiBzdGF0
ZSBhc3NvY2lhdGVkIHdpdGggdGhlbToKLS8vIGEgbG9jayBjb3VudCAodXNlZCB0byBpbmRpY2F0
ZSB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgaW4gdXNlCi0vLyBpbiBjb2RlIGdlbmVyYXRpb24g
b2YgdGhlIGN1cnJlbnQgbm9kZSwgYW5kIGNhbm5vdCBiZSBzcGlsbGVkIG9yCi0vLyBhbGxvY2F0
ZWQgYXMgYSB0ZW1wb3JhcnkpLCBhbmQgVmlydHVhbFJlZ2lzdGVyICduYW1lJywgcmVjb3JkaW5n
Ci0vLyB3aGljaCB2YWx1ZSAoaWYgYW55KSBhIG1hY2hpbmUgcmVnaXN0ZXIgY3VycmVudGx5IGhv
bGRzLgotLy8gRWl0aGVyIG9yIGJvdGggb2YgdGhlc2UgcGllY2VzIG9mIGluZm9ybWF0aW9uIG1h
eSBiZSB2YWxpZCBmb3IgYQotLy8gZ2l2ZW4gcmVnaXN0ZXIuIEEgcmVnaXN0ZXIgbWF5IGJlOgot
Ly8KLS8vICAtIHVubG9ja2VkLCBhbmQgdW5uYW1lZDogQXZhaWxhYmxlIGZvciBhbGxvY2F0aW9u
LgotLy8gIC0gbG9ja2VkLCBidXQgdW5uYW1lZDogICBBbHJlYWR5IGFsbG9jYXRlZCBhcyBhIHRl
bXBvcmFyeSBvcgotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgZm9yIHRoZSBj
dXJyZW50IG5vZGUuCi0vLyAgLSB1bmxvY2tlZCwgYnV0IG5hbWVkOiAgIENvbnRhaW5zIHRoZSBy
ZXN1bHQgb2YgYSBwcmlvciBvcGVyYXRpb24sCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vdCB5ZXQgaW4gdXNlIGZvciB0aGlzIG5vZGUsCi0vLyAgLSBsb2NrZWQsIGJ1dCBuYW1lZDog
ICAgIENvbnRhaW5zIHRoZSByZXN1bHQgb2YgYSBwcmlvciBvcGVyYXRpb24sCi0vLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYWxsb2NhdGVkIGFzIGEgb3BlcmFuZCB0byB0aGUK
LS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCBvcGVyYXRpb24uCi0vLwotLy8g
Rm9yIGV2ZXJ5IG5hbWVkIHJlZ2lzdGVyIHdlIGFsc28gcmVjb3JkIGEgaGludCB2YWx1ZSBpbmRp
Y2F0aW5nCi0vLyB0aGUgb3JkZXIgaW4gd2hpY2ggcmVnaXN0ZXJzIHNob3VsZCBiZSBzZWxlY3Rl
ZCB0byBiZSBzcGlsbGVkOwotLy8gcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIG1vcmUgY2hlYXBseSBz
cGlsbGVkIGFuZC9vciBmaWxsZWQgc2hvdWxkCi0vLyBiZSBzZWxlY3RlZCBmaXJzdC4KLS8vCi0v
LyBMb2NraW5nIHJlZ2lzdGVyIGlzIGEgc3Ryb25nIHJldGVudGlvbiBtZWNoYW5pc207IGEgbG9j
a2VkIHJlZ2lzdGVyCi0vLyB3aWxsIG5ldmVyIGJlIHJlYWxsb2NhdGVkICh0aGlzIGlzIHVzZWQg
dG8gZW5zdXJlIHRoZSBvcGVyYW5kcyB0bwotLy8gdGhlIGN1cnJlbnQgbm9kZSBhcmUgaW4gcmVn
aXN0ZXJzKS4gTmFtaW5nLCBjb252ZXJzZWx5LCBpbiBhIHdlYWsKLS8vIHJldGVudGlvbiBtZWNo
YW5pc20gLSBhbGxvY2F0aW5nIGEgcmVnaXN0ZXIgbWF5IGZvcmNlIGEgbmFtZWQgdmFsdWUKLS8v
IHRvIGJlIHNwaWxsZWQuCi0vLwotLy8gQWxsIG5hbWVkIHZhbHVlcyBtdXN0IGJlIGdpdmVuIGEg
aGludCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBNaW4gYW5kCi0vLyBsZXNzIHRoYW4gTWF4LgotdGVt
cGxhdGU8Y2xhc3MgQmFua0luZm8+Ci1jbGFzcyBSZWdpc3RlckJhbmsgewotICAgIHR5cGVkZWYg
dHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBSZWdJRDsKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IE5VTV9SRUdTID0gQmFua0luZm86Om51bWJlck9mUmVnaXN0ZXJzOwotCi0gICAgdHlw
ZWRlZiB1aW50MzJfdCBTcGlsbEhpbnQ7Ci0gICAgc3RhdGljIGNvbnN0IFNwaWxsSGludCBTcGls
bEhpbnRJbnZhbGlkID0gMHhmZmZmZmZmZjsKLQotcHVibGljOgotICAgIFJlZ2lzdGVyQmFuaygp
Ci0gICAgewotICAgIH0KLQotICAgIC8vIEF0dGVtcHQgdG8gYWxsb2NhdGUgYSByZWdpc3RlciAt
IHRoaXMgZnVuY3Rpb24gZmluZHMgYW4gdW5sb2NrZWQKLSAgICAvLyByZWdpc3RlciwgbG9ja3Mg
aXQsIGFuZCByZXR1cm5zIGl0LiBJZiBub25lIGNhbiBiZSBmb3VuZCwgdGhpcwotICAgIC8vIHJl
dHVybnMgLTEgKEludmFsaWRHUFJSZWcgb3IgSW52YWxpZEZQUlJlZykuCi0gICAgUmVnSUQgdHJ5
QWxsb2NhdGUoKQotICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGlnbm9yZWQgPSBWaXJ0
dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBOVU1fUkVHUzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZGF0YVtpXS5sb2NrQ291bnQg
JiYgIW1fZGF0YVtpXS5uYW1lLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWxs
b2NhdGVJbnRlcm5hbChpLCBpZ25vcmVkKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
cmV0dXJuIChSZWdJRCktMTsKLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZSBhIHJlZ2lzdGVyIC0g
dGhpcyBmdW5jdGlvbiBmaW5kcyBhbiB1bmxvY2tlZCByZWdpc3RlciwKLSAgICAvLyBsb2NrcyBp
dCwgYW5kIHJldHVybnMgaXQuIElmIGFueSBuYW1lZCByZWdpc3RlcnMgZXhpc3QsIG9uZQotICAg
IC8vIG9mIHRoZXNlIHNob3VsZCBiZSBzZWxlY3RlZCB0byBiZSBhbGxvY2F0ZWQuIElmIGFsbCB1
bmxvY2tlZAotICAgIC8vIHJlZ2lzdGVycyBhcmUgbmFtZWQsIHRoZW4gb25lIG9mIHRoZSBuYW1l
ZCByZWdpc3RlcnMgd2lsbCBuZWVkCi0gICAgLy8gdG8gYmUgc3BpbGxlZC4gSW4gdGhpcyBjYXNl
IHRoZSByZWdpc3RlciBzZWxlY3RlZCB0byBiZSBzcGlsbGVkCi0gICAgLy8gd2lsbCBiZSBvbmUg
b2YgdGhlIHJlZ2lzdGVycyB0aGF0IGhhcyB0aGUgbG93ZXN0ICdzcGlsbE9yZGVyJwotICAgIC8v
IGNvc3QgYXNzb2NpYXRlZCB3aXRoIGl0LgotICAgIC8vCi0gICAgLy8gVGhpcyBtZXRob2Qgc2Vs
ZWN0IHRoZSByZWdpc3RlciB0byBiZSBhbGxvY2F0ZWQsIGFuZCBjYWxscyB0aGUKLSAgICAvLyBw
cml2YXRlICdhbGxvY2F0ZUludGVybmFsJyBtZXRob2QgdG8gdXBkYXRlIGludGVybmFsIGRhdGEK
LSAgICAvLyBzdHJ1Y3R1cmVzIGFjY29yZGluZ2x5LgotICAgIFJlZ0lEIGFsbG9jYXRlKFZpcnR1
YWxSZWdpc3RlciAmc3BpbGxNZSkKLSAgICB7Ci0gICAgICAgIHVpbnQzMl90IGN1cnJlbnRMb3dl
c3QgPSBOVU1fUkVHUzsKLSAgICAgICAgU3BpbGxIaW50IGN1cnJlbnRTcGlsbE9yZGVyID0gU3Bp
bGxIaW50SW52YWxpZDsKLQotICAgICAgICAvLyBUaGlzIGxvb3AgaXMgYnJva2VuIGludG8gdHdv
IGhhbHZlcywgbG9vcGluZyBmcm9tIHRoZSBsYXN0IGFsbG9jYXRlZAotICAgICAgICAvLyByZWdp
c3RlciAodGhlIHJlZ2lzdGVyIHJldHVybmVkIGxhc3QgdGltZSB0aGlzIG1ldGhvZCB3YXMgY2Fs
bGVkKSB0bwotICAgICAgICAvLyB0aGUgbWF4aW11bSByZWdpc3RlciB2YWx1ZSwgdGhlbiBmcm9t
IDAgdG8gdGhlIGxhc3QgYWxsb2NhdGVkLgotICAgICAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBz
aW1wbGUgcm91bmQtcm9iaW4gbGlrZSBhcHByb2FjaCB0byB0cnkgdG8gcmVkdWNlCi0gICAgICAg
IC8vIHRocmFzaCwgYW5kIG1pbmltaXplIHRpbWUgc3BlbnQgc2Nhbm5pbmcgbG9ja2VkIHJlZ2lz
dGVycyBpbiBhbGxvY2F0aW9uLgotICAgICAgICAvLyBJZiBhIHVubG9ja2VkIGFuZCB1bm5hbWVk
IHJlZ2lzdGVyIGlzIGZvdW5kIHJldHVybiBpdCBpbW1lZGlhdGVseS4KLSAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCBmaW5kIHRoZSBmaXJzdCB1bmxvY2tlZCByZWdpc3RlciB3aXRoIHRoZSBsb3dlc3Qg
c3BpbGxPcmRlci4KLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMCA7IGkgPCBOVU1fUkVHUzsg
KytpKSB7Ci0gICAgICAgICAgICAvLyAoMSkgSWYgdGhlIGN1cnJlbnQgcmVnaXN0ZXIgaXMgbG9j
a2VkLCBpdCBpcyBub3QgYSBjYW5kaWRhdGUuCi0gICAgICAgICAgICBpZiAobV9kYXRhW2ldLmxv
Y2tDb3VudCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vICgyKSBJ
ZiB0aGUgY3VycmVudCByZWdpc3RlcidzIHNwaWxsIG9yZGVyIGlzIDAsIHBpY2sgdGhpcyEg4oCT
IHVuYXNzaWduZWQgcmVnaXN0ZXJzIGhhdmUgc3BpbGwgb3JkZXIgMC4KLSAgICAgICAgICAgIFNw
aWxsSGludCBzcGlsbE9yZGVyID0gbV9kYXRhW2ldLnNwaWxsT3JkZXI7Ci0gICAgICAgICAgICBp
ZiAoc3BpbGxPcmRlciA9PSBTcGlsbEhpbnRJbnZhbGlkKQotICAgICAgICAgICAgICAgIHJldHVy
biBhbGxvY2F0ZUludGVybmFsKGksIHNwaWxsTWUpOwotICAgICAgICAgICAgLy8gSWYgdGhpcyBy
ZWdpc3RlciBpcyBiZXR0ZXIgKGhhcyBhIGxvd2VyIHNwaWxsIG9yZGVyIHZhbHVlKSB0aGFuIGFu
eSBwcmlvcgotICAgICAgICAgICAgLy8gY2FuZGlkYXRlLCB0aGVuIHJlY29yZCBpdC4KLSAgICAg
ICAgICAgIGlmIChzcGlsbE9yZGVyIDwgY3VycmVudFNwaWxsT3JkZXIpIHsKLSAgICAgICAgICAg
ICAgICBjdXJyZW50U3BpbGxPcmRlciA9IHNwaWxsT3JkZXI7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudExvd2VzdCA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBE
ZWFkbG9jayBjaGVjayAtIHRoaXMgY291bGQgb25seSBvY2N1ciBpcyBhbGwgcmVnaXN0ZXJzIGFy
ZSBsb2NrZWQhCi0gICAgICAgIEFTU0VSVChjdXJyZW50TG93ZXN0ICE9IE5VTV9SRUdTICYmIGN1
cnJlbnRTcGlsbE9yZGVyICE9IFNwaWxsSGludEludmFsaWQpOwotICAgICAgICAvLyBUaGVyZSB3
ZXJlIG5vIGF2YWlsYWJsZSByZWdpc3RlcnM7IGN1cnJlbnRMb3dlc3Qgd2lsbCBuZWVkIHRvIGJl
IHNwaWxsZWQuCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFsKGN1cnJlbnRMb3dlc3Qs
IHNwaWxsTWUpOwotICAgIH0KLQotICAgIHVpbnQzMl90IGxvY2tlZENvdW50KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICAgICAgZm9yICh1aW50MzJfdCBp
ID0gMCA7IGkgPCBOVU1fUkVHUzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9kYXRhW2ldLmxv
Y2tDb3VudCkKLSAgICAgICAgICAgICAgICArK2NvdW50OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBjb3VudDsKLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZXMgdGhlIGdpdmVuIHJlZ2lzdGVy
LCBldmVuIGlmIHRoaXMgd2lsbCBmb3JjZSBhIHNwaWxsLgotICAgIFZpcnR1YWxSZWdpc3RlciBh
bGxvY2F0ZVNwZWNpZmljKFJlZ0lEIHJlZykKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gQmFua0luZm86OnRvSW5kZXgocmVnKTsKLQotICAgICAgICArK21fZGF0YVtpbmRleF0ubG9j
a0NvdW50OwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSA9IG5hbWVBdEluZGV4KGluZGV4
KTsKLSAgICAgICAgaWYgKG5hbWUuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmVsZWFzZUF0SW5k
ZXgoaW5kZXgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gICAg
Ly8gcmV0YWluL3JlbGVhc2UgLSB0aGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIGFzc29jaWF0ZS9k
aXNhc3NvY2lhdGUgbmFtZXMKLSAgICAvLyB3aXRoIHZhbHVlcyBpbiByZWdpc3RlcnMuIHJldGFp
biBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbG9ja2VkIHJlZ2lzdGVycy4KLSAgICB2b2lkIHJl
dGFpbihSZWdJRCByZWcsIFZpcnR1YWxSZWdpc3RlciBuYW1lLCBTcGlsbEhpbnQgc3BpbGxPcmRl
cikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQmFua0luZm86OnRvSW5kZXgocmVn
KTsKLQotICAgICAgICAvLyBTcGlsbEhpbnQgbXVzdCBiZSB2YWxpZC4KLSAgICAgICAgQVNTRVJU
KHNwaWxsT3JkZXIgIT0gU3BpbGxIaW50SW52YWxpZCk7Ci0gICAgICAgIC8vICdpbmRleCcgbXVz
dCBiZSBhIHZhbGlkLCBsb2NrZWQgcmVnaXN0ZXIuCi0gICAgICAgIEFTU0VSVChpbmRleCA8IE5V
TV9SRUdTKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKLSAgICAg
ICAgLy8gJ2luZGV4JyBzaG91bGQgbm90IGN1cnJlbnRseSBiZSBuYW1lZCwgdGhlIG5ldyBuYW1l
IG11c3QgYmUgdmFsaWQuCi0gICAgICAgIEFTU0VSVCghbV9kYXRhW2luZGV4XS5uYW1lLmlzVmFs
aWQoKSk7Ci0gICAgICAgIEFTU0VSVChuYW1lLmlzVmFsaWQoKSk7Ci0gICAgICAgIC8vICdpbmRl
eCcgc2hvdWxkIG5vdCBjdXJyZW50bHkgaGF2ZSBhIHNwaWxsT3JkZXIuCi0gICAgICAgIEFTU0VS
VChtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgPT0gU3BpbGxIaW50SW52YWxpZCk7Ci0KLSAgICAg
ICAgbV9kYXRhW2luZGV4XS5uYW1lID0gbmFtZTsKLSAgICAgICAgbV9kYXRhW2luZGV4XS5zcGls
bE9yZGVyID0gc3BpbGxPcmRlcjsKLSAgICB9Ci0gICAgdm9pZCByZWxlYXNlKFJlZ0lEIHJlZykK
LSAgICB7Ci0gICAgICAgIHJlbGVhc2VBdEluZGV4KEJhbmtJbmZvOjp0b0luZGV4KHJlZykpOwot
ICAgIH0KLQotICAgIC8vIGxvY2svdW5sb2NrIHJlZ2lzdGVyLCBlbnN1cmVzIHRoYXQgdGhleSBh
cmUgbm90IHNwaWxsZWQuCi0gICAgdm9pZCBsb2NrKFJlZ0lEIHJlZykKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gQmFua0luZm86OnRvSW5kZXgocmVnKTsKLQotICAgICAgICBBU1NF
UlQoaW5kZXggPCBOVU1fUkVHUyk7Ci0gICAgICAgICsrbV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7
Ci0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLmxvY2tDb3VudCk7Ci0gICAgfQotICAgIHZv
aWQgdW5sb2NrKFJlZ0lEIHJlZykKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQmFu
a0luZm86OnRvSW5kZXgocmVnKTsKLQotICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7
Ci0gICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLmxvY2tDb3VudCk7Ci0gICAgICAgIC0tbV9k
YXRhW2luZGV4XS5sb2NrQ291bnQ7Ci0gICAgfQotICAgIGJvb2wgaXNMb2NrZWQoUmVnSUQgcmVn
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTG9ja2VkQXRJbmRleChCYW5rSW5mbzo6
dG9JbmRleChyZWcpKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgdGhlIG5hbWUgKFZpcnR1YWxSZWdp
c3RlcikgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAgIC8vIGdpdmVuIHJlZ2lzdGVyIChvciBkZWZh
dWx0IFZpcnR1YWxSZWdpc3RlcigpIGZvciBub25lKS4KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFt
ZShSZWdJRCByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbmFtZUF0SW5kZXgoQmFu
a0luZm86OnRvSW5kZXgocmVnKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNJblVzZShSZWdJ
RCByZWcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNMb2NrZWQocmVnKSB8fCBuYW1l
KHJlZykuaXNWYWxpZCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoKQotICAgIHsKLSAg
ICAgICAgLy8gRm9yIGVhY2ggcmVnaXN0ZXIsIHByaW50IHRoZSBWaXJ0dWFsUmVnaXN0ZXIgJ25h
bWUnLgotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPTA7IGkgPCBOVU1fUkVHUzsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAobV9kYXRhW2ldLm5hbWUuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCJbJTAyZF0iLCBtX2RhdGFbaV0ubmFtZS5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlstLV0iKTsKLSAgICAgICAgfQotICAg
ICAgICBkYXRhTG9nRigiXG4iKTsKLSAgICB9Ci0KLSAgICBjbGFzcyBpdGVyYXRvciB7Ci0gICAg
ZnJpZW5kIGNsYXNzIFJlZ2lzdGVyQmFuazxCYW5rSW5mbz47Ci0gICAgcHVibGljOgotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX2JhbmstPm5hbWVBdEluZGV4KG1faW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2Jh
bmstPmlzTG9ja2VkQXRJbmRleChtX2luZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
cmVsZWFzZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFuay0+cmVsZWFzZUF0
SW5kZXgobV9pbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdJRCByZWdJRCgpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBCYW5rSW5mbzo6dG9SZWdpc3RlcihtX2lu
ZGV4KTsKLSAgICAgICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBjb25zdCBjaGFyKiBk
ZWJ1Z05hbWUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQmFua0luZm86
OmRlYnVnTmFtZShyZWdJRCgpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgaXRlcmF0
b3ImIG9wZXJhdG9yKysoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21faW5kZXg7Ci0gICAg
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9iYW5rID09IG90aGVyLm1fYmFuayk7Ci0gICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCAhPSBvdGhlci5tX2luZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9pbmRleDsKLSAgICAgICAg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgaXRlcmF0b3IoUmVnaXN0ZXJCYW5rPEJhbmtJbmZv
PiogYmFuaywgdW5zaWduZWQgaW5kZXgpCi0gICAgICAgICAgICA6IG1fYmFuayhiYW5rKQotICAg
ICAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBSZWdpc3RlckJhbms8QmFua0luZm8+KiBtX2Jhbms7Ci0gICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7Ci0gICAgfTsKLQotICAgIGl0ZXJhdG9yIGJlZ2luKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBpdGVyYXRvcih0aGlzLCAwKTsKLSAgICB9Ci0KLSAgICBpdGVyYXRvciBlbmQoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIE5VTV9SRUdTKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCBpc0xvY2tlZEF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7Ci0gICAgICAgIHJldHVybiBtX2Rh
dGFbaW5kZXhdLmxvY2tDb3VudDsKLSAgICB9Ci0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZUF0
SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXgg
PCBOVU1fUkVHUyk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFbaW5kZXhdLm5hbWU7Ci0gICAgfQot
Ci0gICAgdm9pZCByZWxlYXNlQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAg
IC8vICdpbmRleCcgbXVzdCBiZSBhIHZhbGlkIHJlZ2lzdGVyLgotICAgICAgICBBU1NFUlQoaW5k
ZXggPCBOVU1fUkVHUyk7Ci0gICAgICAgIC8vICdpbmRleCcgc2hvdWxkIGN1cnJlbnRseSBiZSBu
YW1lZC4KLSAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0ubmFtZS5pc1ZhbGlkKCkpOwotICAg
ICAgICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkgaGF2ZSBhIHZhbGlkIHNwaWxsIG9yZGVy
LgotICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5zcGlsbE9yZGVyICE9IFNwaWxsSGludElu
dmFsaWQpOwotCi0gICAgICAgIG1fZGF0YVtpbmRleF0ubmFtZSA9IFZpcnR1YWxSZWdpc3Rlcigp
OwotICAgICAgICBtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgPSBTcGlsbEhpbnRJbnZhbGlkOwot
ICAgIH0KLQotICAgIC8vIFVzZWQgYnkgJ2FsbG9jYXRlJywgYWJvdmUsIHRvIHVwZGF0ZSBpbmZv
cmFtdGlvbiBpbiB0aGUgbWFwLgotICAgIFJlZ0lEIGFsbG9jYXRlSW50ZXJuYWwodWludDMyX3Qg
aSwgVmlydHVhbFJlZ2lzdGVyICZzcGlsbE1lKQotICAgIHsKLSAgICAgICAgLy8gJ2knIG11c3Qg
YmUgYSB2YWxpZCwgdW5sb2NrZWQgcmVnaXN0ZXIuCi0gICAgICAgIEFTU0VSVChpIDwgTlVNX1JF
R1MgJiYgIW1fZGF0YVtpXS5sb2NrQ291bnQpOwotCi0gICAgICAgIC8vIFJldHVybiB0aGUgVmly
dHVhbFJlZ2lzdGVyIG9mIHRoZSBuYW1lZCB2YWx1ZSBjdXJyZW50bHkgc3RvcmVkIGluCi0gICAg
ICAgIC8vIHRoZSByZWdpc3RlciBiZWluZyByZXR1cm5lZCAtIG9yIGRlZmF1bHQgVmlydHVhbFJl
Z2lzdGVyKCkgaWYgbm9uZS4KLSAgICAgICAgc3BpbGxNZSA9IG1fZGF0YVtpXS5uYW1lOwotCi0g
ICAgICAgIC8vIENsZWFyIGFueSBuYW1lL3NwaWxsT3JkZXIgY3VycmVudGx5IGFzc29jaWF0ZWQg
d2l0aCB0aGUgcmVnaXN0ZXIsCi0gICAgICAgIG1fZGF0YVtpXSA9IE1hcEVudHJ5KCk7Ci0gICAg
ICAgIC8vIE1hcmsgdGhlIHJlZ2lzdGVyIGFzIGxvY2tlZCAod2l0aCBhIGxvY2sgY291bnQgb2Yg
MSkuCi0gICAgICAgIG1fZGF0YVtpXS5sb2NrQ291bnQgPSAxOwotCi0gICAgICAgIHJldHVybiBC
YW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICB9Ci0KLSAgICAvLyA9PT0gTWFwRW50cnkgPT09
Ci0gICAgLy8KLSAgICAvLyBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3Ig
YW4gaW5kaXZpZHVhbCBtYWNoaW5lIHJlZ2lzdGVyCi0gICAgLy8gYmVpbmcgbWFuYWdlZCBieSB0
aGUgUmVnaXN0ZXJCYW5rLiBGb3IgZWFjaCByZWdpc3RlciB3ZSB0cmFjayBhIGxvY2sKLSAgICAv
LyBjb3VudCwgbmFtZSBhbmQgc3BpbGxPcmRlciBoaW50LgotICAgIHN0cnVjdCBNYXBFbnRyeSB7
Ci0gICAgICAgIE1hcEVudHJ5KCkKLSAgICAgICAgICAgIDogbmFtZShWaXJ0dWFsUmVnaXN0ZXIo
KSkKLSAgICAgICAgICAgICwgc3BpbGxPcmRlcihTcGlsbEhpbnRJbnZhbGlkKQotICAgICAgICAg
ICAgLCBsb2NrQ291bnQoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG5hbWU7Ci0gICAgICAgIFNwaWxsSGludCBzcGlsbE9yZGVyOwotICAgICAgICB1
aW50MzJfdCBsb2NrQ291bnQ7Ci0gICAgfTsKLQotICAgIC8vIEhvbGRzIHRoZSBjdXJyZW50IHN0
YXR1cyBvZiBhbGwgcmVnaXN0ZXJzLgotICAgIE1hcEVudHJ5IG1fZGF0YVtOVU1fUkVHU107Ci19
OwotCi10eXBlZGVmIFJlZ2lzdGVyQmFuazxHUFJJbmZvPjo6aXRlcmF0b3IgZ3ByX2l0ZXJhdG9y
OwotdHlwZWRlZiBSZWdpc3RlckJhbms8RlBSSW5mbz46Oml0ZXJhdG9yIGZwcl9pdGVyYXRvcjsK
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCBhMjBlMzlhODNhZmU4Y2JiMjky
OTI3MWQzY2UyNWFmZTMzZTdlYTg3Li4yN2MxZDRjMDExZDQyNzgxMTBjMzZmNDRiNDM1NWQxMWM4
NjBkMWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCkBAIC0zNCwxMSArMzQsMTEgQEAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgogI2lu
Y2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
LmgiCi0jaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oIgogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVE9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJCYW5r
LmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQmFuay5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlckJhbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMzc0M2I5YTliNjlkZjlmOTA0MjVi
M2I4MDkwOTQwZDQ3ZjJlZWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlckJhbmsuaApAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gPT09IFJlZ2lzdGVyQmFuayA9PT0KKy8vCisvLyBUaGlzIGNs
YXNzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBHUFIgYW5kIEZQUiByZWdpc3RlciBiYW5rcy4K
Ky8vIEFsbCByZWdpc3RlcnMgaGF2ZSB0d28gcGllY2VzIG9mIHN0YXRlIGFzc29jaWF0ZWQgd2l0
aCB0aGVtOgorLy8gYSBsb2NrIGNvdW50ICh1c2VkIHRvIGluZGljYXRlIHRoaXMgcmVnaXN0ZXIg
aXMgYWxyZWFkeSBpbiB1c2UKKy8vIGluIGNvZGUgZ2VuZXJhdGlvbiBvZiB0aGUgY3VycmVudCBu
b2RlLCBhbmQgY2Fubm90IGJlIHNwaWxsZWQgb3IKKy8vIGFsbG9jYXRlZCBhcyBhIHRlbXBvcmFy
eSksIGFuZCBWaXJ0dWFsUmVnaXN0ZXIgJ25hbWUnLCByZWNvcmRpbmcKKy8vIHdoaWNoIHZhbHVl
IChpZiBhbnkpIGEgbWFjaGluZSByZWdpc3RlciBjdXJyZW50bHkgaG9sZHMuCisvLyBFaXRoZXIg
b3IgYm90aCBvZiB0aGVzZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gbWF5IGJlIHZhbGlkIGZvciBh
CisvLyBnaXZlbiByZWdpc3Rlci4gQSByZWdpc3RlciBtYXkgYmU6CisvLworLy8gIC0gdW5sb2Nr
ZWQsIGFuZCB1bm5hbWVkOiBBdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCisvLyAgLSBsb2NrZWQs
IGJ1dCB1bm5hbWVkOiAgIEFscmVhZHkgYWxsb2NhdGVkIGFzIGEgdGVtcG9yYXJ5IG9yCisvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBmb3IgdGhlIGN1cnJlbnQgbm9kZS4KKy8v
ICAtIHVubG9ja2VkLCBidXQgbmFtZWQ6ICAgQ29udGFpbnMgdGhlIHJlc3VsdCBvZiBhIHByaW9y
IG9wZXJhdGlvbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHlldCBpbiB1c2Ug
Zm9yIHRoaXMgbm9kZSwKKy8vICAtIGxvY2tlZCwgYnV0IG5hbWVkOiAgICAgQ29udGFpbnMgdGhl
IHJlc3VsdCBvZiBhIHByaW9yIG9wZXJhdGlvbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxyZWFkeSBhbGxvY2F0ZWQgYXMgYSBvcGVyYW5kIHRvIHRoZQorLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50IG9wZXJhdGlvbi4KKy8vCisvLyBGb3IgZXZlcnkgbmFtZWQg
cmVnaXN0ZXIgd2UgYWxzbyByZWNvcmQgYSBoaW50IHZhbHVlIGluZGljYXRpbmcKKy8vIHRoZSBv
cmRlciBpbiB3aGljaCByZWdpc3RlcnMgc2hvdWxkIGJlIHNlbGVjdGVkIHRvIGJlIHNwaWxsZWQ7
CisvLyByZWdpc3RlcnMgdGhhdCBjYW4gYmUgbW9yZSBjaGVhcGx5IHNwaWxsZWQgYW5kL29yIGZp
bGxlZCBzaG91bGQKKy8vIGJlIHNlbGVjdGVkIGZpcnN0LgorLy8KKy8vIExvY2tpbmcgcmVnaXN0
ZXIgaXMgYSBzdHJvbmcgcmV0ZW50aW9uIG1lY2hhbmlzbTsgYSBsb2NrZWQgcmVnaXN0ZXIKKy8v
IHdpbGwgbmV2ZXIgYmUgcmVhbGxvY2F0ZWQgKHRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlIG9w
ZXJhbmRzIHRvCisvLyB0aGUgY3VycmVudCBub2RlIGFyZSBpbiByZWdpc3RlcnMpLiBOYW1pbmcs
IGNvbnZlcnNlbHksIGluIGEgd2VhaworLy8gcmV0ZW50aW9uIG1lY2hhbmlzbSAtIGFsbG9jYXRp
bmcgYSByZWdpc3RlciBtYXkgZm9yY2UgYSBuYW1lZCB2YWx1ZQorLy8gdG8gYmUgc3BpbGxlZC4K
Ky8vCisvLyBBbGwgbmFtZWQgdmFsdWVzIG11c3QgYmUgZ2l2ZW4gYSBoaW50IHRoYXQgaXMgZ3Jl
YXRlciB0aGFuIE1pbiBhbmQKKy8vIGxlc3MgdGhhbiBNYXguCit0ZW1wbGF0ZTxjbGFzcyBCYW5r
SW5mbz4KK2NsYXNzIFJlZ2lzdGVyQmFuayB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBCYW5rSW5m
bzo6UmVnaXN0ZXJUeXBlIFJlZ0lEOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgTlVNX1JFR1Mg
PSBCYW5rSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7CisKKyAgICB0eXBlZGVmIHVpbnQzMl90IFNw
aWxsSGludDsKKyAgICBzdGF0aWMgY29uc3QgU3BpbGxIaW50IFNwaWxsSGludEludmFsaWQgPSAw
eGZmZmZmZmZmOworCitwdWJsaWM6CisgICAgUmVnaXN0ZXJCYW5rKCkKKyAgICB7CisgICAgfQor
CisgICAgLy8gQXR0ZW1wdCB0byBhbGxvY2F0ZSBhIHJlZ2lzdGVyIC0gdGhpcyBmdW5jdGlvbiBm
aW5kcyBhbiB1bmxvY2tlZAorICAgIC8vIHJlZ2lzdGVyLCBsb2NrcyBpdCwgYW5kIHJldHVybnMg
aXQuIElmIG5vbmUgY2FuIGJlIGZvdW5kLCB0aGlzCisgICAgLy8gcmV0dXJucyAtMSAoSW52YWxp
ZEdQUlJlZyBvciBJbnZhbGlkRlBSUmVnKS4KKyAgICBSZWdJRCB0cnlBbGxvY2F0ZSgpCisgICAg
eworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaWdub3JlZCA9IFZpcnR1YWxSZWdpc3RlcigpOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5VTV9SRUdTOyArK2kp
IHsKKyAgICAgICAgICAgIGlmICghbV9kYXRhW2ldLmxvY2tDb3VudCAmJiAhbV9kYXRhW2ldLm5h
bWUuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFsKGks
IGlnbm9yZWQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gKFJlZ0lEKS0x
OworICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgcmVnaXN0ZXIgLSB0aGlzIGZ1bmN0aW9uIGZp
bmRzIGFuIHVubG9ja2VkIHJlZ2lzdGVyLAorICAgIC8vIGxvY2tzIGl0LCBhbmQgcmV0dXJucyBp
dC4gSWYgYW55IG5hbWVkIHJlZ2lzdGVycyBleGlzdCwgb25lCisgICAgLy8gb2YgdGhlc2Ugc2hv
dWxkIGJlIHNlbGVjdGVkIHRvIGJlIGFsbG9jYXRlZC4gSWYgYWxsIHVubG9ja2VkCisgICAgLy8g
cmVnaXN0ZXJzIGFyZSBuYW1lZCwgdGhlbiBvbmUgb2YgdGhlIG5hbWVkIHJlZ2lzdGVycyB3aWxs
IG5lZWQKKyAgICAvLyB0byBiZSBzcGlsbGVkLiBJbiB0aGlzIGNhc2UgdGhlIHJlZ2lzdGVyIHNl
bGVjdGVkIHRvIGJlIHNwaWxsZWQKKyAgICAvLyB3aWxsIGJlIG9uZSBvZiB0aGUgcmVnaXN0ZXJz
IHRoYXQgaGFzIHRoZSBsb3dlc3QgJ3NwaWxsT3JkZXInCisgICAgLy8gY29zdCBhc3NvY2lhdGVk
IHdpdGggaXQuCisgICAgLy8KKyAgICAvLyBUaGlzIG1ldGhvZCBzZWxlY3QgdGhlIHJlZ2lzdGVy
IHRvIGJlIGFsbG9jYXRlZCwgYW5kIGNhbGxzIHRoZQorICAgIC8vIHByaXZhdGUgJ2FsbG9jYXRl
SW50ZXJuYWwnIG1ldGhvZCB0byB1cGRhdGUgaW50ZXJuYWwgZGF0YQorICAgIC8vIHN0cnVjdHVy
ZXMgYWNjb3JkaW5nbHkuCisgICAgUmVnSUQgYWxsb2NhdGUoVmlydHVhbFJlZ2lzdGVyICZzcGls
bE1lKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgY3VycmVudExvd2VzdCA9IE5VTV9SRUdTOwor
ICAgICAgICBTcGlsbEhpbnQgY3VycmVudFNwaWxsT3JkZXIgPSBTcGlsbEhpbnRJbnZhbGlkOwor
CisgICAgICAgIC8vIFRoaXMgbG9vcCBpcyBicm9rZW4gaW50byB0d28gaGFsdmVzLCBsb29waW5n
IGZyb20gdGhlIGxhc3QgYWxsb2NhdGVkCisgICAgICAgIC8vIHJlZ2lzdGVyICh0aGUgcmVnaXN0
ZXIgcmV0dXJuZWQgbGFzdCB0aW1lIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQpIHRvCisgICAgICAg
IC8vIHRoZSBtYXhpbXVtIHJlZ2lzdGVyIHZhbHVlLCB0aGVuIGZyb20gMCB0byB0aGUgbGFzdCBh
bGxvY2F0ZWQuCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHNpbXBsZSByb3VuZC1yb2Jp
biBsaWtlIGFwcHJvYWNoIHRvIHRyeSB0byByZWR1Y2UKKyAgICAgICAgLy8gdGhyYXNoLCBhbmQg
bWluaW1pemUgdGltZSBzcGVudCBzY2FubmluZyBsb2NrZWQgcmVnaXN0ZXJzIGluIGFsbG9jYXRp
b24uCisgICAgICAgIC8vIElmIGEgdW5sb2NrZWQgYW5kIHVubmFtZWQgcmVnaXN0ZXIgaXMgZm91
bmQgcmV0dXJuIGl0IGltbWVkaWF0ZWx5LgorICAgICAgICAvLyBPdGhlcndpc2UsIGZpbmQgdGhl
IGZpcnN0IHVubG9ja2VkIHJlZ2lzdGVyIHdpdGggdGhlIGxvd2VzdCBzcGlsbE9yZGVyLgorICAg
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwIDsgaSA8IE5VTV9SRUdTOyArK2kpIHsKKyAgICAgICAg
ICAgIC8vICgxKSBJZiB0aGUgY3VycmVudCByZWdpc3RlciBpcyBsb2NrZWQsIGl0IGlzIG5vdCBh
IGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIGlmIChtX2RhdGFbaV0ubG9ja0NvdW50KQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gKDIpIElmIHRoZSBjdXJyZW50IHJl
Z2lzdGVyJ3Mgc3BpbGwgb3JkZXIgaXMgMCwgcGljayB0aGlzISDigJMgdW5hc3NpZ25lZCByZWdp
c3RlcnMgaGF2ZSBzcGlsbCBvcmRlciAwLgorICAgICAgICAgICAgU3BpbGxIaW50IHNwaWxsT3Jk
ZXIgPSBtX2RhdGFbaV0uc3BpbGxPcmRlcjsKKyAgICAgICAgICAgIGlmIChzcGlsbE9yZGVyID09
IFNwaWxsSGludEludmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJu
YWwoaSwgc3BpbGxNZSk7CisgICAgICAgICAgICAvLyBJZiB0aGlzIHJlZ2lzdGVyIGlzIGJldHRl
ciAoaGFzIGEgbG93ZXIgc3BpbGwgb3JkZXIgdmFsdWUpIHRoYW4gYW55IHByaW9yCisgICAgICAg
ICAgICAvLyBjYW5kaWRhdGUsIHRoZW4gcmVjb3JkIGl0LgorICAgICAgICAgICAgaWYgKHNwaWxs
T3JkZXIgPCBjdXJyZW50U3BpbGxPcmRlcikgeworICAgICAgICAgICAgICAgIGN1cnJlbnRTcGls
bE9yZGVyID0gc3BpbGxPcmRlcjsKKyAgICAgICAgICAgICAgICBjdXJyZW50TG93ZXN0ID0gaTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERlYWRsb2NrIGNoZWNrIC0g
dGhpcyBjb3VsZCBvbmx5IG9jY3VyIGlzIGFsbCByZWdpc3RlcnMgYXJlIGxvY2tlZCEKKyAgICAg
ICAgQVNTRVJUKGN1cnJlbnRMb3dlc3QgIT0gTlVNX1JFR1MgJiYgY3VycmVudFNwaWxsT3JkZXIg
IT0gU3BpbGxIaW50SW52YWxpZCk7CisgICAgICAgIC8vIFRoZXJlIHdlcmUgbm8gYXZhaWxhYmxl
IHJlZ2lzdGVyczsgY3VycmVudExvd2VzdCB3aWxsIG5lZWQgdG8gYmUgc3BpbGxlZC4KKyAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJuYWwoY3VycmVudExvd2VzdCwgc3BpbGxNZSk7CisgICAg
fQorCisgICAgdWludDMyX3QgbG9ja2VkQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgdWlu
dDMyX3QgY291bnQgPSAwOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwIDsgaSA8IE5VTV9S
RUdTOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGFbaV0ubG9ja0NvdW50KQorICAgICAg
ICAgICAgICAgICsrY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvdW50OworICAg
IH0KKworICAgIC8vIEFsbG9jYXRlcyB0aGUgZ2l2ZW4gcmVnaXN0ZXIsIGV2ZW4gaWYgdGhpcyB3
aWxsIGZvcmNlIGEgc3BpbGwuCisgICAgVmlydHVhbFJlZ2lzdGVyIGFsbG9jYXRlU3BlY2lmaWMo
UmVnSUQgcmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBCYW5rSW5mbzo6dG9J
bmRleChyZWcpOworCisgICAgICAgICsrbV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbmFtZUF0SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAo
bmFtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZWxlYXNlQXRJbmRleChpbmRleCk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICAvLyByZXRhaW4vcmVsZWFz
ZSAtIHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8gYXNzb2NpYXRlL2Rpc2Fzc29jaWF0ZSBuYW1l
cworICAgIC8vIHdpdGggdmFsdWVzIGluIHJlZ2lzdGVycy4gcmV0YWluIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBvbiBsb2NrZWQgcmVnaXN0ZXJzLgorICAgIHZvaWQgcmV0YWluKFJlZ0lEIHJlZywg
VmlydHVhbFJlZ2lzdGVyIG5hbWUsIFNwaWxsSGludCBzcGlsbE9yZGVyKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBCYW5rSW5mbzo6dG9JbmRleChyZWcpOworCisgICAgICAgIC8v
IFNwaWxsSGludCBtdXN0IGJlIHZhbGlkLgorICAgICAgICBBU1NFUlQoc3BpbGxPcmRlciAhPSBT
cGlsbEhpbnRJbnZhbGlkKTsKKyAgICAgICAgLy8gJ2luZGV4JyBtdXN0IGJlIGEgdmFsaWQsIGxv
Y2tlZCByZWdpc3Rlci4KKyAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOworICAgICAg
ICBBU1NFUlQobV9kYXRhW2luZGV4XS5sb2NrQ291bnQpOworICAgICAgICAvLyAnaW5kZXgnIHNo
b3VsZCBub3QgY3VycmVudGx5IGJlIG5hbWVkLCB0aGUgbmV3IG5hbWUgbXVzdCBiZSB2YWxpZC4K
KyAgICAgICAgQVNTRVJUKCFtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxpZCgpKTsKKyAgICAgICAg
QVNTRVJUKG5hbWUuaXNWYWxpZCgpKTsKKyAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgbm90IGN1
cnJlbnRseSBoYXZlIGEgc3BpbGxPcmRlci4KKyAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0u
c3BpbGxPcmRlciA9PSBTcGlsbEhpbnRJbnZhbGlkKTsKKworICAgICAgICBtX2RhdGFbaW5kZXhd
Lm5hbWUgPSBuYW1lOworICAgICAgICBtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgPSBzcGlsbE9y
ZGVyOworICAgIH0KKyAgICB2b2lkIHJlbGVhc2UoUmVnSUQgcmVnKQorICAgIHsKKyAgICAgICAg
cmVsZWFzZUF0SW5kZXgoQmFua0luZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorCisgICAgLy8g
bG9jay91bmxvY2sgcmVnaXN0ZXIsIGVuc3VyZXMgdGhhdCB0aGV5IGFyZSBub3Qgc3BpbGxlZC4K
KyAgICB2b2lkIGxvY2soUmVnSUQgcmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBCYW5rSW5mbzo6dG9JbmRleChyZWcpOworCisgICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9S
RUdTKTsKKyAgICAgICAgKyttX2RhdGFbaW5kZXhdLmxvY2tDb3VudDsKKyAgICAgICAgQVNTRVJU
KG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKKyAgICB9CisgICAgdm9pZCB1bmxvY2soUmVnSUQg
cmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBCYW5rSW5mbzo6dG9JbmRleChy
ZWcpOworCisgICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKKyAgICAgICAgQVNTRVJU
KG1fZGF0YVtpbmRleF0ubG9ja0NvdW50KTsKKyAgICAgICAgLS1tX2RhdGFbaW5kZXhdLmxvY2tD
b3VudDsKKyAgICB9CisgICAgYm9vbCBpc0xvY2tlZChSZWdJRCByZWcpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNMb2NrZWRBdEluZGV4KEJhbmtJbmZvOjp0b0luZGV4KHJlZykpOwor
ICAgIH0KKworICAgIC8vIEdldCB0aGUgbmFtZSAoVmlydHVhbFJlZ2lzdGVyKSBhc3NvY2lhdGVk
IHdpdGggdGhlCisgICAgLy8gZ2l2ZW4gcmVnaXN0ZXIgKG9yIGRlZmF1bHQgVmlydHVhbFJlZ2lz
dGVyKCkgZm9yIG5vbmUpLgorICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lKFJlZ0lEIHJlZykgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBuYW1lQXRJbmRleChCYW5rSW5mbzo6dG9JbmRleChy
ZWcpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0luVXNlKFJlZ0lEIHJlZykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0xvY2tlZChyZWcpIHx8IG5hbWUocmVnKS5pc1ZhbGlkKCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcCgpCisgICAgeworICAgICAgICAvLyBGb3IgZWFj
aCByZWdpc3RlciwgcHJpbnQgdGhlIFZpcnR1YWxSZWdpc3RlciAnbmFtZScuCisgICAgICAgIGZv
ciAodWludDMyX3QgaSA9MDsgaSA8IE5VTV9SRUdTOyArK2kpIHsKKyAgICAgICAgICAgIGlmICht
X2RhdGFbaV0ubmFtZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlslMDJk
XSIsIG1fZGF0YVtpXS5uYW1lLm9mZnNldCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiWy0tXSIpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dGKCJc
biIpOworICAgIH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBmcmllbmQgY2xhc3MgUmVn
aXN0ZXJCYW5rPEJhbmtJbmZvPjsKKyAgICBwdWJsaWM6CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBuYW1lKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYmFuay0+bmFt
ZUF0SW5kZXgobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzTG9ja2VkKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYmFuay0+aXNMb2NrZWRBdElu
ZGV4KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZWxlYXNlKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgbV9iYW5rLT5yZWxlYXNlQXRJbmRleChtX2luZGV4KTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZ0lEIHJlZ0lEKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjp0b1JlZ2lzdGVyKG1faW5kZXgpOworICAgICAgICB9
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGNvbnN0IGNoYXIqIGRlYnVnTmFtZSgpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYW5rSW5mbzo6ZGVidWdOYW1lKHJlZ0lE
KCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgIHsKKyAgICAgICAgICAgICsrbV9pbmRleDsKKyAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2JhbmsgPT0g
b3RoZXIubV9iYW5rKTsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5k
ZXg7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4OworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBpdGVyYXRvcihSZWdpc3RlckJhbms8QmFua0luZm8+KiBiYW5rLCB1bnNpZ25l
ZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9iYW5rKGJhbmspCisgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVyQmFuazxC
YW5rSW5mbz4qIG1fYmFuazsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisg
ICAgaXRlcmF0b3IgYmVnaW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMs
IDApOworICAgIH0KKworICAgIGl0ZXJhdG9yIGVuZCgpCisgICAgeworICAgICAgICByZXR1cm4g
aXRlcmF0b3IodGhpcywgTlVNX1JFR1MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGlz
TG9ja2VkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpbmRleCA8IE5VTV9SRUdTKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtpbmRleF0ubG9ja0Nv
dW50OworICAgIH0KKworICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lQXRJbmRleCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YVtpbmRleF0ubmFtZTsKKyAgICB9CisKKyAgICB2b2lkIHJlbGVh
c2VBdEluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgLy8gJ2luZGV4JyBtdXN0
IGJlIGEgdmFsaWQgcmVnaXN0ZXIuCisgICAgICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsK
KyAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgY3VycmVudGx5IGJlIG5hbWVkLgorICAgICAgICBB
U1NFUlQobV9kYXRhW2luZGV4XS5uYW1lLmlzVmFsaWQoKSk7CisgICAgICAgIC8vICdpbmRleCcg
c2hvdWxkIGN1cnJlbnRseSBoYXZlIGEgdmFsaWQgc3BpbGwgb3JkZXIuCisgICAgICAgIEFTU0VS
VChtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgIT0gU3BpbGxIaW50SW52YWxpZCk7CisKKyAgICAg
ICAgbV9kYXRhW2luZGV4XS5uYW1lID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIG1fZGF0
YVtpbmRleF0uc3BpbGxPcmRlciA9IFNwaWxsSGludEludmFsaWQ7CisgICAgfQorCisgICAgLy8g
VXNlZCBieSAnYWxsb2NhdGUnLCBhYm92ZSwgdG8gdXBkYXRlIGluZm9yYW10aW9uIGluIHRoZSBt
YXAuCisgICAgUmVnSUQgYWxsb2NhdGVJbnRlcm5hbCh1aW50MzJfdCBpLCBWaXJ0dWFsUmVnaXN0
ZXIgJnNwaWxsTWUpCisgICAgeworICAgICAgICAvLyAnaScgbXVzdCBiZSBhIHZhbGlkLCB1bmxv
Y2tlZCByZWdpc3Rlci4KKyAgICAgICAgQVNTRVJUKGkgPCBOVU1fUkVHUyAmJiAhbV9kYXRhW2ld
LmxvY2tDb3VudCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBWaXJ0dWFsUmVnaXN0ZXIgb2Yg
dGhlIG5hbWVkIHZhbHVlIGN1cnJlbnRseSBzdG9yZWQgaW4KKyAgICAgICAgLy8gdGhlIHJlZ2lz
dGVyIGJlaW5nIHJldHVybmVkIC0gb3IgZGVmYXVsdCBWaXJ0dWFsUmVnaXN0ZXIoKSBpZiBub25l
LgorICAgICAgICBzcGlsbE1lID0gbV9kYXRhW2ldLm5hbWU7CisKKyAgICAgICAgLy8gQ2xlYXIg
YW55IG5hbWUvc3BpbGxPcmRlciBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3Rl
ciwKKyAgICAgICAgbV9kYXRhW2ldID0gTWFwRW50cnkoKTsKKyAgICAgICAgLy8gTWFyayB0aGUg
cmVnaXN0ZXIgYXMgbG9ja2VkICh3aXRoIGEgbG9jayBjb3VudCBvZiAxKS4KKyAgICAgICAgbV9k
YXRhW2ldLmxvY2tDb3VudCA9IDE7CisKKyAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjp0b1JlZ2lz
dGVyKGkpOworICAgIH0KKworICAgIC8vID09PSBNYXBFbnRyeSA9PT0KKyAgICAvLworICAgIC8v
IFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciBhbiBpbmRpdmlkdWFsIG1h
Y2hpbmUgcmVnaXN0ZXIKKyAgICAvLyBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBSZWdpc3RlckJhbmsu
IEZvciBlYWNoIHJlZ2lzdGVyIHdlIHRyYWNrIGEgbG9jaworICAgIC8vIGNvdW50LCBuYW1lIGFu
ZCBzcGlsbE9yZGVyIGhpbnQuCisgICAgc3RydWN0IE1hcEVudHJ5IHsKKyAgICAgICAgTWFwRW50
cnkoKQorICAgICAgICAgICAgOiBuYW1lKFZpcnR1YWxSZWdpc3RlcigpKQorICAgICAgICAgICAg
LCBzcGlsbE9yZGVyKFNwaWxsSGludEludmFsaWQpCisgICAgICAgICAgICAsIGxvY2tDb3VudCgw
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZTsK
KyAgICAgICAgU3BpbGxIaW50IHNwaWxsT3JkZXI7CisgICAgICAgIHVpbnQzMl90IGxvY2tDb3Vu
dDsKKyAgICB9OworCisgICAgLy8gSG9sZHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIGFsbCByZWdp
c3RlcnMuCisgICAgTWFwRW50cnkgbV9kYXRhW05VTV9SRUdTXTsKK307CisKK3R5cGVkZWYgUmVn
aXN0ZXJCYW5rPEdQUkluZm8+OjppdGVyYXRvciBncHJfaXRlcmF0b3I7Cit0eXBlZGVmIFJlZ2lz
dGVyQmFuazxGUFJJbmZvPjo6aXRlcmF0b3IgZnByX2l0ZXJhdG9yOworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKaW5kZXggODZjM2E4ZjgyOThkODM0ZDMzMTFmYzVkZTU1ZDE5MmIzMGQw
NGM2MS4uYTU1MDIyZGQwMTJhOWU5Y2NkMzdjZjVmODE5Mjk4YzViYTA5OWExNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMTYx
LDggKzE2MSw2IEBAIGNsYXNzIEIzSVJHZW5lcmF0b3IgewogICAgIHR5cGVkZWYgQ29udHJvbERh
dGE6OlJlc3VsdExpc3QgUmVzdWx0TGlzdDsKICAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPEIz
SVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnkgQ29udHJvbEVudHJ5OwogCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwotCiAgICAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JUeXBlOwogICAgIHR5cGVkZWYgVW5leHBlY3RlZDxFcnJvclR5
cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7CiAgICAgdHlwZWRlZiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT4gUmVzdWx0OwpAQCAtMTg3LDYgKzE4NSw3
IEBAIGNsYXNzIEIzSVJHZW5lcmF0b3IgewogICAgIC8vIExvY2FscwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRM
b2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHRlZUxvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgdmFsdWUpOwogCiAgICAgLy8gR2xvYmFscwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CkBAIC0yMTQsMTQgKzIxMywxNCBAQCBjbGFzcyBCM0lSR2VuZXJhdG9yIHsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShD
b250cm9sRGF0YSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcyk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENv
bnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRCcmFuY2goQ29udHJvbERhdGEmLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiBjb25k
aXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVm
YXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYs
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CiAKICAg
ICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwo
dWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUlu
ZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6
Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9uVHlwZT4mIHJl
c3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFi
bGUoKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJv
bFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsKQEAgLTYxOSw2
ICs2MTgsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXMKICAgICByZXR1cm4geyB9OwogfQog
CithdXRvIEIzSVJHZW5lcmF0b3I6OnRlZUxvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gc2V0TG9jYWwoaW5k
ZXgsIHZhbHVlKTsKK30KKwogYXV0byBCM0lSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBW
YWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgp
LCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKQEAgLTEw
MTEsMTQgKzEwMTUsMTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29u
dHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmEKICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwg
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFs
dWVzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250
cm9sRGF0YSYgZGF0YSwgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9uVHlwZT4gY29uZGl0aW9uLCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJlc3VsdEZvckJyYW5j
aCgpKTsKIAogICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0QmxvY2tGb3JCcmFu
Y2goKTsKICAgICBpZiAoY29uZGl0aW9uKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVh
dGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBjb25kaXRpb24pOworICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLCBjb25kaXRpb24udmFsdWUoKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpLCBGcmVxdWVudGVkQmxvY2soY29u
dGludWF0aW9uKSk7CiAgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50Qmxv
Y2spOwogICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKQEAgLTEwNzksNyArMTA4Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJl
YWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9u
YWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NF
UlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CiAKQEAgLTExNDgs
MTggKzExNTIsMTcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogCiAgICAgICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uOwogCi0gICAgICAgIGlmIChyZXR1cm5UeXBlID09IFZvaWQp
Ci0gICAgICAgICAgICByZXN1bHQgPSBudWxscHRyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFBoaSwg
dG9CM1R5cGUocmV0dXJuVHlwZSksIG9yaWdpbigpKTsKLSAgICAgICAgICAgIHdhc21DYWxsUmVz
dWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7Ci0gICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1
bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gVm9p
ZCkgeworICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0VmFsdWUgPSBjb250aW51YXRp
b24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUpLCBv
cmlnaW4oKSk7CisgICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1
bHRWYWx1ZSk7CisgICAgICAgICAgICBlbWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGko
cmVzdWx0VmFsdWUpOworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0VmFsdWU7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJB
c3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5
LgogICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgY29u
dGludWF0aW9uKTsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFy
Z3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAorICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHRW
YWx1ZSA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAg
ICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKQEAgLTExNzIsMTIgKzExNzUs
MTQgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAocmVzdWx0VmFs
dWUpCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRWYWx1ZTsKICAgICB9CiAKICAgICByZXR1
cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3Mu
dGFrZUxhc3QoKTsKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdz
LnNpemUoKSk7CkBAIC0xMzEwLDcgKzEzMTUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npbwog
ICAgICAgICBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBCaXRYb3IsIG9yaWdpbigpLCBjYWxsZWVDb2RlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2RlUG9pc29uKSk7CiAK
ICAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwotICAgIHJlc3Vs
dCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJs
b2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgYXV0byogcmVz
dWx0VmFsdWUgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1
cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAg
ICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwogICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CkBAIC0xMzI3LDYgKzEzMzIsOCBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1
cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSk7CisgICAgaWYgKHJlc3VsdFZhbHVlKQorICAgICAgICByZXN1
bHQgPSByZXN1bHRWYWx1ZTsKIAogICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBh
bm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVk
IG91ciBNZW1vcnkuCiAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNh
Y2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3By
b2MsIG1fY3VycmVudEJsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXggMDg4ZTcyOGNlNGNjNTRjZTNjNjA2YjQwZjI1NWE2MDlk
NTdiM2I5MS4uNzAyYzZiODk2ZTIwZWZiNWNmYmZjNDI4YjE1OWJiZjBlNmI3NWYxOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTE2
Nyw5ICsxNjcsOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpiaW5hcnlDYXNlKCkg
LT4gUGFydGlhbFJlc3VsdAogCiAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5U
TyhyaWdodCwgImJpbmFyeSByaWdodCIpOwogICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NU
QUNLX0lOVE8obGVmdCwgImJpbmFyeSBsZWZ0Iik7Ci0gICAgV0FTTV9UUllfQUREX1RPX0NPTlRF
WFQodGVtcGxhdGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCByZXN1bHQpKTsKKyAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVCh0ZW1wbGF0ZSBhZGRPcDxvcD4oV1RGTW92ZShsZWZ0KSwgV1RGTW92
ZShyaWdodCksIHJlc3VsdCkpOwogCi0gICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3Vs
dCk7CisgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIApAQCAtMTgxLDkgKzE4MSw5IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnVuYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBFeHByZXNzaW9uVHlw
ZSByZXN1bHQ7CiAKICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVl
LCAidW5hcnkiKTsKLSAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVCh0ZW1wbGF0ZSBhZGRPcDxv
cD4odmFsdWUsIHJlc3VsdCkpOworICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRl
IGFkZE9wPG9wPihXVEZNb3ZlKHZhbHVlKSwgcmVzdWx0KSk7CiAKLSAgICBtX2V4cHJlc3Npb25T
dGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92
ZShyZXN1bHQpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0yMDksOSArMjA5LDkgQEAgYXV0
byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJl
c3VsdAogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKG5vblplcm8s
ICJzZWxlY3Qgbm9uLXplcm8iKTsKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0g
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFNlbGVjdChjb25kaXRpb24sIG5vblpl
cm8sIHplcm8sIHJlc3VsdCkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRT
ZWxlY3QoV1RGTW92ZShjb25kaXRpb24pLCBXVEZNb3ZlKG5vblplcm8pLCBXVEZNb3ZlKHplcm8p
LCByZXN1bHQpKTsKIAotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsK
KyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0yMjUsOCArMjI1LDggQEAgYXV0byBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFsaWdubWVudCA+IG1lbW9yeUxvZzJBbGlnbm1lbnQo
bV9jdXJyZW50T3Bjb2RlKSwgImJ5dGUgYWxpZ25tZW50ICIsIDF1bGwgPDwgYWxpZ25tZW50LCAi
IGV4Y2VlZHMgbG9hZCdzIG5hdHVyYWwgYWxpZ25tZW50ICIsIDF1bGwgPDwgbWVtb3J5TG9nMkFs
aWdubWVudChtX2N1cnJlbnRPcGNvZGUpKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBsb2FkIG9mZnNldCIpOwogICAgICAg
ICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIsICJsb2FkIHBvaW50
ZXIiKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxM
b2FkT3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpOwot
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBlPihtX2N1cnJlbnRP
cGNvZGUpLCBXVEZNb3ZlKHBvaW50ZXIpLCByZXN1bHQsIG9mZnNldCkpOworICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKQEAgLTI0MCw3ICsyNDAsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgc3RvcmUgb2Zm
c2V0Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUs
ICJzdG9yZSB2YWx1ZSIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19J
TlRPKHBvaW50ZXIsICJzdG9yZSBwb2ludGVyIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKHN0b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBw
b2ludGVyLCB2YWx1ZSwgb2Zmc2V0KSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KHN0b3JlKHN0YXRpY19jYXN0PFN0b3JlT3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBXVEZNb3Zl
KHBvaW50ZXIpLCBXVEZNb3ZlKHZhbHVlKSwgb2Zmc2V0KSk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogI3VuZGVmIENSRUFURV9DQVNFCkBAIC0yNzgsNyArMjc4LDcgQEAgYXV0byBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAog
ICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBmb3IgZ2V0X2xvY2Fs
Iik7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldExvY2FsKGluZGV4LCByZXN1
bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIApAQCAtMjg3LDcgKzI4Nyw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgRXhw
cmVzc2lvblR5cGUgdmFsdWU7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBmb3Igc2V0X2xvY2FsIik7CiAgICAgICAg
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfbG9jYWwiKTsK
LSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIHZhbHVlKSk7
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCBXVEZNb3Zl
KHZhbHVlKSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMjk1LDcgKzI5NSw3
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBmb3IgdGVl
X2xvY2FsIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2su
aXNFbXB0eSgpLCAiY2FuJ3QgdGVlX2xvY2FsIG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsK
LSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIG1fZXhwcmVz
c2lvblN0YWNrLmxhc3QoKSkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVCh0ZWVM
b2NhbChpbmRleCwgbV9leHByZXNzaW9uU3RhY2subGFzdCgpKSk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCkBAIC0zMDQsNyArMzA0LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBFeHByZXNz
aW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKICAgICAgICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0R2xvYmFsKGluZGV4LCByZXN1bHQpKTsKLSAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0
YWNrLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IApAQCAtMzEzLDcgKzMxMyw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
RXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFs
dWU7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwg
ImNhbid0IGdldCBzZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VY
UFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInNldF9nbG9iYWwgdmFsdWUiKTsKLSAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSkpOworICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzZXRHbG9iYWwoaW5kZXgsIFdURk1vdmUodmFsdWUp
KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0zMzAsMTQgKzMzMCwxNCBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxs
J3MgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQobV9l
eHByZXNzaW9uU3RhY2tbaV0pOworICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShtX2V4cHJlc3Npb25TdGFja1tpXSkpOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5z
aHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAotICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1
bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8RXhw
cmVzc2lvblR5cGU+IHJlc3VsdDsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
Q2FsbChmdW5jdGlvbkluZGV4LCBjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCi0g
ICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQotICAgICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShyZXN1bHQudmFs
dWUoKSkpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtMzU5LDE0ICszNTksMTQg
QEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFy
dGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVD
YXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9y
ICIsIGFyZ3VtZW50Q291bnQsICIgY2FsbF9pbmRpcmVjdCBhcmd1bWVudHMiKTsKICAgICAgICAg
c2l6ZV90IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGFy
Z3VtZW50Q291bnQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7
IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGFyZ3MudW5j
aGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrW2ldKTsKKyAgICAgICAgICAgIGFyZ3MudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUobV9leHByZXNzaW9uU3RhY2tbaV0pKTsKICAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKLSAgICAgICAgRXhw
cmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiByZXN1bHQ7CiAgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGFkZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3Vs
dCkpOwogCi0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQot
ICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSkpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtMzkzLDgg
KzM5Myw4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgQ29udHJvbFR5cGUgY29udHJvbDsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZXN1bHRUeXBlKGlubGluZVNpZ25hdHVyZSksICJj
YW4ndCBnZXQgaWYncyBpbmxpbmUgc2lnbmF0dXJlIik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9F
WFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiaWYgY29uZGl0aW9uIik7Ci0gICAgICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZElmKGNvbmRpdGlvbiwgaW5saW5lU2lnbmF0dXJl
LCBjb250cm9sKSk7Ci0gICAgICAgIG1fY29udHJvbFN0YWNrLmFwcGVuZCh7IFdURk1vdmUobV9l
eHByZXNzaW9uU3RhY2spLCBjb250cm9sIH0pOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGRJZihXVEZNb3ZlKGNvbmRpdGlvbiksIGlubGluZVNpZ25hdHVyZSwgY29udHJvbCkp
OworICAgICAgICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0
YWNrKSwgV1RGTW92ZShjb250cm9sKSB9KTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBF
eHByZXNzaW9uTGlzdCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTQwOSw3ICs0
MDksNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgY2FzZSBCcjoKICAgICBjYXNlIEJySWY6IHsKICAgICAgICAg
dWludDMyX3QgdGFyZ2V0OwotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24gPSBDb250
ZXh0OjplbXB0eUV4cHJlc3Npb247CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5
cGU+IGNvbmRpdGlvbjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIodGFyZ2V0KSwgImNhbid0IGdldCBiciAvIGJyX2lmJ3MgdGFyZ2V0Iik7CiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyIC8g
YnJfaWYncyB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFjayBzaXplICIs
IG1fY29udHJvbFN0YWNrLnNpemUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRPcGNvZGUgPT0g
QnJJZikKQEAgLTQxOSw3ICs0MTksNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAgQ29udHJvbFR5cGUm
IGRhdGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0
XS5jb250cm9sRGF0YTsKIAotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRCcmFu
Y2goZGF0YSwgY29uZGl0aW9uLCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRCcmFuY2goZGF0YSwgV1RGTW92ZShjb25kaXRpb24pLCBtX2V4
cHJlc3Npb25TdGFjaykpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtNDQ0LDcg
KzQ0NCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihkZWZhdWx0VGFy
Z2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyX3RhYmxlJ3MgZGVmYXVsdCB0YXJnZXQg
IiwgZGVmYXVsdFRhcmdldCwgIiBleGNlZWRzIGNvbnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRy
b2xTdGFjay5zaXplKCkpOwogCiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNL
X0lOVE8oY29uZGl0aW9uLCAiYnJfdGFibGUgY29uZGl0aW9uIik7Ci0gICAgICAgIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKGFkZFN3aXRjaChjb25kaXRpb24sIHRhcmdldHMsIG1fY29udHJvbFN0
YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSBkZWZhdWx0VGFyZ2V0XS5jb250cm9sRGF0
YSwgbV9leHByZXNzaW9uU3RhY2spKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
YWRkU3dpdGNoKFdURk1vdmUoY29uZGl0aW9uKSwgdGFyZ2V0cywgbV9jb250cm9sU3RhY2tbbV9j
b250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGRlZmF1bHRUYXJnZXRdLmNvbnRyb2xEYXRhLCBtX2V4
cHJlc3Npb25TdGFjaykpOwogCiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwogICAg
ICAgICByZXR1cm4geyB9OwpAQCAtNDU1LDcgKzQ1NSw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgaWYg
KG1fc2lnbmF0dXJlLnJldHVyblR5cGUoKSAhPSBWb2lkKSB7CiAgICAgICAgICAgICBFeHByZXNz
aW9uVHlwZSByZXR1cm5WYWx1ZTsKICAgICAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9O
X1NUQUNLX0lOVE8ocmV0dXJuVmFsdWUsICJyZXR1cm4iKTsKLSAgICAgICAgICAgIHJldHVyblZh
bHVlcy5hcHBlbmQocmV0dXJuVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVu
ZChXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgICAgIH0KIAogICAgICAgICBXQVNNX1RSWV9B
RERfVE9fQ09OVEVYVChhZGRSZXR1cm4obV9jb250cm9sU3RhY2tbMF0uY29udHJvbERhdGEsIHJl
dHVyblZhbHVlcykpOwpAQCAtNTAwLDggKzUwMCw4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9U
UllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhkZWx0YSwgImV4cGVjdCBhbiBpMzIgYXJndW1l
bnQgdG8gZ3Jvd19tZW1vcnkgb24gdGhlIHN0YWNrIik7CiAKICAgICAgICAgRXhwcmVzc2lvblR5
cGUgcmVzdWx0OwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRHcm93TWVtb3J5
KGRlbHRhLCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3Vs
dCk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEdyb3dNZW1vcnkoV1RGTW92
ZShkZWx0YSksIHJlc3VsdCkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RG
TW92ZShyZXN1bHQpKTsKIAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTUxNSw3ICs1
MTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDdXJyZW50TWVtb3J5KHJlc3VsdCkpOwotICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUmFpbGd1
bkpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUmFpbGd1bkpJVC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGI4NWE3YjhjYmNjZWRmNjUzOWMxZDExN2E3NWQyYmU2ZGZlZTc5OAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21SYWlsZ3VuSklU
LmNwcApAQCAtMCwwICsxLDU4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2Ug
U3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtUmFpbGd1bkpJVC5oIgorCisjaW5jbHVkZSAiUmVnaXN0ZXJCYW5rLmgiCisjaW5jbHVkZSAi
V2FzbUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKK25h
bWVzcGFjZSBXYXNtUmFpbGd1bkpJVEludGVybmFsIHsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7Cit9CisKK2NsYXNzIFJhaWxndW5KSVQ7CisKK2NsYXNzIFN0YWNrVmFs
dWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrVmFsdWUpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0cnVjdCBMb2NhbCB7CisgICAgICAgIHVp
bnQzMl90IHNsb3QgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBDb25zdGFudCB7CisgICAg
ICAgIHVpbnQ2NF90IGJpdHMgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBSZWdpc3RlciB7
CisgICAgICAgIFJlZyByZWc7CisgICAgfTsKKworICAgIHN0cnVjdCBTdGFjayB7CisgICAgICAg
IHVpbnQzMl90IHNsb3QgeyAwIH07CisgICAgfTsKKworICAgIC8vIEtlZXAgdGhlIG9yZGVyIGlu
IHN5bmMgd2l0aCB0aGUgb3JkZXIgaW4gVmFyaWFudC4KKyAgICBlbnVtIGNsYXNzIExvY2F0aW9u
IDogdWludDhfdCB7CisgICAgICAgIExvY2FsID0gMCwKKyAgICAgICAgQ29uc3RhbnQsCisgICAg
ICAgIFJlZ2lzdGVyLAorICAgICAgICBTdGFjaywKKyAgICB9OworICAgIHVzaW5nIERhdGEgPSBW
YXJpYW50PExvY2FsLCBDb25zdGFudCwgUmVnaXN0ZXIsIFN0YWNrPjsKKworICAgIERhdGEgZGF0
YSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhOworICAgIH0KKworICAgIFR5
cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlOworICAgIH0KKwor
ICAgIExvY2F0aW9uIGxvY2F0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxMb2NhdGlvbj4obV9kYXRhLmluZGV4KCkpOworICAgIH0KKworICAgIH5TdGFja1Zh
bHVlKCk7CisKKyAgICBTdGFja1ZhbHVlKCkgPSBkZWZhdWx0OworCisgICAgU3RhY2tWYWx1ZShT
dGFja1ZhbHVlJiYgdmFsdWUpCisgICAgeworICAgICAgICBzd2FwKHZhbHVlKTsKKyAgICB9CisK
KyAgICBTdGFja1ZhbHVlJiBvcGVyYXRvcj0oU3RhY2tWYWx1ZSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgc3dhcCh2YWx1ZSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2
b2lkIHN3YXAoU3RhY2tWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBzdGQ6OnN3YXAobV9q
aXQsIHZhbHVlLm1faml0KTsKKyAgICAgICAgc3RkOjpzd2FwKG1fdHlwZSwgdmFsdWUubV90eXBl
KTsKKyAgICAgICAgc3RkOjpzd2FwKG1fZGF0YSwgdmFsdWUubV9kYXRhKTsKKyAgICB9CisKKyAg
ICBTdGFja1ZhbHVlKFJhaWxndW5KSVQqIGppdCwgVHlwZSB0eXBlLCBMb2NhbCBsb2NhbCkKKyAg
ICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9k
YXRhKGxvY2FsKQorICAgIHsKKyAgICB9CisKKyAgICBTdGFja1ZhbHVlKFJhaWxndW5KSVQqIGpp
dCwgVHlwZSB0eXBlLCBDb25zdGFudCBjb25zdGFudCkKKyAgICAgICAgOiBtX2ppdChqaXQpCisg
ICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9kYXRhKGNvbnN0YW50KQorICAgIHsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgUmFpbGd1bkpJVCogbV9qaXQgeyBudWxscHRyIH07Cisg
ICAgVHlwZSBtX3R5cGUgeyBWb2lkIH07CisgICAgRGF0YSBtX2RhdGEgeyBDb25zdGFudCB7IDAg
fSB9OworfTsKKworY2xhc3MgQmFzaWNCbG9jayB7Cit9OworCitjbGFzcyBDb250cm9sRGF0YSB7
CitwdWJsaWM6CisgICAgQ29udHJvbERhdGEoQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbikKKyAgICAgICAgOiBibG9ja1R5cGUodHlwZSkKKyAgICAgICAgLCBjb250aW51
YXRpb24oY29udGludWF0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBDb250cm9sRGF0YSgpID0g
ZGVmYXVsdDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgor
ICAgICAgICAgICAgb3V0LnByaW50KCJJZjogICAgICAgIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBCbG9ja1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgb3V0LnByaW50KCJC
bG9jazogICAgIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCbG9ja1R5cGU6
Okxvb3A6CisgICAgICAgICAgICBvdXQucHJpbnQoIkxvb3A6ICAgICAiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CisgICAgICAgICAgICBv
dXQucHJpbnQoIlRvcExldmVsOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBibG9ja1R5cGU7IH0K
KworICAgIGJvb2wgaGFzTm9uVm9pZFNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHJlc3VsdC5z
aXplKCk7IH0KKworICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrRm9yQnJhbmNoKCkKKyAgICB7
CisgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgcmV0
dXJuIHNwZWNpYWw7CisgICAgICAgIHJldHVybiBjb250aW51YXRpb247CisgICAgfQorCisgICAg
dm9pZCBjb252ZXJ0SWZUb0Jsb2NrKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlKCkgPT0g
QmxvY2tUeXBlOjpJZik7CisgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgIHNwZWNpYWwgPSBudWxscHRyOworICAgIH0KKworICAgIHVzaW5nIFJlc3VsdExpc3Qg
PSBWZWN0b3I8U3RhY2tWYWx1ZT47IC8vIFN0YWNrVmFsdWUgbXVzdCBiZSBmbHVzaGVkLgorCisg
ICAgY29uc3QgUmVzdWx0TGlzdCogcmVzdWx0Rm9yQnJhbmNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiAmcmVzdWx0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgQjNJUkdlbmVyYXRvcjsKKyAgICBCbG9ja1R5cGUgYmxvY2tUeXBlOworICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKKyAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOworICAg
IFJlc3VsdExpc3QgcmVzdWx0OworfTsKKworCitjbGFzcyBSYWlsZ3VuSklUIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSYWlsZ3VuSklUKTsKK3B1YmxpYzoKKyAgICBSYWlsZ3VuSklUKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRp
ZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25U
eXBlID0gU3RhY2tWYWx1ZTsKKyAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwor
ICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPFN0YWNrVmFsdWU+OworICAgIHVzaW5n
IENvbnRyb2xFbnRyeSA9IEZ1bmN0aW9uUGFyc2VyPFJhaWxndW5KSVQ+OjpDb250cm9sRW50cnk7
CisKKyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJl
c3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNp
bmcgUGFydGlhbFJlc3VsdCA9IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB2b2lk
IHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxSYWlsZ3VuSklUPiogcGFyc2VyKSB7IG1fcGFyc2Vy
ID0gcGFyc2VyOyB9OworCisgICAgLy8gbG9jayBhbmQgdW5sb2NrIEdQUiAmIEZQUiByZWdpc3Rl
cnMuCisgICAgdm9pZCBsb2NrKEdQUlJlZyByZWcpCisgICAgeworICAgICAgICBtX2dwcnMubG9j
ayhyZWcpOworICAgIH0KKyAgICB2b2lkIGxvY2soRlBSUmVnIHJlZykKKyAgICB7CisgICAgICAg
IG1fZnBycy5sb2NrKHJlZyk7CisgICAgfQorICAgIHZvaWQgdW5sb2NrKEdQUlJlZyByZWcpCisg
ICAgeworICAgICAgICBtX2dwcnMudW5sb2NrKHJlZyk7CisgICAgfQorICAgIHZvaWQgdW5sb2Nr
KEZQUlJlZyByZWcpCisgICAgeworICAgICAgICBtX2ZwcnMudW5sb2NrKHJlZyk7CisgICAgfQor
CisgICAgR1BSUmVnIGFsbG9jYXRlR1BSKFN0YWNrVmFsdWUmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEludmFsaWRHUFJSZWc7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFy
Z3M+CisgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNl
IEZhaWx1cmVIZWxwZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVs
ZSBmYWlsZWQgY29tcGlsaW5nOiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9Cisj
ZGVmaW5lIFdBU01fQ09NUElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAo
MCkKKworICAgIC8vIEZ1bmN0aW9ucyBpbnZva2VkIGJ5IEZ1bmN0aW9uUGFyc2VyLgorICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1
cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBl
LCB1aW50MzJfdCk7CisgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0
X3QpOworCisgICAgLy8gTG9jYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gdGVlTG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSk7CisK
KyAgICAvLyBHbG9iYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0
R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAgIC8vIE1lbW9yeQorICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKKworICAgIC8vIEJhc2ljIG9wZXJhdG9ycworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBF
eHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBDb250cm9sIGZsb3cKKyAgICBDb250cm9sRGF0
YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpOworICAgIENv
bnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7Cisg
ICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBj
b25zdCBFeHByZXNzaW9uTGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBzdGQ6Om9wdGlvbmFsPEV4cHJl
c3Npb25UeXBlPiBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBD
b250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2Nr
KENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJv
bEVudHJ5Jik7CisKKyAgICAvLyBDYWxscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJ
bmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBz
dGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOworCisgICAgdm9pZCBkdW1wKGNv
bnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25M
aXN0KiBleHByZXNzaW9uU3RhY2spOworCitwcml2YXRlOgorICAgIHZvaWQgc3BpbGwodWludDMy
X3Qgc3RhY2tTbG90LCBTdGFja1ZhbHVlJik7CisKKyAgICBDQ2FsbEhlbHBlcnMgbV9qaXQ7Cisg
ICAgUmVnaXN0ZXJCYW5rPEdQUkluZm8+IG1fZ3ByczsKKyAgICBSZWdpc3RlckJhbms8RlBSSW5m
bz4gbV9mcHJzOworICAgIFZlY3RvcjxUeXBlPiBtX2xvY2FsczsKKyAgICBGdW5jdGlvblBhcnNl
cjxSYWlsZ3VuSklUPiogbV9wYXJzZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4
IHsgVUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRy
IH07CisgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0
ciB9OworfTsKKworY2xhc3MgR1BST3BlcmFuZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R1BST3BlcmFuZCk7CitwdWJsaWM6CisgICAgR1BST3BlcmFuZChSYWlsZ3VuSklUKiBqaXQsIFN0
YWNrVmFsdWUmJiB2YWx1ZSkKKyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwgbV92YWx1
ZShXVEZNb3ZlKHZhbHVlKSkKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlLmxvY2F0aW9uKCkg
PT0gU3RhY2tWYWx1ZTo6TG9jYXRpb246OlJlZ2lzdGVyKSB7CisgICAgICAgICAgICBtX2dwciA9
IFdURjo6Z2V0PFN0YWNrVmFsdWU6OlJlZ2lzdGVyPihtX3ZhbHVlLmRhdGEoKSkucmVnLmdwcigp
OworICAgICAgICAgICAgbV9qaXQtPmxvY2sobV9ncHIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGVHUFIobV92YWx1ZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB+R1BST3BlcmFuZCgpCisgICAgeworICAgICAgICBtX2ppdC0+dW5sb2Nr
KG1fZ3ByKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2dwcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmFpbGd1bkpJVCogbV9qaXQ7CisgICAg
U3RhY2tWYWx1ZSBtX3ZhbHVlOworICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsK
K307CisKK1N0YWNrVmFsdWU6On5TdGFja1ZhbHVlKCkKK3sKKyAgICBpZiAobV9qaXQpIHsKKyAg
ICB9Cit9CisKK1JhaWxndW5KSVQ6OlJhaWxndW5KSVQoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2Vw
dGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9k
ZShtb2RlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCisgICAgLCBtX3Rp
ZXJVcCh0aWVyVXApCisgICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRp
b24pCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbXBpbGF0aW9uKTsKK30KKworYXV0byBSYWlsZ3Vu
SklUOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAgV0FTTV9DT01QSUxF
X0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKKworICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSk7CisKKyAgICAvLyBGSVhNRTogRml4IHRoZSBjb2RlLgorCisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQz
Ml90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVj
b3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gY291bnQ7CisgICAgdG90YWxCeXRlc0No
ZWNrZWQgKz0gbV9sb2NhbHMuc2l6ZSgpOworICAgIHVpbnQzMl90IHRvdGFsQnl0ZXM7CisgICAg
V0FTTV9DT01QSUxFX0ZBSUxfSUYoKHRvdGFsQnl0ZXNDaGVja2VkLnNhZmVHZXQodG90YWxCeXRl
cykgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgfHwgIW1fbG9jYWxzLnRyeVJlc2VydmVD
YXBhY2l0eSh0b3RhbEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgdG90YWxC
eXRlcywgIiBsb2NhbHMiKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgIGludDMyX3Qgc3RhY2tTbG90ID0gbV9sb2NhbHMuc2l6ZSgpOworICAg
ICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQodHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIFR5cGU6OkFueWZ1bmM6CisgICAgICAgIGNhc2UgVHlwZTo6RnVu
YzoKKyAgICAgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIC8vIEZJWE1F
OiBBZGRyZXNzIG9mZnNldCBvdmVyZmxvdy4KKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAg
ICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCAtKHN0YWNrU2xvdCAqIDgpKSk7CisgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC0oc3RhY2tTbG90
ICogOCkpKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRDb25zdGFudChUeXBlIHR5cGUs
IHVpbnQ2NF90IGJpdHMpIC0+IEV4cHJlc3Npb25UeXBlCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBUeXBlOjpBbnlmdW5jOgorICAgIGNhc2UgVHlwZTo6RnVuYzoKKyAgICBjYXNl
IFR5cGU6OlZvaWQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICBjYXNlIFR5cGU6Okk2
NDoKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmV0
dXJuIFN0YWNrVmFsdWUgeyB0aGlzLCB0eXBlLCBTdGFja1ZhbHVlOjpDb25zdGFudCB7IGJpdHMg
fSB9OworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmdldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVzdWx0ID0gU3RhY2tW
YWx1ZSB7IHRoaXMsIG1fbG9jYWxzW2luZGV4XSwgU3RhY2tWYWx1ZTo6TG9jYWwgeyBpbmRleCB9
IH07CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjpzZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OnRlZUxvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gUmFpbGd1bkpJVDo6bG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OnN0b3JlKFN0
b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
dWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBSYWlsZ3VuSklUOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTxPcFR5cGU+CithdXRvIFJhaWxndW5KSVQ6OmFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPE9wVHlwZT4KK2F1dG8gUmFpbGd1bkpJVDo6YWRkT3AoRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBHUFJPcGVyYW5kIGxlZnRPcGVyYW5kKHRoaXMs
IFdURk1vdmUobGVmdCkpOworICAgIEdQUk9wZXJhbmQgcmlnaHRPcGVyYW5kKHRoaXMsIFdURk1v
dmUocmlnaHQpKTsKKworICAgIEdQUlJlZyBsZWZ0R1BSID0gbGVmdE9wZXJhbmQuZ3ByKCk7Cisg
ICAgR1BSUmVnIHJpZ2h0R1BSID0gcmlnaHRPcGVyYW5kLmdwcigpOworCisgICAgbV9qaXQuYWRk
MzIobGVmdEdQUiwgcmlnaHRHUFIpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWls
Z3VuSklUOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlw
ZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklU
OjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkgLT4gQ29udHJvbERhdGEKK3sKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKSAt
PiBDb250cm9sRGF0YQoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6
YWRkTG9vcChUeXBlIHNpZ25hdHVyZSkgLT4gQ29udHJvbERhdGEKK3sKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
VHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZEVsc2UoQ29udHJvbERh
dGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRy
b2xEYXRhJikgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
UmFpbGd1bkpJVDo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gUmFpbGd1bkpJVDo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgc3RkOjpvcHRp
b25hbDxFeHByZXNzaW9uVHlwZT4gY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0
dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBSYWlsZ3VuSklUOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBW
ZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRz
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjplbmRCbG9jayhDb250
cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0
aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIFJhaWxndW5KSVQ6OmFkZENhbGxJbmRpcmVjdChjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9wdGlvbmFsPEV4
cHJlc3Npb25UeXBlPiYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBSYWlsZ3VuSklUOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIFJhaWxndW5KSVQ6OmR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3Qq
IGV4cHJlc3Npb25TdGFjaykKK3sKK30KKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQm
IGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90
IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5j
dGlvbj4oKTsKKworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQg
PSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21waWxhdGlvbkNvbnRl
eHQud2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsK
KworICAgIFJhaWxndW5KSVQgY29tcGlsZXIoaW5mbywgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNl
cHRpb24pOworICAgIEZ1bmN0aW9uUGFyc2VyPFJhaWxndW5KSVQ+IHBhcnNlcihjb21waWxlciwg
ZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CisKKyAgICByZXR1cm4gV1RG
TW92ZShyZXN1bHQpOworfQorCisKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21SYWlsZ3VuSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUmFpbGd1bkpJVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyNmRkMjQ1MTc3MDc5M2NjNDg0ZWI3NGU1OWI1
YjVjNTMxYmUzMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUmFpbGd1bkpJVC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCmluZGV4
IGVhNGE3NTk4ZmEwNDk1NDRmODc2ODRhNTBlM2NmY2I5MTMxMDhlYWYuLjg3NjY5ZWEwOGUzODY1
YzM5YWYxYWY2Mjk2YTgwMzlmZmVkNGViNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVZhbGlkYXRlLmNwcApAQCAtODMsOCArODMsNiBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAg
ICAgdHlwZWRlZiBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0OwogICAg
IHR5cGVkZWYgRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sRW50cnkgQ29udHJvbEVu
dHJ5OwogCi0gICAgc3RhdGljIGNvbnN0IEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9
IFZvaWQ7Ci0KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJ
TkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3Mp
IGNvbnN0CiAgICAgewpAQCAtMTAzLDYgKzEwMSw3IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICAv
LyBMb2NhbHMKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7Cisg
ICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB0ZWVMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHZhbHVlKTsKIAogICAgIC8vIEdsb2JhbHMKICAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CkBAIC0xMjgsNyArMTI3LDcgQEAgY2xhc3MgVmFsaWRhdGUgewogICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAog
ICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKENvbnRyb2xEYXRhJiB0b3BM
ZXZlbCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Ci0gICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgc3RkOjpvcHRp
b25hbDxFeHByZXNzaW9uVHlwZT4gY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKTsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChF
eHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJn
ZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4
cHJlc3Npb25TdGFjayk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhD
b250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7
CkBAIC0xMzgsOCArMTM3LDggQEAgY2xhc3MgVmFsaWRhdGUgewogICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKSB7IHJldHVybiB7IH07IH0KIAogICAgIC8vIENh
bGxzCi0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxl
ZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8
RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpOwogCiAg
ICAgYm9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1fbW9kdWxlLm1lbW9yeTsgfQog
CkBAIC0xOTIsNiArMTkxLDExIEBAIGF1dG8gVmFsaWRhdGU6OnNldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAorYXV0byBWYWxpZGF0ZTo6dGVlTG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiB2YWx1ZSkgLT4gUmVzdWx0Cit7CisgICAgcmV0dXJuIHNldExvY2FsKGluZGV4LCB2YWx1ZSk7
Cit9CisKIGF1dG8gVmFsaWRhdGU6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7CiAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihp
bmRleCA+PSBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSwgImdldF9nbG9iYWwgIiwgaW5kZXgsICIg
b2YgdW5rbm93biBnbG9iYWwsIGxpbWl0IGlzICIsIG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpKTsK
QEAgLTI3NSwxMCArMjc5LDEwIEBAIGF1dG8gVmFsaWRhdGU6OmNoZWNrQnJhbmNoVGFyZ2V0KENv
bnRyb2xUeXBlJiB0YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByCiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJnZXQs
IEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHN0YWNrKSAt
PiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBz
dGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiBzdGFjaykgLT4gUmVzdWx0CiB7CiAgICAgLy8gVm9pZCBtZWFucyB0aGlzIGlzIGFuIHVu
Y29uZGl0aW9uYWwgYnJhbmNoLgotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9u
ICE9IFZvaWQgJiYgY29uZGl0aW9uICE9IEkzMiwgImNvbmRpdGlvbmFsIGJyYW5jaCB3aXRoIG5v
bi1pMzIgY29uZGl0aW9uICIsIGNvbmRpdGlvbik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
Rihjb25kaXRpb24gJiYgY29uZGl0aW9uLnZhbHVlKCkgIT0gSTMyLCAiY29uZGl0aW9uYWwgYnJh
bmNoIHdpdGggbm9uLWkzMiBjb25kaXRpb24gIiwgY29uZGl0aW9uLnZhbHVlKCkpOwogICAgIHJl
dHVybiBjaGVja0JyYW5jaFRhcmdldCh0YXJnZXQsIHN0YWNrKTsKIH0KIApAQCAtMzIxLDE4ICsz
MjUsMTkgQEAgYXV0byBWYWxpZGF0ZTo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkm
IGVudHJ5KSAtPiBSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjph
ZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0
CithdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgc3RkOjpvcHRpb25hbDxF
eHByZXNzaW9uVHlwZT4mIHJlc3VsdCkgLT4gUmVzdWx0CiB7CiAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpICE9IGFyZ3Muc2l6ZSgpLCAiYXJpdHkg
bWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIsIGFyZ3Muc2l6ZSgpLCAiIGFyZ3VtZW50cywgZXhwZWN0
ZWQgIiwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RihhcmdzW2ldICE9IHNpZ25hdHVyZS5hcmd1bWVudChpKSwgImFyZ3VtZW50IHR5cGUgbWlzbWF0
Y2ggaW4gY2FsbCwgZ290ICIsIGFyZ3NbaV0sICIsIGV4cGVjdGVkICIsIHNpZ25hdHVyZS5hcmd1
bWVudChpKSk7CiAKLSAgICByZXN1bHQgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIGlm
IChzaWduYXR1cmUucmV0dXJuVHlwZSgpICE9IFZvaWQpCisgICAgICAgIHJlc3VsdCA9IHNpZ25h
dHVyZS5yZXR1cm5UeXBlKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6
YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQK
K2F1dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgc3RkOjpvcHRpb25hbDxFeHBy
ZXNzaW9uVHlwZT4mIHJlc3VsdCkgLT4gUmVzdWx0CiB7CiAgICAgY29uc3QgYXV0byBhcmd1bWVu
dENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKICAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKGFyZ3VtZW50Q291bnQgIT0gYXJncy5zaXplKCkgLSAxLCAiYXJpdHkgbWlzbWF0Y2gg
aW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZ3Muc2l6ZSgpIC0gMSwgIiBhcmd1bWVudHMsIGV4
cGVjdGVkICIsIGFyZ3VtZW50Q291bnQpOwpAQCAtMzQyLDcgKzM0Nyw4IEBAIGF1dG8gVmFsaWRh
dGU6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVj
dG9yPEV4cHJlc3NpCiAKICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3MubGFzdCgpICE9
IEkzMiwgIm5vbi1pMzIgY2FsbF9pbmRpcmVjdCBpbmRleCAiLCBhcmdzLmxhc3QoKSk7CiAKLSAg
ICByZXN1bHQgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIGlmIChzaWduYXR1cmUucmV0
dXJuVHlwZSgpICE9IFZvaWQpCisgICAgICAgIHJlc3VsdCA9IHNpZ25hdHVyZS5yZXR1cm5UeXBl
KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360063</attachid>
            <date>2019-01-24 17:42:13 -0800</date>
            <delta_ts>2019-01-25 14:23:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191802-20190124174213.patch</filename>
            <type>text/plain</type>
            <size>88011</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZTE0MGI3OTBiZjhlNzhjYTJmMjYzZjg4NmFlNWI3ZWUxM2U1ZWRjLi5mOTA0YjgxZWJjMWQ0Mzg4
YzZmNGNjYjJkMjUxZTZiYWI1ZWNiYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NSBAQAorMjAxOS0wMS0yNCAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93
c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gQWRkIHRlbXBsYXRlIEpJVAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgICogaml0L1JlZ2lzdGVyQmFuay5oOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaC4KKyAgICAgICAgKiB3
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6dGVlTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRC
cmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAg
ICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6YmluYXJ5Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmFyeUNhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNt
L1dhc21UZW1wbGF0ZUpJVC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1Zh
bHVlOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RhY2tWYWx1ZTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlN0YWNrVmFsdWU6OmxvY2F0aW9uIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U3RhY2tWYWx1ZTo6U3RhY2tWYWx1ZSk6CisgICAgICAgIChK
U0M6Oldhc206OlN0YWNrVmFsdWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6Oldhc206OlN0
YWNrVmFsdWU6OnN3YXApOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250cm9sRGF0YTo6Q29udHJv
bERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250cm9sRGF0YTo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvbnRyb2xEYXRhOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29udHJvbERhdGE6Omhhc05vblZvaWRTaWduYXR1cmUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb250cm9sRGF0YTo6dGFyZ2V0QmxvY2tGb3JCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb250cm9sRGF0YTo6Y29udmVydElmVG9CbG9jayk6CisgICAgICAgIChK
U0M6Oldhc206OkNvbnRyb2xEYXRhOjpyZXN1bHRGb3JCcmFuY2ggY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6c2V0UGFyc2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VGVtcGxhdGVKSVQ6OmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6dW5s
b2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGVtcGxhdGVKSVQ6OmFsbG9jYXRlR1BSKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGVtcGxhdGVKSVQ6OmZhaWwgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpHUFJPcGVyYW5kOjpHUFJPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6V2FzbTo6R1BS
T3BlcmFuZDo6fkdQUk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpXYXNtOjpHUFJPcGVyYW5kOjpn
cHIpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdGFja1ZhbHVlOjp+U3RhY2tWYWx1ZSk6CisgICAg
ICAgIChKU0M6Oldhc206OlRlbXBsYXRlSklUOjpUZW1wbGF0ZUpJVCk6CisgICAgICAgIChKU0M6
Oldhc206OlRlbXBsYXRlSklUOjphZGRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpU
ZW1wbGF0ZUpJVDo6YWRkTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6
YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6Z2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6c2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6dGVlTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpU
ZW1wbGF0ZUpJVDo6Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGVtcGxhdGVKSVQ6
OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OlRlbXBsYXRlSklUOjpsb2FkKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGVtcGxhdGVKSVQ6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6VGVtcGxhdGVKSVQ6OmFkZEdyb3dNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpUZW1w
bGF0ZUpJVDo6YWRkQ3VycmVudE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlRlbXBsYXRl
SklUOjphZGRPcCk6CisgICAgICAgIChKU0M6Oldhc206OlRlbXBsYXRlSklUOjphZGRTZWxlY3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6YWRkVG9wTGV2ZWwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNt
OjpUZW1wbGF0ZUpJVDo6YWRkTG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OlRlbXBsYXRlSklU
OjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OlRlbXBsYXRlSklUOjphZGRFbHNlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGVtcGxhdGVKSVQ6OmFkZEVsc2VUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGVtcGxhdGVKSVQ6OmFkZFJldHVybik6CisgICAgICAgIChKU0M6
Oldhc206OlRlbXBsYXRlSklUOjphZGRCcmFuY2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpUZW1w
bGF0ZUpJVDo6YWRkU3dpdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGVtcGxhdGVKSVQ6OmVu
ZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGVtcGxhdGVKSVQ6OmFkZEVuZFRvVW5yZWFj
aGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6YWRkQ2FsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OlRlbXBsYXRlSklUOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpUZW1wbGF0ZUpJVDo6YWRkVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUZW1wbGF0ZUpJVDo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29t
cGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtVGVtcGxhdGVKSVQuaDogQWRkZWQuCisgICAgICAg
ICogd2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
dGVlTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpWYWxpZGF0ZTo6YWRkQ2FsbEluZGlyZWN0KToKKwogMjAxOS0wMS0yNCAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IENQVSBV
c2FnZSBUaW1lbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0MGFkYTJhMmY1
MzRlYzg2ZDY5MWE2ZmIzYjYzNmNhYmUyMTViNzc5Li40NzgxNTJhMDgwYzkxMDBkZDBmYTIzNThj
YWYwMTkyOGQwYmM5ZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA4MSw3
ICsxMDgxLDYgQEAKIAkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4g
Q29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJNURCQjE1MjUx
MzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUg
LyogbWluaWRvbS5qcyAqLzsgfTsKIAkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0
ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0JCTVFMTU4QUMzNTBCQzRFQzc4NzdEQzBG
NCAvKiBPYmplY3RQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RDBDQzlFMUNCQzE0OUFCOEY0MDM0MzQgLyogT2JqZWN0UHJv
dG90eXBlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTYyM0EzN0VDMUI4N0E3QzAwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjIzQTM3RUIxQjg3QTdC
RDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjI3NjczMjQxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc2NzMy
MjFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVu
Y3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjJEMkQzOEUxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIyNCw3ICsx
MjIzLDcgQEAKIAkJODZFQzlEQzgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURCODEzMjhERjgy
MDAyQjJBRDcgLyogREZHR3JhcGguaCAqLzsgfTsKIAkJODZFQzlEQ0MxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAq
LzsgfTsKIAkJODZFQzlERDAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMwMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi87IH07Ci0JCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3Rl
ckJhbmsuaCAqLzsgfTsKKwkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIFJlZ2lzdGVyQmFu
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlE
QzExMzI4REY4MjAwMkIyQUQ3IC8qIFJlZ2lzdGVyQmFuay5oICovOyB9OwogCQk4NkVDOUREMzEz
MjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBE
RkdTcGVjdWxhdGl2ZUpJVC5oICovOyB9OwogCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyog
REZHTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLzsgfTsKIAkJODZFQ0EzRkEx
MzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdT
Y29yZUJvYXJkLmggKi87IH07CkBAIC0xNzQ3LDYgKzE3NDYsNyBAQAogCQlFMzVDQTE1NjFEQkMz
QTVGMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9N
SklUQWJzdHJhY3RIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTM1RTAzNjAxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM1RTAzNUUxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bk9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzNkNDOTQ3MjA4NjMxNEYwMDUxRkZENiAvKiBXYXNtQ3JlYXRpb25Nb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZDQzk0NjIwODYzMTRG
MDA1MUZGRDYgLyogV2FzbUNyZWF0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNkQ3REU2MjFGQUEwOTEwMEVERjVBQiAvKiBXYXNt
VGVtcGxhdGVKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNkQ3REU0MjFGQUEwOTEwMEVERjVBQiAvKiBXYXNtVGVtcGxhdGVKSVQuaCAqLzsgfTsK
IAkJRTM3OTRFNzYxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFuYWx5emVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzc5NEU3NDFCNzdFQjk3MDA1
NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMzkzQUREODFGRTcwMkQwMDAyMkQ2ODEgLyogV2Vha01hcElt
cGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzkzQURENzFGRTcwMkNDMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVzLmggKi87IH07
CiAJCUUzOUQ0NUY1MUQzOTAwNTYwMEIzQjM3NyAvKiBJbnRlcnByZXRlcklubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOUQ5RDg0MUQzOTAw
MDYwMDY2NzI4MiAvKiBJbnRlcnByZXRlcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzY2Niw3ICszNjY2LDYgQEAKIAkJNkEzOENG
QTgxRTMyQjU4QjAwNjAyMDZGIC8qIEFzeW5jU3RhY2tUcmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBc3luY1N0YWNrVHJhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJFdmFsRW5hYmxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkE5M0M5NTkwNDg0QzVCQUQ5MzE2RUEg
LyogSlNTY3JpcHRGZXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U2NyaXB0RmV0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RDBDQzlFMUNC
QzE0OUFCOEY0MDM0MzQgLyogT2JqZWN0UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPYmplY3RQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9w
ZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXRlcmF0
b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAxMTNENEEx
QThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzAxM0NBODkxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTTWljcm90YXNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWljcm90YXNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4OTgsNyArMzg5Nyw3IEBACiAJCTg2RUM5REJD
MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdKSVRDb21waWxlci5oOyBwYXRoID0gZGZnL0RGR0pJVENvbXBpbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUM5REJGMTMyOERGODIwMDJCMkFE
NyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR09wZXJhdGlvbnMuY3BwOyBwYXRoID0gZGZnL0RGR09wZXJhdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDOURDMDEzMjhERjgyMDAyQjJBRDcgLyogREZH
T3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcGVyYXRp
b25zLmg7IHBhdGggPSBkZmcvREZHT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVyQmFuay5oOyBwYXRoID0g
ZGZnL0RGR1JlZ2lzdGVyQmFuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkVD
OURDMTEzMjhERjgyMDAyQjJBRDcgLyogUmVnaXN0ZXJCYW5rLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFJlZ2lzdGVyQmFuay5oOyBwYXRoID0gaml0L1JlZ2lzdGVyQmFuay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDOURDMjEzMjhERjgyMDAyQjJBRDcg
LyogREZHU3BlY3VsYXRpdmVKSVQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHU3BlY3VsYXRpdmVKSVQuY3BwOyBwYXRoID0gZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFQzlEQzMxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1NwZWN1bGF0aXZlSklULmg7IHBhdGggPSBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3IC8q
IERGR05vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZS5oOyBw
YXRoID0gZGZnL0RGR05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2NzMs
NiArNDY3Miw4IEBACiAJCUUzNUUwMzVFMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNUUwMzYxMUI3QUI0ODUwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25P
YmplY3QuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzNkNDOTQ2MjA4NjMxNEYwMDUxRkZENiAvKiBXYXNtQ3JlYXRpb25Nb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21DcmVhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTM2RDdERTMyMUZBQTA5MTAwRURGNUFCIC8qIFdhc21UZW1wbGF0
ZUpJVC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVGVtcGxh
dGVKSVQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzZEN0RFNDIxRkFBMDkx
MDBFREY1QUIgLyogV2FzbVRlbXBsYXRlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21UZW1wbGF0ZUpJVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
Mzc5NEU3MzFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kdWxlQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMzc5NEU3NDFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5h
bHl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlQW5hbHl6ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4MEE3NkIxRENENzE5NTAwMEY4OUU2
IC8qIE1hY3JvQXNzZW1ibGVySGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyb0Fzc2VtYmxlckhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU3MTksNiArNTcyMCw3IEBACiAJCQkJNjU0MEM3OUYxQjgyRDlDRTAwMEY2Qjc5IC8qIFJl
Z2lzdGVyQXRPZmZzZXQuaCAqLywKIAkJCQk2NTQwQzc5QzFCODJEOTlEMDAwRjZCNzkgLyogUmVn
aXN0ZXJBdE9mZnNldExpc3QuY3BwICovLAogCQkJCTY1NDBDNzlEMUI4MkQ5OUQwMDBGNkI3OSAv
KiBSZWdpc3RlckF0T2Zmc2V0TGlzdC5oICovLAorCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFE
NyAvKiBSZWdpc3RlckJhbmsuaCAqLywKIAkJCQk2MjNBMzdFQjFCODdBN0JEMDA3NTQyMDkgLyog
UmVnaXN0ZXJNYXAuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0
ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNl
dC5oICovLApAQCAtNjQ3MSw2ICs2NDczLDggQEAKIAkJCQlFM0EwNTMxNjIxMzQyQjY2MDAyMkVD
MTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBC
Q0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAv
KiBXYXNtVGFibGUuaCAqLywKKwkJCQlFMzZEN0RFMzIxRkFBMDkxMDBFREY1QUIgLyogV2FzbVRl
bXBsYXRlSklULmNwcCAqLywKKwkJCQlFMzZEN0RFNDIxRkFBMDkxMDBFREY1QUIgLyogV2FzbVRl
bXBsYXRlSklULmggKi8sCiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVu
a3MuY3BwICovLAogCQkJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmgg
Ki8sCiAJCQkJNTNFOUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICov
LApAQCAtNzUwMSw3ICs3NTA1LDYgQEAKIAkJCQkwRkIxNzY1RjE5NkI4RjlFMDA5MTA1MkEgLyog
REZHUHVyZVZhbHVlLmggKi8sCiAJCQkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLywKIAkJCQkwRjNBMUJGODFBOUVDQjdEMDAwREUwMUEg
LyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCAqLywKLQkJCQk4NkVDOURDMTEzMjhERjgyMDAy
QjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCiAJCQkJNzlGQzhBMDcxRTMyRTlGMDAwRDg4
RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCAqLywKIAkJCQk3OTgwQzE2QTFFM0E5NDBF
MDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAgKi8sCiAJCQkJNzk4MEMx
NkIxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCAqLywKQEAg
LTg4MjQsNyArODgyNyw2IEBACiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3
RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OUZDOEEwODFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVj
dHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk4MEMxNkQxRTNBOTQwRTAwQjcxNjE1IC8qIERG
R1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThB
NjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtOTU0Nyw2
ICs5NTQ5LDcgQEAKIAkJCQlCQzE4QzQ1RDBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnaXN0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzMjhDNkM5MURBNDMyRjkwMEQyNTVGRCAvKiBSZWdpc3RlckF0
T2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4QzZDODFEQTQzMDYxMDBEMjU1RkQgLyog
UmVnaXN0ZXJBdE9mZnNldExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RUM5REQxMTMyOERG
ODIwMDJCMkFENyAvKiBSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzJC
MEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdpc3RlcklELmggaW4gSGVhZGVycyAqLywKIAkJCQk2MjNB
MzdFQzFCODdBN0MwMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8s
CkBAIC05NzYwLDYgKzk3NjMsNyBAQAogCQkJCTRCQUEwN0NFQjgxRjQ5QTI5NkUwMjIwMyAvKiBX
YXNtU2lnbmF0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNBMDUzMUEyMTM0MkI2
ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
NUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUUzNkQ3REU2MjFGQUEwOTEwMEVERjVBQiAvKiBXYXNtVGVtcGxhdGVKSVQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUyNTBEMkQyMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1M0U5RTBBRjFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFQzFGNzVBRDdDMDAwQkNBQUYgLyogV2FzbVRv
SlMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDI1OGQ0
OWNlZDFlMmQ1OWRkYmRmMTQ3ZjRhY2IxODk0OTM4ZGJhMTQuLjgwM2IwMjg1Y2JmMDE5YTRlMzBh
NDRiZTZlZjQyYzA2MDMxOGI5ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTk5
OCw2ICs5OTgsNyBAQCB3YXNtL1dhc21TaWduYXR1cmUuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdQ
YXJzZXIuY3BwCiB3YXNtL1dhc21UYWJsZS5jcHAKIHdhc20vV2FzbVRhYmxlLmgKK3dhc20vV2Fz
bVRlbXBsYXRlSklULmNwcAogd2FzbS9XYXNtVGh1bmtzLmNwcAogd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCiB3YXNtL1dhc21Xb3JrbGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKaW5kZXggZmNiZDUzYjgyYjViYmM0MmI1OTFhZjcxZWJmZDk5ZTg1
Zjg1Mzc1Yi4uNjViMTU0Yzc1OWZlNmVjZGRiZGJhMmFjZGVhMGI3N2YyZmJhM2U2YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTM1LDcgKzM1
LDYgQEAKICNpbmNsdWRlICJERkdKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0
LmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFu
ay5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHU3Bl
Y3VsYXRpdmVKSVQuaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKQEAgLTQzLDYgKzQyLDcgQEAK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlJl
Z2lzdGVyQmFuay5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAi
VGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVk0uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
MDRmM2NhZGIwNGI3NDVkMmM1NzBlNThhZWZjY2M5ODNlMmM0ZGQ5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVnaXN0ZXJCYW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAi
RlBSSW5mby5oIgotI2luY2x1ZGUgIkdQUkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewotCi0vLyA9PT0gUmVnaXN0ZXJCYW5rID09PQotLy8KLS8vIFRoaXMgY2xhc3Mg
aXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIEdQUiBhbmQgRlBSIHJlZ2lzdGVyIGJhbmtzLgotLy8g
QWxsIHJlZ2lzdGVycyBoYXZlIHR3byBwaWVjZXMgb2Ygc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRo
ZW06Ci0vLyBhIGxvY2sgY291bnQgKHVzZWQgdG8gaW5kaWNhdGUgdGhpcyByZWdpc3RlciBpcyBh
bHJlYWR5IGluIHVzZQotLy8gaW4gY29kZSBnZW5lcmF0aW9uIG9mIHRoZSBjdXJyZW50IG5vZGUs
IGFuZCBjYW5ub3QgYmUgc3BpbGxlZCBvcgotLy8gYWxsb2NhdGVkIGFzIGEgdGVtcG9yYXJ5KSwg
YW5kIFZpcnR1YWxSZWdpc3RlciAnbmFtZScsIHJlY29yZGluZwotLy8gd2hpY2ggdmFsdWUgKGlm
IGFueSkgYSBtYWNoaW5lIHJlZ2lzdGVyIGN1cnJlbnRseSBob2xkcy4KLS8vIEVpdGhlciBvciBi
b3RoIG9mIHRoZXNlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBtYXkgYmUgdmFsaWQgZm9yIGEKLS8v
IGdpdmVuIHJlZ2lzdGVyLiBBIHJlZ2lzdGVyIG1heSBiZToKLS8vCi0vLyAgLSB1bmxvY2tlZCwg
YW5kIHVubmFtZWQ6IEF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KLS8vICAtIGxvY2tlZCwgYnV0
IHVubmFtZWQ6ICAgQWxyZWFkeSBhbGxvY2F0ZWQgYXMgYSB0ZW1wb3Jhcnkgb3IKLS8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGZvciB0aGUgY3VycmVudCBub2RlLgotLy8gIC0g
dW5sb2NrZWQsIGJ1dCBuYW1lZDogICBDb250YWlucyB0aGUgcmVzdWx0IG9mIGEgcHJpb3Igb3Bl
cmF0aW9uLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgeWV0IGluIHVzZSBmb3Ig
dGhpcyBub2RlLAotLy8gIC0gbG9ja2VkLCBidXQgbmFtZWQ6ICAgICBDb250YWlucyB0aGUgcmVz
dWx0IG9mIGEgcHJpb3Igb3BlcmF0aW9uLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBh
bHJlYWR5IGFsbG9jYXRlZCBhcyBhIG9wZXJhbmQgdG8gdGhlCi0vLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnQgb3BlcmF0aW9uLgotLy8KLS8vIEZvciBldmVyeSBuYW1lZCByZWdp
c3RlciB3ZSBhbHNvIHJlY29yZCBhIGhpbnQgdmFsdWUgaW5kaWNhdGluZwotLy8gdGhlIG9yZGVy
IGluIHdoaWNoIHJlZ2lzdGVycyBzaG91bGQgYmUgc2VsZWN0ZWQgdG8gYmUgc3BpbGxlZDsKLS8v
IHJlZ2lzdGVycyB0aGF0IGNhbiBiZSBtb3JlIGNoZWFwbHkgc3BpbGxlZCBhbmQvb3IgZmlsbGVk
IHNob3VsZAotLy8gYmUgc2VsZWN0ZWQgZmlyc3QuCi0vLwotLy8gTG9ja2luZyByZWdpc3RlciBp
cyBhIHN0cm9uZyByZXRlbnRpb24gbWVjaGFuaXNtOyBhIGxvY2tlZCByZWdpc3RlcgotLy8gd2ls
bCBuZXZlciBiZSByZWFsbG9jYXRlZCAodGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgb3BlcmFu
ZHMgdG8KLS8vIHRoZSBjdXJyZW50IG5vZGUgYXJlIGluIHJlZ2lzdGVycykuIE5hbWluZywgY29u
dmVyc2VseSwgaW4gYSB3ZWFrCi0vLyByZXRlbnRpb24gbWVjaGFuaXNtIC0gYWxsb2NhdGluZyBh
IHJlZ2lzdGVyIG1heSBmb3JjZSBhIG5hbWVkIHZhbHVlCi0vLyB0byBiZSBzcGlsbGVkLgotLy8K
LS8vIEFsbCBuYW1lZCB2YWx1ZXMgbXVzdCBiZSBnaXZlbiBhIGhpbnQgdGhhdCBpcyBncmVhdGVy
IHRoYW4gTWluIGFuZAotLy8gbGVzcyB0aGFuIE1heC4KLXRlbXBsYXRlPGNsYXNzIEJhbmtJbmZv
PgotY2xhc3MgUmVnaXN0ZXJCYW5rIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEJhbmtJbmZvOjpS
ZWdpc3RlclR5cGUgUmVnSUQ7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBOVU1fUkVHUyA9IEJh
bmtJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsKLQotICAgIHR5cGVkZWYgdWludDMyX3QgU3BpbGxI
aW50OwotICAgIHN0YXRpYyBjb25zdCBTcGlsbEhpbnQgU3BpbGxIaW50SW52YWxpZCA9IDB4ZmZm
ZmZmZmY7Ci0KLXB1YmxpYzoKLSAgICBSZWdpc3RlckJhbmsoKQotICAgIHsKLSAgICB9Ci0KLSAg
ICAvLyBBdHRlbXB0IHRvIGFsbG9jYXRlIGEgcmVnaXN0ZXIgLSB0aGlzIGZ1bmN0aW9uIGZpbmRz
IGFuIHVubG9ja2VkCi0gICAgLy8gcmVnaXN0ZXIsIGxvY2tzIGl0LCBhbmQgcmV0dXJucyBpdC4g
SWYgbm9uZSBjYW4gYmUgZm91bmQsIHRoaXMKLSAgICAvLyByZXR1cm5zIC0xIChJbnZhbGlkR1BS
UmVnIG9yIEludmFsaWRGUFJSZWcpLgotICAgIFJlZ0lEIHRyeUFsbG9jYXRlKCkKLSAgICB7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBpZ25vcmVkID0gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgTlVNX1JFR1M7ICsraSkgewot
ICAgICAgICAgICAgaWYgKCFtX2RhdGFbaV0ubG9ja0NvdW50ICYmICFtX2RhdGFbaV0ubmFtZS5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW50ZXJuYWwoaSwgaWdu
b3JlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiAoUmVnSUQpLTE7Ci0g
ICAgfQotCi0gICAgLy8gQWxsb2NhdGUgYSByZWdpc3RlciAtIHRoaXMgZnVuY3Rpb24gZmluZHMg
YW4gdW5sb2NrZWQgcmVnaXN0ZXIsCi0gICAgLy8gbG9ja3MgaXQsIGFuZCByZXR1cm5zIGl0LiBJ
ZiBhbnkgbmFtZWQgcmVnaXN0ZXJzIGV4aXN0LCBvbmUKLSAgICAvLyBvZiB0aGVzZSBzaG91bGQg
YmUgc2VsZWN0ZWQgdG8gYmUgYWxsb2NhdGVkLiBJZiBhbGwgdW5sb2NrZWQKLSAgICAvLyByZWdp
c3RlcnMgYXJlIG5hbWVkLCB0aGVuIG9uZSBvZiB0aGUgbmFtZWQgcmVnaXN0ZXJzIHdpbGwgbmVl
ZAotICAgIC8vIHRvIGJlIHNwaWxsZWQuIEluIHRoaXMgY2FzZSB0aGUgcmVnaXN0ZXIgc2VsZWN0
ZWQgdG8gYmUgc3BpbGxlZAotICAgIC8vIHdpbGwgYmUgb25lIG9mIHRoZSByZWdpc3RlcnMgdGhh
dCBoYXMgdGhlIGxvd2VzdCAnc3BpbGxPcmRlcicKLSAgICAvLyBjb3N0IGFzc29jaWF0ZWQgd2l0
aCBpdC4KLSAgICAvLwotICAgIC8vIFRoaXMgbWV0aG9kIHNlbGVjdCB0aGUgcmVnaXN0ZXIgdG8g
YmUgYWxsb2NhdGVkLCBhbmQgY2FsbHMgdGhlCi0gICAgLy8gcHJpdmF0ZSAnYWxsb2NhdGVJbnRl
cm5hbCcgbWV0aG9kIHRvIHVwZGF0ZSBpbnRlcm5hbCBkYXRhCi0gICAgLy8gc3RydWN0dXJlcyBh
Y2NvcmRpbmdseS4KLSAgICBSZWdJRCBhbGxvY2F0ZShWaXJ0dWFsUmVnaXN0ZXIgJnNwaWxsTWUp
Ci0gICAgewotICAgICAgICB1aW50MzJfdCBjdXJyZW50TG93ZXN0ID0gTlVNX1JFR1M7Ci0gICAg
ICAgIFNwaWxsSGludCBjdXJyZW50U3BpbGxPcmRlciA9IFNwaWxsSGludEludmFsaWQ7Ci0KLSAg
ICAgICAgLy8gVGhpcyBsb29wIGlzIGJyb2tlbiBpbnRvIHR3byBoYWx2ZXMsIGxvb3BpbmcgZnJv
bSB0aGUgbGFzdCBhbGxvY2F0ZWQKLSAgICAgICAgLy8gcmVnaXN0ZXIgKHRoZSByZWdpc3RlciBy
ZXR1cm5lZCBsYXN0IHRpbWUgdGhpcyBtZXRob2Qgd2FzIGNhbGxlZCkgdG8KLSAgICAgICAgLy8g
dGhlIG1heGltdW0gcmVnaXN0ZXIgdmFsdWUsIHRoZW4gZnJvbSAwIHRvIHRoZSBsYXN0IGFsbG9j
YXRlZC4KLSAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgc2ltcGxlIHJvdW5kLXJvYmluIGxp
a2UgYXBwcm9hY2ggdG8gdHJ5IHRvIHJlZHVjZQotICAgICAgICAvLyB0aHJhc2gsIGFuZCBtaW5p
bWl6ZSB0aW1lIHNwZW50IHNjYW5uaW5nIGxvY2tlZCByZWdpc3RlcnMgaW4gYWxsb2NhdGlvbi4K
LSAgICAgICAgLy8gSWYgYSB1bmxvY2tlZCBhbmQgdW5uYW1lZCByZWdpc3RlciBpcyBmb3VuZCBy
ZXR1cm4gaXQgaW1tZWRpYXRlbHkuCi0gICAgICAgIC8vIE90aGVyd2lzZSwgZmluZCB0aGUgZmly
c3QgdW5sb2NrZWQgcmVnaXN0ZXIgd2l0aCB0aGUgbG93ZXN0IHNwaWxsT3JkZXIuCi0gICAgICAg
IGZvciAodWludDMyX3QgaSA9IDAgOyBpIDwgTlVNX1JFR1M7ICsraSkgewotICAgICAgICAgICAg
Ly8gKDEpIElmIHRoZSBjdXJyZW50IHJlZ2lzdGVyIGlzIGxvY2tlZCwgaXQgaXMgbm90IGEgY2Fu
ZGlkYXRlLgotICAgICAgICAgICAgaWYgKG1fZGF0YVtpXS5sb2NrQ291bnQpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyAoMikgSWYgdGhlIGN1cnJlbnQgcmVnaXN0
ZXIncyBzcGlsbCBvcmRlciBpcyAwLCBwaWNrIHRoaXMhIOKAkyB1bmFzc2lnbmVkIHJlZ2lzdGVy
cyBoYXZlIHNwaWxsIG9yZGVyIDAuCi0gICAgICAgICAgICBTcGlsbEhpbnQgc3BpbGxPcmRlciA9
IG1fZGF0YVtpXS5zcGlsbE9yZGVyOwotICAgICAgICAgICAgaWYgKHNwaWxsT3JkZXIgPT0gU3Bp
bGxIaW50SW52YWxpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChp
LCBzcGlsbE1lKTsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgcmVnaXN0ZXIgaXMgYmV0dGVyICho
YXMgYSBsb3dlciBzcGlsbCBvcmRlciB2YWx1ZSkgdGhhbiBhbnkgcHJpb3IKLSAgICAgICAgICAg
IC8vIGNhbmRpZGF0ZSwgdGhlbiByZWNvcmQgaXQuCi0gICAgICAgICAgICBpZiAoc3BpbGxPcmRl
ciA8IGN1cnJlbnRTcGlsbE9yZGVyKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFNwaWxsT3Jk
ZXIgPSBzcGlsbE9yZGVyOwotICAgICAgICAgICAgICAgIGN1cnJlbnRMb3dlc3QgPSBpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGVhZGxvY2sgY2hlY2sgLSB0aGlz
IGNvdWxkIG9ubHkgb2NjdXIgaXMgYWxsIHJlZ2lzdGVycyBhcmUgbG9ja2VkIQotICAgICAgICBB
U1NFUlQoY3VycmVudExvd2VzdCAhPSBOVU1fUkVHUyAmJiBjdXJyZW50U3BpbGxPcmRlciAhPSBT
cGlsbEhpbnRJbnZhbGlkKTsKLSAgICAgICAgLy8gVGhlcmUgd2VyZSBubyBhdmFpbGFibGUgcmVn
aXN0ZXJzOyBjdXJyZW50TG93ZXN0IHdpbGwgbmVlZCB0byBiZSBzcGlsbGVkLgotICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChjdXJyZW50TG93ZXN0LCBzcGlsbE1lKTsKLSAgICB9Ci0K
LSAgICB1aW50MzJfdCBsb2NrZWRDb3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICB1aW50MzJf
dCBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDAgOyBpIDwgTlVNX1JFR1M7
ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZGF0YVtpXS5sb2NrQ291bnQpCi0gICAgICAgICAg
ICAgICAgKytjb3VudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQot
Ci0gICAgLy8gQWxsb2NhdGVzIHRoZSBnaXZlbiByZWdpc3RlciwgZXZlbiBpZiB0aGlzIHdpbGwg
Zm9yY2UgYSBzcGlsbC4KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxsb2NhdGVTcGVjaWZpYyhSZWdJ
RCByZWcpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEJhbmtJbmZvOjp0b0luZGV4
KHJlZyk7Ci0KLSAgICAgICAgKyttX2RhdGFbaW5kZXhdLmxvY2tDb3VudDsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG5hbWUgPSBuYW1lQXRJbmRleChpbmRleCk7Ci0gICAgICAgIGlmIChuYW1l
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJlbGVhc2VBdEluZGV4KGluZGV4KTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAgIC8vIHJldGFpbi9yZWxlYXNlIC0g
dGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBhc3NvY2lhdGUvZGlzYXNzb2NpYXRlIG5hbWVzCi0g
ICAgLy8gd2l0aCB2YWx1ZXMgaW4gcmVnaXN0ZXJzLiByZXRhaW4gc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIG9uIGxvY2tlZCByZWdpc3RlcnMuCi0gICAgdm9pZCByZXRhaW4oUmVnSUQgcmVnLCBWaXJ0
dWFsUmVnaXN0ZXIgbmFtZSwgU3BpbGxIaW50IHNwaWxsT3JkZXIpCi0gICAgewotICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IEJhbmtJbmZvOjp0b0luZGV4KHJlZyk7Ci0KLSAgICAgICAgLy8gU3Bp
bGxIaW50IG11c3QgYmUgdmFsaWQuCi0gICAgICAgIEFTU0VSVChzcGlsbE9yZGVyICE9IFNwaWxs
SGludEludmFsaWQpOwotICAgICAgICAvLyAnaW5kZXgnIG11c3QgYmUgYSB2YWxpZCwgbG9ja2Vk
IHJlZ2lzdGVyLgotICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7Ci0gICAgICAgIEFT
U0VSVChtX2RhdGFbaW5kZXhdLmxvY2tDb3VudCk7Ci0gICAgICAgIC8vICdpbmRleCcgc2hvdWxk
IG5vdCBjdXJyZW50bHkgYmUgbmFtZWQsIHRoZSBuZXcgbmFtZSBtdXN0IGJlIHZhbGlkLgotICAg
ICAgICBBU1NFUlQoIW1fZGF0YVtpbmRleF0ubmFtZS5pc1ZhbGlkKCkpOwotICAgICAgICBBU1NF
UlQobmFtZS5pc1ZhbGlkKCkpOwotICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBub3QgY3VycmVu
dGx5IGhhdmUgYSBzcGlsbE9yZGVyLgotICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5zcGls
bE9yZGVyID09IFNwaWxsSGludEludmFsaWQpOwotCi0gICAgICAgIG1fZGF0YVtpbmRleF0ubmFt
ZSA9IG5hbWU7Ci0gICAgICAgIG1fZGF0YVtpbmRleF0uc3BpbGxPcmRlciA9IHNwaWxsT3JkZXI7
Ci0gICAgfQotICAgIHZvaWQgcmVsZWFzZShSZWdJRCByZWcpCi0gICAgewotICAgICAgICByZWxl
YXNlQXRJbmRleChCYW5rSW5mbzo6dG9JbmRleChyZWcpKTsKLSAgICB9Ci0KLSAgICAvLyBsb2Nr
L3VubG9jayByZWdpc3RlciwgZW5zdXJlcyB0aGF0IHRoZXkgYXJlIG5vdCBzcGlsbGVkLgotICAg
IHZvaWQgbG9jayhSZWdJRCByZWcpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEJh
bmtJbmZvOjp0b0luZGV4KHJlZyk7Ci0KLSAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1Mp
OwotICAgICAgICArK21fZGF0YVtpbmRleF0ubG9ja0NvdW50OwotICAgICAgICBBU1NFUlQobV9k
YXRhW2luZGV4XS5sb2NrQ291bnQpOwotICAgIH0KLSAgICB2b2lkIHVubG9jayhSZWdJRCByZWcp
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEJhbmtJbmZvOjp0b0luZGV4KHJlZyk7
Ci0KLSAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOwotICAgICAgICBBU1NFUlQobV9k
YXRhW2luZGV4XS5sb2NrQ291bnQpOwotICAgICAgICAtLW1fZGF0YVtpbmRleF0ubG9ja0NvdW50
OwotICAgIH0KLSAgICBib29sIGlzTG9ja2VkKFJlZ0lEIHJlZykgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpc0xvY2tlZEF0SW5kZXgoQmFua0luZm86OnRvSW5kZXgocmVnKSk7Ci0gICAg
fQotCi0gICAgLy8gR2V0IHRoZSBuYW1lIChWaXJ0dWFsUmVnaXN0ZXIpIGFzc29jaWF0ZWQgd2l0
aCB0aGUKLSAgICAvLyBnaXZlbiByZWdpc3RlciAob3IgZGVmYXVsdCBWaXJ0dWFsUmVnaXN0ZXIo
KSBmb3Igbm9uZSkuCi0gICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUoUmVnSUQgcmVnKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWVBdEluZGV4KEJhbmtJbmZvOjp0b0luZGV4KHJlZykp
OwotICAgIH0KLSAgICAKLSAgICBib29sIGlzSW5Vc2UoUmVnSUQgcmVnKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGlzTG9ja2VkKHJlZykgfHwgbmFtZShyZWcpLmlzVmFsaWQoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKCkKLSAgICB7Ci0gICAgICAgIC8vIEZvciBlYWNoIHJl
Z2lzdGVyLCBwcmludCB0aGUgVmlydHVhbFJlZ2lzdGVyICduYW1lJy4KLSAgICAgICAgZm9yICh1
aW50MzJfdCBpID0wOyBpIDwgTlVNX1JFR1M7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZGF0
YVtpXS5uYW1lLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiWyUwMmRdIiwg
bV9kYXRhW2ldLm5hbWUub2Zmc2V0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCJbLS1dIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YUxvZ0YoIlxuIik7
Ci0gICAgfQotCi0gICAgY2xhc3MgaXRlcmF0b3IgewotICAgIGZyaWVuZCBjbGFzcyBSZWdpc3Rl
ckJhbms8QmFua0luZm8+OwotICAgIHB1YmxpYzoKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5h
bWUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9iYW5rLT5uYW1lQXRJ
bmRleChtX2luZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNMb2NrZWQoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9iYW5rLT5pc0xvY2tlZEF0SW5kZXgo
bV9pbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlbGVhc2UoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2JhbmstPnJlbGVhc2VBdEluZGV4KG1faW5kZXgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgUmVnSUQgcmVnSUQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gQmFua0luZm86OnRvUmVnaXN0ZXIobV9pbmRleCk7Ci0gICAgICAgIH0KLQot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgY29uc3QgY2hhciogZGVidWdOYW1lKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjpkZWJ1Z05hbWUocmVnSUQoKSk7
Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgKyttX2luZGV4OwotICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fYmFuayA9PSBvdGhl
ci5tX2JhbmspOwotICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggIT0gb3RoZXIubV9pbmRleDsK
LSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIGl0ZXJhdG9yKFJlZ2lzdGVyQmFuazxCYW5rSW5mbz4qIGJhbmssIHVuc2lnbmVkIGlu
ZGV4KQotICAgICAgICAgICAgOiBtX2JhbmsoYmFuaykKLSAgICAgICAgICAgICwgbV9pbmRleChp
bmRleCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJCYW5rPEJhbmtJ
bmZvPiogbV9iYW5rOwotICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgIH07Ci0KLSAgICBp
dGVyYXRvciBiZWdpbigpCi0gICAgewotICAgICAgICByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7
Ci0gICAgfQotCi0gICAgaXRlcmF0b3IgZW5kKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpdGVy
YXRvcih0aGlzLCBOVU1fUkVHUyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgaXNMb2Nr
ZWRBdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgTlVNX1JFR1MpOwotICAgICAgICByZXR1cm4gbV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7
Ci0gICAgfQotCi0gICAgVmlydHVhbFJlZ2lzdGVyIG5hbWVBdEluZGV4KHVuc2lnbmVkIGluZGV4
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOwotICAgICAg
ICByZXR1cm4gbV9kYXRhW2luZGV4XS5uYW1lOwotICAgIH0KLQotICAgIHZvaWQgcmVsZWFzZUF0
SW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICAvLyAnaW5kZXgnIG11c3QgYmUg
YSB2YWxpZCByZWdpc3Rlci4KLSAgICAgICAgQVNTRVJUKGluZGV4IDwgTlVNX1JFR1MpOwotICAg
ICAgICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkgYmUgbmFtZWQuCi0gICAgICAgIEFTU0VS
VChtX2RhdGFbaW5kZXhdLm5hbWUuaXNWYWxpZCgpKTsKLSAgICAgICAgLy8gJ2luZGV4JyBzaG91
bGQgY3VycmVudGx5IGhhdmUgYSB2YWxpZCBzcGlsbCBvcmRlci4KLSAgICAgICAgQVNTRVJUKG1f
ZGF0YVtpbmRleF0uc3BpbGxPcmRlciAhPSBTcGlsbEhpbnRJbnZhbGlkKTsKLQotICAgICAgICBt
X2RhdGFbaW5kZXhdLm5hbWUgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgbV9kYXRhW2lu
ZGV4XS5zcGlsbE9yZGVyID0gU3BpbGxIaW50SW52YWxpZDsKLSAgICB9Ci0KLSAgICAvLyBVc2Vk
IGJ5ICdhbGxvY2F0ZScsIGFib3ZlLCB0byB1cGRhdGUgaW5mb3JhbXRpb24gaW4gdGhlIG1hcC4K
LSAgICBSZWdJRCBhbGxvY2F0ZUludGVybmFsKHVpbnQzMl90IGksIFZpcnR1YWxSZWdpc3RlciAm
c3BpbGxNZSkKLSAgICB7Ci0gICAgICAgIC8vICdpJyBtdXN0IGJlIGEgdmFsaWQsIHVubG9ja2Vk
IHJlZ2lzdGVyLgotICAgICAgICBBU1NFUlQoaSA8IE5VTV9SRUdTICYmICFtX2RhdGFbaV0ubG9j
a0NvdW50KTsKLQotICAgICAgICAvLyBSZXR1cm4gdGhlIFZpcnR1YWxSZWdpc3RlciBvZiB0aGUg
bmFtZWQgdmFsdWUgY3VycmVudGx5IHN0b3JlZCBpbgotICAgICAgICAvLyB0aGUgcmVnaXN0ZXIg
YmVpbmcgcmV0dXJuZWQgLSBvciBkZWZhdWx0IFZpcnR1YWxSZWdpc3RlcigpIGlmIG5vbmUuCi0g
ICAgICAgIHNwaWxsTWUgPSBtX2RhdGFbaV0ubmFtZTsKLQotICAgICAgICAvLyBDbGVhciBhbnkg
bmFtZS9zcGlsbE9yZGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZ2lzdGVyLAot
ICAgICAgICBtX2RhdGFbaV0gPSBNYXBFbnRyeSgpOwotICAgICAgICAvLyBNYXJrIHRoZSByZWdp
c3RlciBhcyBsb2NrZWQgKHdpdGggYSBsb2NrIGNvdW50IG9mIDEpLgotICAgICAgICBtX2RhdGFb
aV0ubG9ja0NvdW50ID0gMTsKLQotICAgICAgICByZXR1cm4gQmFua0luZm86OnRvUmVnaXN0ZXIo
aSk7Ci0gICAgfQotCi0gICAgLy8gPT09IE1hcEVudHJ5ID09PQotICAgIC8vCi0gICAgLy8gVGhp
cyBzdHJ1Y3R1cmUgcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGFuIGluZGl2aWR1YWwgbWFjaGlu
ZSByZWdpc3RlcgotICAgIC8vIGJlaW5nIG1hbmFnZWQgYnkgdGhlIFJlZ2lzdGVyQmFuay4gRm9y
IGVhY2ggcmVnaXN0ZXIgd2UgdHJhY2sgYSBsb2NrCi0gICAgLy8gY291bnQsIG5hbWUgYW5kIHNw
aWxsT3JkZXIgaGludC4KLSAgICBzdHJ1Y3QgTWFwRW50cnkgewotICAgICAgICBNYXBFbnRyeSgp
Ci0gICAgICAgICAgICA6IG5hbWUoVmlydHVhbFJlZ2lzdGVyKCkpCi0gICAgICAgICAgICAsIHNw
aWxsT3JkZXIoU3BpbGxIaW50SW52YWxpZCkKLSAgICAgICAgICAgICwgbG9ja0NvdW50KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lOwotICAg
ICAgICBTcGlsbEhpbnQgc3BpbGxPcmRlcjsKLSAgICAgICAgdWludDMyX3QgbG9ja0NvdW50Owot
ICAgIH07Ci0KLSAgICAvLyBIb2xkcyB0aGUgY3VycmVudCBzdGF0dXMgb2YgYWxsIHJlZ2lzdGVy
cy4KLSAgICBNYXBFbnRyeSBtX2RhdGFbTlVNX1JFR1NdOwotfTsKLQotdHlwZWRlZiBSZWdpc3Rl
ckJhbms8R1BSSW5mbz46Oml0ZXJhdG9yIGdwcl9pdGVyYXRvcjsKLXR5cGVkZWYgUmVnaXN0ZXJC
YW5rPEZQUkluZm8+OjppdGVyYXRvciBmcHJfaXRlcmF0b3I7Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgKaW5kZXggOGVkODVmNjMxMWYxNGE5NDA1MzBlMmYxNDYyODhhYjYxMmIxMGIz
ZC4uYWU2MDVhNzQ4ODI2ODIzMjQ5NTg3YmM1M2M1NWJkOWRkYjVjZTc0MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMzQsMTEgKzM0LDEx
IEBACiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Lmgi
CiAjaW5jbHVkZSAiREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkRGR1Jl
Z2lzdGVyQmFuay5oIgogI2luY2x1ZGUgIkRGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIKICNp
bmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiUHV0S2luZC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQmFuay5oIgogI2luY2x1ZGUgIlNwaWxs
UmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVk
ZSAiVmFsdWVSZWNvdmVyeS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlckJhbmsuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJCYW5r
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjM3NDNiOWE5YjY5ZGY5ZjkwNDI1YjNiODA5MDk0MGQ0N2YyZWVjYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJCYW5r
LmgKQEAgLTAsMCArMSwzNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAi
RlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
ID09PSBSZWdpc3RlckJhbmsgPT09CisvLworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGltcGxl
bWVudCB0aGUgR1BSIGFuZCBGUFIgcmVnaXN0ZXIgYmFua3MuCisvLyBBbGwgcmVnaXN0ZXJzIGhh
dmUgdHdvIHBpZWNlcyBvZiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlbToKKy8vIGEgbG9jayBj
b3VudCAodXNlZCB0byBpbmRpY2F0ZSB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgaW4gdXNlCisv
LyBpbiBjb2RlIGdlbmVyYXRpb24gb2YgdGhlIGN1cnJlbnQgbm9kZSwgYW5kIGNhbm5vdCBiZSBz
cGlsbGVkIG9yCisvLyBhbGxvY2F0ZWQgYXMgYSB0ZW1wb3JhcnkpLCBhbmQgVmlydHVhbFJlZ2lz
dGVyICduYW1lJywgcmVjb3JkaW5nCisvLyB3aGljaCB2YWx1ZSAoaWYgYW55KSBhIG1hY2hpbmUg
cmVnaXN0ZXIgY3VycmVudGx5IGhvbGRzLgorLy8gRWl0aGVyIG9yIGJvdGggb2YgdGhlc2UgcGll
Y2VzIG9mIGluZm9ybWF0aW9uIG1heSBiZSB2YWxpZCBmb3IgYQorLy8gZ2l2ZW4gcmVnaXN0ZXIu
IEEgcmVnaXN0ZXIgbWF5IGJlOgorLy8KKy8vICAtIHVubG9ja2VkLCBhbmQgdW5uYW1lZDogQXZh
aWxhYmxlIGZvciBhbGxvY2F0aW9uLgorLy8gIC0gbG9ja2VkLCBidXQgdW5uYW1lZDogICBBbHJl
YWR5IGFsbG9jYXRlZCBhcyBhIHRlbXBvcmFyeSBvcgorLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgZm9yIHRoZSBjdXJyZW50IG5vZGUuCisvLyAgLSB1bmxvY2tlZCwgYnV0IG5h
bWVkOiAgIENvbnRhaW5zIHRoZSByZXN1bHQgb2YgYSBwcmlvciBvcGVyYXRpb24sCisvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vdCB5ZXQgaW4gdXNlIGZvciB0aGlzIG5vZGUsCisvLyAg
LSBsb2NrZWQsIGJ1dCBuYW1lZDogICAgIENvbnRhaW5zIHRoZSByZXN1bHQgb2YgYSBwcmlvciBv
cGVyYXRpb24sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYWxsb2NhdGVk
IGFzIGEgb3BlcmFuZCB0byB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dCBvcGVyYXRpb24uCisvLworLy8gRm9yIGV2ZXJ5IG5hbWVkIHJlZ2lzdGVyIHdlIGFsc28gcmVj
b3JkIGEgaGludCB2YWx1ZSBpbmRpY2F0aW5nCisvLyB0aGUgb3JkZXIgaW4gd2hpY2ggcmVnaXN0
ZXJzIHNob3VsZCBiZSBzZWxlY3RlZCB0byBiZSBzcGlsbGVkOworLy8gcmVnaXN0ZXJzIHRoYXQg
Y2FuIGJlIG1vcmUgY2hlYXBseSBzcGlsbGVkIGFuZC9vciBmaWxsZWQgc2hvdWxkCisvLyBiZSBz
ZWxlY3RlZCBmaXJzdC4KKy8vCisvLyBMb2NraW5nIHJlZ2lzdGVyIGlzIGEgc3Ryb25nIHJldGVu
dGlvbiBtZWNoYW5pc207IGEgbG9ja2VkIHJlZ2lzdGVyCisvLyB3aWxsIG5ldmVyIGJlIHJlYWxs
b2NhdGVkICh0aGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBvcGVyYW5kcyB0bworLy8gdGhlIGN1
cnJlbnQgbm9kZSBhcmUgaW4gcmVnaXN0ZXJzKS4gTmFtaW5nLCBjb252ZXJzZWx5LCBpbiBhIHdl
YWsKKy8vIHJldGVudGlvbiBtZWNoYW5pc20gLSBhbGxvY2F0aW5nIGEgcmVnaXN0ZXIgbWF5IGZv
cmNlIGEgbmFtZWQgdmFsdWUKKy8vIHRvIGJlIHNwaWxsZWQuCisvLworLy8gQWxsIG5hbWVkIHZh
bHVlcyBtdXN0IGJlIGdpdmVuIGEgaGludCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBNaW4gYW5kCisv
LyBsZXNzIHRoYW4gTWF4LgordGVtcGxhdGU8Y2xhc3MgQmFua0luZm8+CitjbGFzcyBSZWdpc3Rl
ckJhbmsgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBSZWdJ
RDsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IE5VTV9SRUdTID0gQmFua0luZm86Om51bWJlck9m
UmVnaXN0ZXJzOworCisgICAgdHlwZWRlZiB1aW50MzJfdCBTcGlsbEhpbnQ7CisgICAgc3RhdGlj
IGNvbnN0IFNwaWxsSGludCBTcGlsbEhpbnRJbnZhbGlkID0gMHhmZmZmZmZmZjsKKworcHVibGlj
OgorICAgIFJlZ2lzdGVyQmFuaygpCisgICAgeworICAgIH0KKworICAgIC8vIEF0dGVtcHQgdG8g
YWxsb2NhdGUgYSByZWdpc3RlciAtIHRoaXMgZnVuY3Rpb24gZmluZHMgYW4gdW5sb2NrZWQKKyAg
ICAvLyByZWdpc3RlciwgbG9ja3MgaXQsIGFuZCByZXR1cm5zIGl0LiBJZiBub25lIGNhbiBiZSBm
b3VuZCwgdGhpcworICAgIC8vIHJldHVybnMgLTEgKEludmFsaWRHUFJSZWcgb3IgSW52YWxpZEZQ
UlJlZykuCisgICAgUmVnSUQgdHJ5QWxsb2NhdGUoKQorICAgIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGlnbm9yZWQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBOVU1fUkVHUzsgKytpKSB7CisgICAgICAgICAgICBpZiAo
IW1fZGF0YVtpXS5sb2NrQ291bnQgJiYgIW1fZGF0YVtpXS5uYW1lLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbnRlcm5hbChpLCBpZ25vcmVkKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIChSZWdJRCktMTsKKyAgICB9CisKKyAgICAvLyBB
bGxvY2F0ZSBhIHJlZ2lzdGVyIC0gdGhpcyBmdW5jdGlvbiBmaW5kcyBhbiB1bmxvY2tlZCByZWdp
c3RlciwKKyAgICAvLyBsb2NrcyBpdCwgYW5kIHJldHVybnMgaXQuIElmIGFueSBuYW1lZCByZWdp
c3RlcnMgZXhpc3QsIG9uZQorICAgIC8vIG9mIHRoZXNlIHNob3VsZCBiZSBzZWxlY3RlZCB0byBi
ZSBhbGxvY2F0ZWQuIElmIGFsbCB1bmxvY2tlZAorICAgIC8vIHJlZ2lzdGVycyBhcmUgbmFtZWQs
IHRoZW4gb25lIG9mIHRoZSBuYW1lZCByZWdpc3RlcnMgd2lsbCBuZWVkCisgICAgLy8gdG8gYmUg
c3BpbGxlZC4gSW4gdGhpcyBjYXNlIHRoZSByZWdpc3RlciBzZWxlY3RlZCB0byBiZSBzcGlsbGVk
CisgICAgLy8gd2lsbCBiZSBvbmUgb2YgdGhlIHJlZ2lzdGVycyB0aGF0IGhhcyB0aGUgbG93ZXN0
ICdzcGlsbE9yZGVyJworICAgIC8vIGNvc3QgYXNzb2NpYXRlZCB3aXRoIGl0LgorICAgIC8vCisg
ICAgLy8gVGhpcyBtZXRob2Qgc2VsZWN0IHRoZSByZWdpc3RlciB0byBiZSBhbGxvY2F0ZWQsIGFu
ZCBjYWxscyB0aGUKKyAgICAvLyBwcml2YXRlICdhbGxvY2F0ZUludGVybmFsJyBtZXRob2QgdG8g
dXBkYXRlIGludGVybmFsIGRhdGEKKyAgICAvLyBzdHJ1Y3R1cmVzIGFjY29yZGluZ2x5LgorICAg
IFJlZ0lEIGFsbG9jYXRlKFZpcnR1YWxSZWdpc3RlciAmc3BpbGxNZSkKKyAgICB7CisgICAgICAg
IHVpbnQzMl90IGN1cnJlbnRMb3dlc3QgPSBOVU1fUkVHUzsKKyAgICAgICAgU3BpbGxIaW50IGN1
cnJlbnRTcGlsbE9yZGVyID0gU3BpbGxIaW50SW52YWxpZDsKKworICAgICAgICAvLyBUaGlzIGxv
b3AgaXMgYnJva2VuIGludG8gdHdvIGhhbHZlcywgbG9vcGluZyBmcm9tIHRoZSBsYXN0IGFsbG9j
YXRlZAorICAgICAgICAvLyByZWdpc3RlciAodGhlIHJlZ2lzdGVyIHJldHVybmVkIGxhc3QgdGlt
ZSB0aGlzIG1ldGhvZCB3YXMgY2FsbGVkKSB0bworICAgICAgICAvLyB0aGUgbWF4aW11bSByZWdp
c3RlciB2YWx1ZSwgdGhlbiBmcm9tIDAgdG8gdGhlIGxhc3QgYWxsb2NhdGVkLgorICAgICAgICAv
LyBUaGlzIGltcGxlbWVudHMgYSBzaW1wbGUgcm91bmQtcm9iaW4gbGlrZSBhcHByb2FjaCB0byB0
cnkgdG8gcmVkdWNlCisgICAgICAgIC8vIHRocmFzaCwgYW5kIG1pbmltaXplIHRpbWUgc3BlbnQg
c2Nhbm5pbmcgbG9ja2VkIHJlZ2lzdGVycyBpbiBhbGxvY2F0aW9uLgorICAgICAgICAvLyBJZiBh
IHVubG9ja2VkIGFuZCB1bm5hbWVkIHJlZ2lzdGVyIGlzIGZvdW5kIHJldHVybiBpdCBpbW1lZGlh
dGVseS4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBmaW5kIHRoZSBmaXJzdCB1bmxvY2tlZCByZWdp
c3RlciB3aXRoIHRoZSBsb3dlc3Qgc3BpbGxPcmRlci4KKyAgICAgICAgZm9yICh1aW50MzJfdCBp
ID0gMCA7IGkgPCBOVU1fUkVHUzsgKytpKSB7CisgICAgICAgICAgICAvLyAoMSkgSWYgdGhlIGN1
cnJlbnQgcmVnaXN0ZXIgaXMgbG9ja2VkLCBpdCBpcyBub3QgYSBjYW5kaWRhdGUuCisgICAgICAg
ICAgICBpZiAobV9kYXRhW2ldLmxvY2tDb3VudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIC8vICgyKSBJZiB0aGUgY3VycmVudCByZWdpc3RlcidzIHNwaWxsIG9yZGVy
IGlzIDAsIHBpY2sgdGhpcyEg4oCTIHVuYXNzaWduZWQgcmVnaXN0ZXJzIGhhdmUgc3BpbGwgb3Jk
ZXIgMC4KKyAgICAgICAgICAgIFNwaWxsSGludCBzcGlsbE9yZGVyID0gbV9kYXRhW2ldLnNwaWxs
T3JkZXI7CisgICAgICAgICAgICBpZiAoc3BpbGxPcmRlciA9PSBTcGlsbEhpbnRJbnZhbGlkKQor
ICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUludGVybmFsKGksIHNwaWxsTWUpOworICAg
ICAgICAgICAgLy8gSWYgdGhpcyByZWdpc3RlciBpcyBiZXR0ZXIgKGhhcyBhIGxvd2VyIHNwaWxs
IG9yZGVyIHZhbHVlKSB0aGFuIGFueSBwcmlvcgorICAgICAgICAgICAgLy8gY2FuZGlkYXRlLCB0
aGVuIHJlY29yZCBpdC4KKyAgICAgICAgICAgIGlmIChzcGlsbE9yZGVyIDwgY3VycmVudFNwaWxs
T3JkZXIpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3BpbGxPcmRlciA9IHNwaWxsT3JkZXI7
CisgICAgICAgICAgICAgICAgY3VycmVudExvd2VzdCA9IGk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBEZWFkbG9jayBjaGVjayAtIHRoaXMgY291bGQgb25seSBvY2N1
ciBpcyBhbGwgcmVnaXN0ZXJzIGFyZSBsb2NrZWQhCisgICAgICAgIEFTU0VSVChjdXJyZW50TG93
ZXN0ICE9IE5VTV9SRUdTICYmIGN1cnJlbnRTcGlsbE9yZGVyICE9IFNwaWxsSGludEludmFsaWQp
OworICAgICAgICAvLyBUaGVyZSB3ZXJlIG5vIGF2YWlsYWJsZSByZWdpc3RlcnM7IGN1cnJlbnRM
b3dlc3Qgd2lsbCBuZWVkIHRvIGJlIHNwaWxsZWQuCisgICAgICAgIHJldHVybiBhbGxvY2F0ZUlu
dGVybmFsKGN1cnJlbnRMb3dlc3QsIHNwaWxsTWUpOworICAgIH0KKworICAgIHVpbnQzMl90IGxv
Y2tlZENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAg
ICAgICAgZm9yICh1aW50MzJfdCBpID0gMCA7IGkgPCBOVU1fUkVHUzsgKytpKSB7CisgICAgICAg
ICAgICBpZiAobV9kYXRhW2ldLmxvY2tDb3VudCkKKyAgICAgICAgICAgICAgICArK2NvdW50Owor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICAvLyBBbGxvY2F0
ZXMgdGhlIGdpdmVuIHJlZ2lzdGVyLCBldmVuIGlmIHRoaXMgd2lsbCBmb3JjZSBhIHNwaWxsLgor
ICAgIFZpcnR1YWxSZWdpc3RlciBhbGxvY2F0ZVNwZWNpZmljKFJlZ0lEIHJlZykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQmFua0luZm86OnRvSW5kZXgocmVnKTsKKworICAgICAg
ICArK21fZGF0YVtpbmRleF0ubG9ja0NvdW50OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFt
ZSA9IG5hbWVBdEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG5hbWUuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgcmVsZWFzZUF0SW5kZXgoaW5kZXgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG5hbWU7CisgICAgfQorCisgICAgLy8gcmV0YWluL3JlbGVhc2UgLSB0aGVzZSBtZXRob2RzIGFy
ZSB1c2VkIHRvIGFzc29jaWF0ZS9kaXNhc3NvY2lhdGUgbmFtZXMKKyAgICAvLyB3aXRoIHZhbHVl
cyBpbiByZWdpc3RlcnMuIHJldGFpbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbG9ja2VkIHJl
Z2lzdGVycy4KKyAgICB2b2lkIHJldGFpbihSZWdJRCByZWcsIFZpcnR1YWxSZWdpc3RlciBuYW1l
LCBTcGlsbEhpbnQgc3BpbGxPcmRlcikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
QmFua0luZm86OnRvSW5kZXgocmVnKTsKKworICAgICAgICAvLyBTcGlsbEhpbnQgbXVzdCBiZSB2
YWxpZC4KKyAgICAgICAgQVNTRVJUKHNwaWxsT3JkZXIgIT0gU3BpbGxIaW50SW52YWxpZCk7Cisg
ICAgICAgIC8vICdpbmRleCcgbXVzdCBiZSBhIHZhbGlkLCBsb2NrZWQgcmVnaXN0ZXIuCisgICAg
ICAgIEFTU0VSVChpbmRleCA8IE5VTV9SRUdTKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRl
eF0ubG9ja0NvdW50KTsKKyAgICAgICAgLy8gJ2luZGV4JyBzaG91bGQgbm90IGN1cnJlbnRseSBi
ZSBuYW1lZCwgdGhlIG5ldyBuYW1lIG11c3QgYmUgdmFsaWQuCisgICAgICAgIEFTU0VSVCghbV9k
YXRhW2luZGV4XS5uYW1lLmlzVmFsaWQoKSk7CisgICAgICAgIEFTU0VSVChuYW1lLmlzVmFsaWQo
KSk7CisgICAgICAgIC8vICdpbmRleCcgc2hvdWxkIG5vdCBjdXJyZW50bHkgaGF2ZSBhIHNwaWxs
T3JkZXIuCisgICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIgPT0gU3BpbGxI
aW50SW52YWxpZCk7CisKKyAgICAgICAgbV9kYXRhW2luZGV4XS5uYW1lID0gbmFtZTsKKyAgICAg
ICAgbV9kYXRhW2luZGV4XS5zcGlsbE9yZGVyID0gc3BpbGxPcmRlcjsKKyAgICB9CisgICAgdm9p
ZCByZWxlYXNlKFJlZ0lEIHJlZykKKyAgICB7CisgICAgICAgIHJlbGVhc2VBdEluZGV4KEJhbmtJ
bmZvOjp0b0luZGV4KHJlZykpOworICAgIH0KKworICAgIC8vIGxvY2svdW5sb2NrIHJlZ2lzdGVy
LCBlbnN1cmVzIHRoYXQgdGhleSBhcmUgbm90IHNwaWxsZWQuCisgICAgdm9pZCBsb2NrKFJlZ0lE
IHJlZykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gQmFua0luZm86OnRvSW5kZXgo
cmVnKTsKKworICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7CisgICAgICAgICsrbV9k
YXRhW2luZGV4XS5sb2NrQ291bnQ7CisgICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLmxvY2tD
b3VudCk7CisgICAgfQorICAgIHZvaWQgdW5sb2NrKFJlZ0lEIHJlZykKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gQmFua0luZm86OnRvSW5kZXgocmVnKTsKKworICAgICAgICBBU1NF
UlQoaW5kZXggPCBOVU1fUkVHUyk7CisgICAgICAgIEFTU0VSVChtX2RhdGFbaW5kZXhdLmxvY2tD
b3VudCk7CisgICAgICAgIC0tbV9kYXRhW2luZGV4XS5sb2NrQ291bnQ7CisgICAgfQorICAgIGJv
b2wgaXNMb2NrZWQoUmVnSUQgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzTG9j
a2VkQXRJbmRleChCYW5rSW5mbzo6dG9JbmRleChyZWcpKTsKKyAgICB9CisKKyAgICAvLyBHZXQg
dGhlIG5hbWUgKFZpcnR1YWxSZWdpc3RlcikgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgIC8vIGdp
dmVuIHJlZ2lzdGVyIChvciBkZWZhdWx0IFZpcnR1YWxSZWdpc3RlcigpIGZvciBub25lKS4KKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZShSZWdJRCByZWcpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbmFtZUF0SW5kZXgoQmFua0luZm86OnRvSW5kZXgocmVnKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNJblVzZShSZWdJRCByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNMb2NrZWQocmVnKSB8fCBuYW1lKHJlZykuaXNWYWxpZCgpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGR1bXAoKQorICAgIHsKKyAgICAgICAgLy8gRm9yIGVhY2ggcmVnaXN0ZXIsIHByaW50IHRo
ZSBWaXJ0dWFsUmVnaXN0ZXIgJ25hbWUnLgorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPTA7IGkg
PCBOVU1fUkVHUzsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9kYXRhW2ldLm5hbWUuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJbJTAyZF0iLCBtX2RhdGFbaV0ubmFtZS5v
ZmZzZXQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlst
LV0iKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nRigiXG4iKTsKKyAgICB9CisKKyAgICBj
bGFzcyBpdGVyYXRvciB7CisgICAgZnJpZW5kIGNsYXNzIFJlZ2lzdGVyQmFuazxCYW5rSW5mbz47
CisgICAgcHVibGljOgorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JhbmstPm5hbWVBdEluZGV4KG1faW5kZXgpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2JhbmstPmlzTG9ja2VkQXRJbmRleChtX2luZGV4KTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgcmVsZWFzZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fYmFuay0+cmVsZWFzZUF0SW5kZXgobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAg
ICBSZWdJRCByZWdJRCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYW5r
SW5mbzo6dG9SZWdpc3RlcihtX2luZGV4KTsKKyAgICAgICAgfQorCisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBjb25zdCBjaGFyKiBkZWJ1Z05hbWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gQmFua0luZm86OmRlYnVnTmFtZShyZWdJRCgpKTsKKyAgICAgICAgfQorI2Vu
ZGlmCisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAg
ICAgICArK21faW5kZXg7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9iYW5rID09IG90aGVyLm1fYmFuayk7CisgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCAhPSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9pbmRleDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgaXRlcmF0b3Io
UmVnaXN0ZXJCYW5rPEJhbmtJbmZvPiogYmFuaywgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAg
ICA6IG1fYmFuayhiYW5rKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlckJhbms8QmFua0luZm8+KiBtX2Jhbms7Cisg
ICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsKKyAgICB9CisKKyAgICBp
dGVyYXRvciBlbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIE5VTV9S
RUdTKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvY2tlZEF0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7
CisgICAgICAgIHJldHVybiBtX2RhdGFbaW5kZXhdLmxvY2tDb3VudDsKKyAgICB9CisKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbmFtZUF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7CisgICAgICAgIHJldHVybiBtX2RhdGFb
aW5kZXhdLm5hbWU7CisgICAgfQorCisgICAgdm9pZCByZWxlYXNlQXRJbmRleCh1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIC8vICdpbmRleCcgbXVzdCBiZSBhIHZhbGlkIHJlZ2lzdGVy
LgorICAgICAgICBBU1NFUlQoaW5kZXggPCBOVU1fUkVHUyk7CisgICAgICAgIC8vICdpbmRleCcg
c2hvdWxkIGN1cnJlbnRseSBiZSBuYW1lZC4KKyAgICAgICAgQVNTRVJUKG1fZGF0YVtpbmRleF0u
bmFtZS5pc1ZhbGlkKCkpOworICAgICAgICAvLyAnaW5kZXgnIHNob3VsZCBjdXJyZW50bHkgaGF2
ZSBhIHZhbGlkIHNwaWxsIG9yZGVyLgorICAgICAgICBBU1NFUlQobV9kYXRhW2luZGV4XS5zcGls
bE9yZGVyICE9IFNwaWxsSGludEludmFsaWQpOworCisgICAgICAgIG1fZGF0YVtpbmRleF0ubmFt
ZSA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBtX2RhdGFbaW5kZXhdLnNwaWxsT3JkZXIg
PSBTcGlsbEhpbnRJbnZhbGlkOworICAgIH0KKworICAgIC8vIFVzZWQgYnkgJ2FsbG9jYXRlJywg
YWJvdmUsIHRvIHVwZGF0ZSBpbmZvcmFtdGlvbiBpbiB0aGUgbWFwLgorICAgIFJlZ0lEIGFsbG9j
YXRlSW50ZXJuYWwodWludDMyX3QgaSwgVmlydHVhbFJlZ2lzdGVyICZzcGlsbE1lKQorICAgIHsK
KyAgICAgICAgLy8gJ2knIG11c3QgYmUgYSB2YWxpZCwgdW5sb2NrZWQgcmVnaXN0ZXIuCisgICAg
ICAgIEFTU0VSVChpIDwgTlVNX1JFR1MgJiYgIW1fZGF0YVtpXS5sb2NrQ291bnQpOworCisgICAg
ICAgIC8vIFJldHVybiB0aGUgVmlydHVhbFJlZ2lzdGVyIG9mIHRoZSBuYW1lZCB2YWx1ZSBjdXJy
ZW50bHkgc3RvcmVkIGluCisgICAgICAgIC8vIHRoZSByZWdpc3RlciBiZWluZyByZXR1cm5lZCAt
IG9yIGRlZmF1bHQgVmlydHVhbFJlZ2lzdGVyKCkgaWYgbm9uZS4KKyAgICAgICAgc3BpbGxNZSA9
IG1fZGF0YVtpXS5uYW1lOworCisgICAgICAgIC8vIENsZWFyIGFueSBuYW1lL3NwaWxsT3JkZXIg
Y3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0ZXIsCisgICAgICAgIG1fZGF0YVtp
XSA9IE1hcEVudHJ5KCk7CisgICAgICAgIC8vIE1hcmsgdGhlIHJlZ2lzdGVyIGFzIGxvY2tlZCAo
d2l0aCBhIGxvY2sgY291bnQgb2YgMSkuCisgICAgICAgIG1fZGF0YVtpXS5sb2NrQ291bnQgPSAx
OworCisgICAgICAgIHJldHVybiBCYW5rSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICB9CisKKyAg
ICAvLyA9PT0gTWFwRW50cnkgPT09CisgICAgLy8KKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBwcm92
aWRlcyBpbmZvcm1hdGlvbiBmb3IgYW4gaW5kaXZpZHVhbCBtYWNoaW5lIHJlZ2lzdGVyCisgICAg
Ly8gYmVpbmcgbWFuYWdlZCBieSB0aGUgUmVnaXN0ZXJCYW5rLiBGb3IgZWFjaCByZWdpc3RlciB3
ZSB0cmFjayBhIGxvY2sKKyAgICAvLyBjb3VudCwgbmFtZSBhbmQgc3BpbGxPcmRlciBoaW50Lgor
ICAgIHN0cnVjdCBNYXBFbnRyeSB7CisgICAgICAgIE1hcEVudHJ5KCkKKyAgICAgICAgICAgIDog
bmFtZShWaXJ0dWFsUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgICwgc3BpbGxPcmRlcihTcGlsbEhp
bnRJbnZhbGlkKQorICAgICAgICAgICAgLCBsb2NrQ291bnQoMCkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWU7CisgICAgICAgIFNwaWxsSGludCBz
cGlsbE9yZGVyOworICAgICAgICB1aW50MzJfdCBsb2NrQ291bnQ7CisgICAgfTsKKworICAgIC8v
IEhvbGRzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBhbGwgcmVnaXN0ZXJzLgorICAgIE1hcEVudHJ5
IG1fZGF0YVtOVU1fUkVHU107Cit9OworCit0eXBlZGVmIFJlZ2lzdGVyQmFuazxHUFJJbmZvPjo6
aXRlcmF0b3IgZ3ByX2l0ZXJhdG9yOwordHlwZWRlZiBSZWdpc3RlckJhbms8RlBSSW5mbz46Oml0
ZXJhdG9yIGZwcl9pdGVyYXRvcjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4
IDczZWM4YmRlMWIxODkyMzg2ZTMwZWJlYTUxNmVlMDI3NWYzZjM4NTYuLjI3NjZmMDdhZmU1M2Jl
OWE1ODhmOWQ4ZDdiYzEyODViM2UwNmQwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTE2MSw4ICsxNjEsNiBAQCBjbGFzcyBC
M0lSR2VuZXJhdG9yIHsKICAgICB0eXBlZGVmIENvbnRyb2xEYXRhOjpSZXN1bHRMaXN0IFJlc3Vs
dExpc3Q7CiAgICAgdHlwZWRlZiBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPjo6Q29udHJv
bEVudHJ5IENvbnRyb2xFbnRyeTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5
cGUgZW1wdHlFeHByZXNzaW9uID0gbnVsbHB0cjsKLQogICAgIHR5cGVkZWYgU3RyaW5nIEVycm9y
VHlwZTsKICAgICB0eXBlZGVmIFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0
OwogICAgIHR5cGVkZWYgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
LCBFcnJvclR5cGU+IFJlc3VsdDsKQEAgLTE4Nyw2ICsxODUsNyBAQCBjbGFzcyBCM0lSR2VuZXJh
dG9yIHsKICAgICAvLyBMb2NhbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiB0ZWVMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZhbHVlKTsKIAog
ICAgIC8vIEdsb2JhbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRH
bG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtMjE0LDE0
ICsyMTMsMTQgQEAgY2xhc3MgQjNJUkdlbmVyYXRvciB7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9s
RGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRh
Jiwgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9uVHlwZT4gY29uZGl0aW9uLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29u
dHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRF
bmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwogCiAgICAgLy8gQ2FsbHMKLSAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4
LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9u
VHlwZT4mIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CiAKICAgICB2b2lkIGR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVz
c2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjayk7CkBAIC02MTksNiArNjE4LDExIEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVl
KSAtPiBQYXJ0aWFsUmVzCiAgICAgcmV0dXJuIHsgfTsKIH0KIAorYXV0byBCM0lSR2VuZXJhdG9y
Ojp0ZWVMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZhbHVlKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHNldExvY2FsKGluZGV4LCB2YWx1ZSk7Cit9CisKIGF1
dG8gQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9p
bnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4o
SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7CkBAIC0xMDExLDE0ICsxMDE1LDE0IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHJldHVyblZhCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIHN0ZDo6
b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+IGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHRGb3JCcmFuY2goKSk7CiAKICAgICBCYXNpY0Js
b2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CiAgICAgaWYgKGNvbmRp
dGlvbikgewogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxv
Y2soKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
Mzo6QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9u
LnZhbHVlKCkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhGcmVxdWVu
dGVkQmxvY2sodGFyZ2V0KSwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOwogICAgICAg
ICB0YXJnZXQtPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKICAgICAgICAgY29udGlu
dWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CkBAIC0xMDc5LDcgKzEwODMs
NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
JiBlbnRyeSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCkBAIC0xMTQ4LDE4ICsxMTUyLDE3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwKIAogICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKIAotICAgICAgICBpZiAocmV0dXJuVHlwZSA9PSBWb2lkKQotICAgICAgICAgICAgcmVzdWx0
ID0gbnVsbHB0cjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb250aW51
YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksIHRvQjNUeXBlKHJldHVyblR5cGUp
LCBvcmlnaW4oKSk7Ci0gICAgICAgICAgICB3YXNtQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShy
ZXN1bHQpOwotICAgICAgICAgICAgZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJl
c3VsdCk7CisgICAgICAgIGlmIChyZXR1cm5UeXBlICE9IFZvaWQpIHsKKyAgICAgICAgICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdFZhbHVlID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgUGhpLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwgb3JpZ2luKCkpOworICAgICAgICAg
ICAgd2FzbUNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0VmFsdWUpOworICAgICAgICAg
ICAgZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdFZhbHVlKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHJlc3VsdFZhbHVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhl
IGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFu
ZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdl
YkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZv
Lm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxs
KG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5U
eXBlKSwKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0VmFsdWUgPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFy
Z3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndy
aXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5y
ZWFkc1Bpbm5lZCA9IHRydWU7CkBAIC0xMTcyLDEyICsxMTc1LDE0IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKHJlc3VsdFZhbHVlKQorICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0VmFsdWU7CiAgICAgfQogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6
Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CiAgICAgQVNT
RVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwpAQCAtMTMxMCw3
ICsxMzE1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgY2FsbGVlQ29kZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0WG9yLCBvcmlnaW4o
KSwgY2FsbGVlQ29kZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIGdfSklUQ29kZVBvaXNvbikpOwogCiAgICAgVHlwZSByZXR1cm5UeXBl
ID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKLSAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3Ms
IHRvQjNUeXBlKHJldHVyblR5cGUpLAorICAgIGF1dG8qIHJlc3VsdFZhbHVlID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigp
LCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5u
ZWQgPSB0cnVlOwpAQCAtMTMyNyw2ICsxMzMyLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8K
ICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6
IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0p
OworICAgIGlmIChyZXN1bHRWYWx1ZSkKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0VmFsdWU7CiAK
ICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBp
bnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgogICAgIHJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMs
IG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmlu
ZGV4IDA4OGU3MjhjZTRjYzU0Y2UzYzYwNmI0MGYyNTVhNjA5ZDU3YjNiOTEuLjcwMmM2Yjg5NmUy
MGVmYjVjZmJmYzQyOGIxNTliYmYwZTZiNzVmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC0xNjcsOSArMTY3LDkgQEAgYXV0byBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6YmluYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAog
ICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocmlnaHQsICJiaW5hcnkgcmln
aHQiKTsKICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGxlZnQsICJiaW5h
cnkgbGVmdCIpOwotICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9w
PihsZWZ0LCByaWdodCwgcmVzdWx0KSk7CisgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQodGVt
cGxhdGUgYWRkT3A8b3A+KFdURk1vdmUobGVmdCksIFdURk1vdmUocmlnaHQpLCByZXN1bHQpKTsK
IAotICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAg
LTE4MSw5ICsxODEsOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmFyeUNhc2Uo
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogCiAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInVuYXJ5Iik7Ci0gICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+KHZhbHVlLCByZXN1bHQpKTsK
KyAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVCh0ZW1wbGF0ZSBhZGRPcDxvcD4oV1RGTW92ZSh2
YWx1ZSksIHJlc3VsdCkpOwogCi0gICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
CisgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApAQCAtMjA5LDkgKzIwOSw5IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9U
UllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhub25aZXJvLCAic2VsZWN0IG5vbi16ZXJvIik7
CiAKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwotICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRTZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvLCByZXN1bHQpKTsK
KyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkU2VsZWN0KFdURk1vdmUoY29uZGl0
aW9uKSwgV1RGTW92ZShub25aZXJvKSwgV1RGTW92ZSh6ZXJvKSwgcmVzdWx0KSk7CiAKLSAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIApAQCAtMjI1LDggKzIyNSw4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVudE9wY29kZSksICJi
eXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwgIiBleGNlZWRzIGxvYWQncyBuYXR1
cmFsIGFsaWdubWVudCAiLCAxdWxsIDw8IG1lbW9yeUxvZzJBbGlnbm1lbnQobV9jdXJyZW50T3Bj
b2RlKSk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNl
dCksICJjYW4ndCBnZXQgbG9hZCBvZmZzZXQiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJF
U1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAibG9hZCBwb2ludGVyIik7Ci0gICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGxvYWQoc3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4obV9jdXJyZW50
T3Bjb2RlKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZzZXQpKTsKLSAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGxv
YWQoc3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgV1RGTW92ZShwb2lu
dGVyKSwgcmVzdWx0LCBvZmZzZXQpKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5k
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0yNDAs
NyArMjQwLDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9u
KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IHN0b3JlIG9mZnNldCIpOwogICAgICAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic3RvcmUgdmFsdWUiKTsKICAg
ICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAic3RvcmUg
cG9pbnRlciIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzdG9yZShzdGF0aWNf
Y2FzdDxTdG9yZU9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNl
dCkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzdG9yZShzdGF0aWNfY2FzdDxT
dG9yZU9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgV1RGTW92ZShwb2ludGVyKSwgV1RGTW92ZSh2
YWx1ZSksIG9mZnNldCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICN1bmRlZiBDUkVB
VEVfQ0FTRQpAQCAtMjc4LDcgKzI3OCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgRXhwcmVzc2lvblR5
cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihp
bmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIGdldF9sb2NhbCIpOwogICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChnZXRMb2NhbChpbmRleCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5h
cHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAg
LTI4Nyw3ICsyODcsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJl
c3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4n
dCBnZXQgaW5kZXggZm9yIHNldF9sb2NhbCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVT
U0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic2V0X2xvY2FsIik7Ci0gICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCB2YWx1ZSkpOworICAgICAgICBXQVNNX1RSWV9B
RERfVE9fQ09OVEVYVChzZXRMb2NhbChpbmRleCwgV1RGTW92ZSh2YWx1ZSkpKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTI5NSw3ICsyOTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAg
IHVpbnQzMl90IGluZGV4OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHRlZV9sb2NhbCIpOwogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgImNhbid0IHRl
ZV9sb2NhbCBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrIik7Ci0gICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCkpKTsK
KyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQodGVlTG9jYWwoaW5kZXgsIG1fZXhwcmVz
c2lvblN0YWNrLmxhc3QoKSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMzA0
LDcgKzMwNCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lv
bigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBn
ZXQgZ2V0X2dsb2JhbCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGdldEdsb2JhbChpbmRleCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFw
cGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQoV1RGTW92ZShy
ZXN1bHQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTMxMyw3ICszMTMsNyBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgc2V0X2dsb2Jh
bCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8o
dmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoc2V0R2xvYmFsKGluZGV4LCBXVEZNb3ZlKHZhbHVlKSkpOwogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIApAQCAtMzMwLDE0ICszMzAsMTQgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFy
Z3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgY2FsbCdzICIsIGNhbGxlZVNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrW2ldKTsK
KyAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobV9leHByZXNzaW9uU3Rh
Y2tbaV0pKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJ
bmRleCk7CiAKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlF
eHByZXNzaW9uOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiByZXN1bHQ7
CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwg
Y2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHQpKTsKIAotICAgICAgICBpZiAocmVzdWx0ICE9
IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbikKLSAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LmFwcGVuZChyZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0LnZhbHVlKCkpKTsKIAogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KQEAgLTM1OSwxNCArMzU5LDE0IEBAIGF1dG8gRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3Vu
dCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBhcmd1bWVudENvdW50LCAi
IGNhbGxfaW5kaXJlY3QgYXJndW1lbnRzIik7CiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50
SW5kZXggPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBhcmd1bWVudENvdW50OwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3Rh
Y2suc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChtX2V4cHJl
c3Npb25TdGFja1tpXSk7CisgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KG1fZXhwcmVzc2lvblN0YWNrW2ldKSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmlu
ayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9
IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxFeHByZXNz
aW9uVHlwZT4gcmVzdWx0OwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxs
SW5kaXJlY3QoY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHQpKTsKIAotICAgICAgICBpZiAo
cmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbikKLSAgICAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0LnZhbHVlKCkpKTsKIAog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTM5Myw4ICszOTMsOCBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2w7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlUmVzdWx0VHlwZShpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGlmJ3MgaW5saW5l
IHNpZ25hdHVyZSIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRP
KGNvbmRpdGlvbiwgImlmIGNvbmRpdGlvbiIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGRJZihjb25kaXRpb24sIGlubGluZVNpZ25hdHVyZSwgY29udHJvbCkpOwotICAgICAg
ICBtX2NvbnRyb2xTdGFjay5hcHBlbmQoeyBXVEZNb3ZlKG1fZXhwcmVzc2lvblN0YWNrKSwgY29u
dHJvbCB9KTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkSWYoV1RGTW92ZShj
b25kaXRpb24pLCBpbmxpbmVTaWduYXR1cmUsIGNvbnRyb2wpKTsKKyAgICAgICAgbV9jb250cm9s
U3RhY2suYXBwZW5kKHsgV1RGTW92ZShtX2V4cHJlc3Npb25TdGFjayksIFdURk1vdmUoY29udHJv
bCkgfSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gRXhwcmVzc2lvbkxpc3QoKTsKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC00MDksNyArNDA5LDcgQEAgYXV0byBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAg
IGNhc2UgQnI6CiAgICAgY2FzZSBCcklmOiB7CiAgICAgICAgIHVpbnQzMl90IHRhcmdldDsKLSAg
ICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9u
OworICAgICAgICBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiBjb25kaXRpb247CiAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhcmdldCksICJjYW4ndCBn
ZXQgYnIgLyBicl9pZidzIHRhcmdldCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRh
cmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCksICJiciAvIGJyX2lmJ3MgdGFyZ2V0ICIsIHRh
cmdldCwgIiBleGNlZWRzIGNvbnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXpl
KCkpOwogICAgICAgICBpZiAobV9jdXJyZW50T3Bjb2RlID09IEJySWYpCkBAIC00MTksNyArNDE5
LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4g
UGFydGlhbFJlc3VsdAogCiAgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3Rh
Y2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7CiAKLSAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQnJhbmNoKGRhdGEsIGNvbmRpdGlvbiwg
bV9leHByZXNzaW9uU3RhY2spKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
QnJhbmNoKGRhdGEsIFdURk1vdmUoY29uZGl0aW9uKSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTQ0NCw3ICs0NDQsNyBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGVmYXVsdFRhcmdldCA+PSBtX2NvbnRyb2xTdGFj
ay5zaXplKCksICJicl90YWJsZSdzIGRlZmF1bHQgdGFyZ2V0ICIsIGRlZmF1bHRUYXJnZXQsICIg
ZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKIAog
ICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImJy
X3RhYmxlIGNvbmRpdGlvbiIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRT
d2l0Y2goY29uZGl0aW9uLCB0YXJnZXRzLCBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5z
aXplKCkgLSAxIC0gZGVmYXVsdFRhcmdldF0uY29udHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNr
KSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFN3aXRjaChXVEZNb3ZlKGNv
bmRpdGlvbiksIHRhcmdldHMsIG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAt
IDEgLSBkZWZhdWx0VGFyZ2V0XS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKIAog
ICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAg
LTQ1NSw3ICs0NTUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJl
c3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIGlmIChtX3NpZ25hdHVyZS5yZXR1cm5U
eXBlKCkgIT0gVm9pZCkgewogICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmV0dXJuVmFsdWU7
CiAgICAgICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJldHVyblZh
bHVlLCAicmV0dXJuIik7Ci0gICAgICAgICAgICByZXR1cm5WYWx1ZXMuYXBwZW5kKHJldHVyblZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVyblZhbHVlcy5hcHBlbmQoV1RGTW92ZShyZXR1cm5WYWx1
ZSkpOwogICAgICAgICB9CiAKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkUmV0
dXJuKG1fY29udHJvbFN0YWNrWzBdLmNvbnRyb2xEYXRhLCByZXR1cm5WYWx1ZXMpKTsKQEAgLTUw
MCw4ICs1MDAsOCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Np
b24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NU
QUNLX0lOVE8oZGVsdGEsICJleHBlY3QgYW4gaTMyIGFyZ3VtZW50IHRvIGdyb3dfbWVtb3J5IG9u
IHRoZSBzdGFjayIpOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkR3Jvd01lbW9yeShkZWx0YSwgcmVzdWx0KSk7Ci0g
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRHcm93TWVtb3J5KFdURk1vdmUoZGVsdGEpLCByZXN1bHQpKTsK
KyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC01MTUsNyArNTE1LDcgQEAgYXV0byBGdW5jdGlv
blBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAg
ICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkQ3VycmVudE1lbW9yeShyZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChXVEZN
b3ZlKHJlc3VsdCkpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRlbXBsYXRlSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UZW1wbGF0ZUpJVC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYwZjk3
MzgzMmE4YWM0Mjk4MjVlOGM4MWJmYjlhZDUxNjQ0NDM3OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UZW1wbGF0ZUpJVC5jcHAKQEAgLTAsMCArMSw1
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6
dWtpQHNsb3dzdGFydC5vcmc+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVRlbXBsYXRlSklULmgi
CisKKyNpbmNsdWRlICJSZWdpc3RlckJhbmsuaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJz
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworbmFtZXNwYWNlIFdhc21UZW1w
bGF0ZUpJVEludGVybmFsIHsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Cit9CisKK2NsYXNzIFRlbXBsYXRlSklUOworCitjbGFzcyBTdGFja1ZhbHVlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTdGFja1ZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTG9jYWwgeworICAgICAgICB1aW50MzJfdCBzbG90IHsg
MCB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29uc3RhbnQgeworICAgICAgICB1aW50NjRfdCBi
aXRzIHsgMCB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgUmVnaXN0ZXIgeworICAgICAgICBSZWcg
cmVnOworICAgIH07CisKKyAgICBzdHJ1Y3QgU3RhY2sgeworICAgICAgICB1aW50MzJfdCBzbG90
IHsgMCB9OworICAgIH07CisKKyAgICAvLyBLZWVwIHRoZSBvcmRlciBpbiBzeW5jIHdpdGggdGhl
IG9yZGVyIGluIFZhcmlhbnQuCisgICAgZW51bSBjbGFzcyBMb2NhdGlvbiA6IHVpbnQ4X3Qgewor
ICAgICAgICBMb2NhbCA9IDAsCisgICAgICAgIENvbnN0YW50LAorICAgICAgICBSZWdpc3RlciwK
KyAgICAgICAgU3RhY2ssCisgICAgfTsKKyAgICB1c2luZyBEYXRhID0gVmFyaWFudDxMb2NhbCwg
Q29uc3RhbnQsIFJlZ2lzdGVyLCBTdGFjaz47CisKKyAgICBEYXRhIGRhdGEoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKKyAgICBUeXBlIHR5cGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZTsKKyAgICB9CisKKyAgICBMb2NhdGlvbiBs
b2NhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TG9jYXRp
b24+KG1fZGF0YS5pbmRleCgpKTsKKyAgICB9CisKKyAgICB+U3RhY2tWYWx1ZSgpOworCisgICAg
U3RhY2tWYWx1ZSgpID0gZGVmYXVsdDsKKworICAgIFN0YWNrVmFsdWUoU3RhY2tWYWx1ZSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgc3dhcCh2YWx1ZSk7CisgICAgfQorCisgICAgU3RhY2tWYWx1
ZSYgb3BlcmF0b3I9KFN0YWNrVmFsdWUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN3YXAodmFs
dWUpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZCBzd2FwKFN0YWNr
VmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3RkOjpzd2FwKG1faml0LCB2YWx1ZS5tX2pp
dCk7CisgICAgICAgIHN0ZDo6c3dhcChtX3R5cGUsIHZhbHVlLm1fdHlwZSk7CisgICAgICAgIHN0
ZDo6c3dhcChtX2RhdGEsIHZhbHVlLm1fZGF0YSk7CisgICAgfQorCisgICAgU3RhY2tWYWx1ZShU
ZW1wbGF0ZUpJVCogaml0LCBUeXBlIHR5cGUsIExvY2FsIGxvY2FsKQorICAgICAgICA6IG1faml0
KGppdCkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2RhdGEobG9jYWwpCisg
ICAgeworICAgIH0KKworICAgIFN0YWNrVmFsdWUoVGVtcGxhdGVKSVQqIGppdCwgVHlwZSB0eXBl
LCBDb25zdGFudCBjb25zdGFudCkKKyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwgbV90
eXBlKHR5cGUpCisgICAgICAgICwgbV9kYXRhKGNvbnN0YW50KQorICAgIHsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgVGVtcGxhdGVKSVQqIG1faml0IHsgbnVsbHB0ciB9OworICAgIFR5cGUgbV90
eXBlIHsgVm9pZCB9OworICAgIERhdGEgbV9kYXRhIHsgQ29uc3RhbnQgeyAwIH0gfTsKK307CisK
K2NsYXNzIEJhc2ljQmxvY2sgeworfTsKKworY2xhc3MgQ29udHJvbERhdGEgeworcHVibGljOgor
ICAgIENvbnRyb2xEYXRhKEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24p
CisgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICwgY29udGludWF0aW9uKGNvbnRp
bnVhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgQ29udHJvbERhdGEoKSA9IGRlZmF1bHQ7CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAodHlwZSgpKSB7CisgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAgICAgICAg
IG91dC5wcmludCgiSWY6ICAgICAgICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2s6ICAgICIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAg
ICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgICAgIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAgb3V0LnByaW50KCJU
b3BMZXZlbDogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gYmxvY2tUeXBlOyB9CisKKyAgICBib29s
IGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiByZXN1bHQuc2l6ZSgpOyB9CisK
KyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0ZvckJyYW5jaCgpCisgICAgeworICAgICAgICBp
ZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFs
OworICAgICAgICByZXR1cm4gY29udGludWF0aW9uOworICAgIH0KKworICAgIHZvaWQgY29udmVy
dElmVG9CbG9jaygpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZSgpID09IEJsb2NrVHlwZTo6
SWYpOworICAgICAgICBibG9ja1R5cGUgPSBCbG9ja1R5cGU6OkJsb2NrOworICAgICAgICBzcGVj
aWFsID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPFN0
YWNrVmFsdWU+OyAvLyBTdGFja1ZhbHVlIG11c3QgYmUgZmx1c2hlZC4KKworICAgIGNvbnN0IFJl
c3VsdExpc3QqIHJlc3VsdEZvckJyYW5jaCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAodHlw
ZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gJnJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IEIzSVJHZW5lcmF0b3I7CisgICAgQmxvY2tUeXBlIGJsb2NrVHlwZTsKKyAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb247CisgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKKyAgICBSZXN1bHRMaXN0
IHJlc3VsdDsKK307CisKKworY2xhc3MgVGVtcGxhdGVKSVQgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFRlbXBsYXRlSklUKTsKK3B1YmxpYzoKKyAgICBUZW1wbGF0ZUpJVChjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3Vu
dCosIFRocm93V2FzbUV4Y2VwdGlvbik7CisKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFN0
YWNrVmFsdWU7CisgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKKyAgICB1c2lu
ZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxTdGFja1ZhbHVlPjsKKyAgICB1c2luZyBDb250cm9s
RW50cnkgPSBGdW5jdGlvblBhcnNlcjxUZW1wbGF0ZUpJVD46OkNvbnRyb2xFbnRyeTsKKworICAg
IHVzaW5nIEVycm9yVHlwZSA9IFN0cmluZzsKKyAgICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0g
VW5leHBlY3RlZDxFcnJvclR5cGU+OworICAgIHVzaW5nIFJlc3VsdCA9IEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPjsKKyAgICB1c2luZyBQYXJ0
aWFsUmVzdWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsKKworICAgIHZvaWQgc2V0UGFy
c2VyKEZ1bmN0aW9uUGFyc2VyPFRlbXBsYXRlSklUPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFy
c2VyOyB9OworCisgICAgLy8gbG9jayBhbmQgdW5sb2NrIEdQUiAmIEZQUiByZWdpc3RlcnMuCisg
ICAgdm9pZCBsb2NrKEdQUlJlZyByZWcpCisgICAgeworICAgICAgICBtX2dwcnMubG9jayhyZWcp
OworICAgIH0KKyAgICB2b2lkIGxvY2soRlBSUmVnIHJlZykKKyAgICB7CisgICAgICAgIG1fZnBy
cy5sb2NrKHJlZyk7CisgICAgfQorICAgIHZvaWQgdW5sb2NrKEdQUlJlZyByZWcpCisgICAgewor
ICAgICAgICBtX2dwcnMudW5sb2NrKHJlZyk7CisgICAgfQorICAgIHZvaWQgdW5sb2NrKEZQUlJl
ZyByZWcpCisgICAgeworICAgICAgICBtX2ZwcnMudW5sb2NrKHJlZyk7CisgICAgfQorCisgICAg
R1BSUmVnIGFsbG9jYXRlR1BSKFN0YWNrVmFsdWUmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIElu
dmFsaWRHUFJSZWc7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+Cisg
ICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwo
QXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1
cmVIZWxwZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWls
ZWQgY29tcGlsaW5nOiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisjZGVmaW5l
IFdBU01fQ09NUElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYg
KFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0
dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwor
ICAgIC8vIEZ1bmN0aW9ucyBpbnZva2VkIGJ5IEZ1bmN0aW9uUGFyc2VyLgorICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50
MzJfdCk7CisgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwor
CisgICAgLy8gTG9jYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0
TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
dGVlTG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSk7CisKKyAgICAv
LyBHbG9iYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlIHZhbHVlKTsKKworICAgIC8vIE1lbW9yeQorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBk
ZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKwor
ICAgIC8vIEJhc2ljIG9wZXJhdG9ycworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
RXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CisKKyAgICAvLyBDb250cm9sIGZsb3cKKyAgICBDb250cm9sRGF0YSBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xE
YXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29u
dHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBF
eHByZXNzaW9uTGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25U
eXBlPiBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9s
RGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3Rh
Y2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRy
b2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
Jik7CisKKyAgICAvLyBDYWxscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1
bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVj
dChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9w
dGlvbmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOworCisgICAgdm9pZCBkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBl
eHByZXNzaW9uU3RhY2spOworCitwcml2YXRlOgorICAgIHZvaWQgc3BpbGwodWludDMyX3Qgc3Rh
Y2tTbG90LCBTdGFja1ZhbHVlJik7CisKKyAgICBDQ2FsbEhlbHBlcnMgbV9qaXQ7CisgICAgUmVn
aXN0ZXJCYW5rPEdQUkluZm8+IG1fZ3ByczsKKyAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4gbV9m
cHJzOworICAgIFZlY3RvcjxUeXBlPiBtX2xvY2FsczsKKyAgICBGdW5jdGlvblBhcnNlcjxUZW1w
bGF0ZUpJVD4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBtX2luZm87CisgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZyB9OworICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJ
TlRfTUFYIH07CisgICAgY29uc3QgVGllclVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9Owor
ICAgIFRocm93V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7IG51bGxwdHIgfTsK
K307CisKK2NsYXNzIEdQUk9wZXJhbmQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdQUk9w
ZXJhbmQpOworcHVibGljOgorICAgIEdQUk9wZXJhbmQoVGVtcGxhdGVKSVQqIGppdCwgU3RhY2tW
YWx1ZSYmIHZhbHVlKQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX3ZhbHVlKFdU
Rk1vdmUodmFsdWUpKQorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUubG9jYXRpb24oKSA9PSBT
dGFja1ZhbHVlOjpMb2NhdGlvbjo6UmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIG1fZ3ByID0gV1RG
OjpnZXQ8U3RhY2tWYWx1ZTo6UmVnaXN0ZXI+KG1fdmFsdWUuZGF0YSgpKS5yZWcuZ3ByKCk7Cisg
ICAgICAgICAgICBtX2ppdC0+bG9jayhtX2dwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZUdQUihtX3ZhbHVlKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIH5HUFJPcGVyYW5kKCkKKyAgICB7CisgICAgICAgIG1faml0LT51bmxvY2sobV9n
cHIpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Z3ByOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUZW1wbGF0ZUpJVCogbV9qaXQ7CisgICAgU3Rh
Y2tWYWx1ZSBtX3ZhbHVlOworICAgIEdQUlJlZyBtX2dwciB7IEludmFsaWRHUFJSZWcgfTsKK307
CisKK1N0YWNrVmFsdWU6On5TdGFja1ZhbHVlKCkKK3sKKyAgICBpZiAobV9qaXQpIHsKKyAgICB9
Cit9CisKK1RlbXBsYXRlSklUOjpUZW1wbGF0ZUpJVChjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICA6IG1faW5mbyhpbmZvKQorICAgICwgbV9tb2Rl
KG1vZGUpCisgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKKyAgICAsIG1fdGll
clVwKHRpZXJVcCkKKyAgICAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlv
bikKK3sKKyAgICBVTlVTRURfUEFSQU0oY29tcGlsYXRpb24pOworfQorCithdXRvIFRlbXBsYXRl
SklUOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAgV0FTTV9DT01QSUxF
X0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKKworICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSk7CisKKyAgICAvLyBGSVhNRTogRml4IHRoZSBjb2RlLgorCisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBUZW1wbGF0ZUpJVDo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50
MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IGNvdW50OworICAgIHRvdGFsQnl0ZXND
aGVja2VkICs9IG1fbG9jYWxzLnNpemUoKTsKKyAgICB1aW50MzJfdCB0b3RhbEJ5dGVzOworICAg
IFdBU01fQ09NUElMRV9GQUlMX0lGKCh0b3RhbEJ5dGVzQ2hlY2tlZC5zYWZlR2V0KHRvdGFsQnl0
ZXMpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHx8ICFtX2xvY2Fscy50cnlSZXNlcnZl
Q2FwYWNpdHkodG90YWxCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFs
Qnl0ZXMsICIgbG9jYWxzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBpbnQzMl90IHN0YWNrU2xvdCA9IG1fbG9jYWxzLnNpemUoKTsKKyAg
ICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpBbnlmdW5jOgorICAgICAgICBjYXNlIFR5cGU6OkZ1
bmM6CisgICAgICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAvLyBGSVhN
RTogQWRkcmVzcyBvZmZzZXQgb3ZlcmZsb3cuCisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAg
ICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgLShzdGFja1Nsb3QgKiA4KSkpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAtKHN0YWNrU2xv
dCAqIDgpKSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6OmFkZENvbnN0YW50KFR5cGUgdHlw
ZSwgdWludDY0X3QgYml0cykgLT4gRXhwcmVzc2lvblR5cGUKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFR5cGU6OkFueWZ1bmM6CisgICAgY2FzZSBUeXBlOjpGdW5jOgorICAgIGNh
c2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6
STY0OgorICAgIGNhc2UgVHlwZTo6RjMyOgorICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICBy
ZXR1cm4gU3RhY2tWYWx1ZSB7IHRoaXMsIHR5cGUsIFN0YWNrVmFsdWU6OkNvbnN0YW50IHsgYml0
cyB9IH07CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6Omdl
dExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmVzdWx0ID0gU3Rh
Y2tWYWx1ZSB7IHRoaXMsIG1fbG9jYWxzW2luZGV4XSwgU3RhY2tWYWx1ZTo6TG9jYWwgeyBpbmRl
eCB9IH07CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBUZW1wbGF0ZUpJVDo6c2V0TG9jYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBUZW1wbGF0ZUpJVDo6dGVlTG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6OmdldEdsb2JhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIFRlbXBsYXRlSklUOjpsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6
OnN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBUZW1wbGF0ZUpJVDo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlw
ZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6OmFkZEN1cnJlbnRNZW1vcnkoRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPE9wVHlwZT4KK2F1dG8gVGVtcGxhdGVKSVQ6OmFkZE9wKEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPE9wVHlwZT4KK2F1dG8gVGVtcGxhdGVKSVQ6
OmFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgR1BST3BlcmFuZCBsZWZ0
T3BlcmFuZCh0aGlzLCBXVEZNb3ZlKGxlZnQpKTsKKyAgICBHUFJPcGVyYW5kIHJpZ2h0T3BlcmFu
ZCh0aGlzLCBXVEZNb3ZlKHJpZ2h0KSk7CisKKyAgICBHUFJSZWcgbGVmdEdQUiA9IGxlZnRPcGVy
YW5kLmdwcigpOworICAgIEdQUlJlZyByaWdodEdQUiA9IHJpZ2h0T3BlcmFuZC5ncHIoKTsKKwor
ICAgIG1faml0LmFkZDMyKGxlZnRHUFIsIHJpZ2h0R1BSKTsKKworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gVGVtcGxhdGVKSVQ6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIFRlbXBsYXRlSklUOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkgLT4gQ29udHJvbERh
dGEKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFRlbXBsYXRlSklUOjphZGRCbG9jayhU
eXBlIHNpZ25hdHVyZSkgLT4gQ29udHJvbERhdGEKK3sKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIFRlbXBsYXRlSklUOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKSAtPiBDb250cm9sRGF0YQor
eworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6OmFkZElmKEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFRlbXBsYXRlSklU
OjphZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBUZW1wbGF0ZUpJVDo6YWRkRWxz
ZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBUZW1wbGF0ZUpJVDo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xE
YXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6OmFkZEJyYW5jaChD
b250cm9sRGF0YSYsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+IGNvbmRpdGlvbiwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVKSVQ6OmFkZFN3aXRjaChFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250
cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFRl
bXBsYXRlSklUOjplbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVz
c2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBUZW1wbGF0ZUpJVDo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBUZW1wbGF0ZUpJVDo6YWRk
Q2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9uVHlwZT4mIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gVGVtcGxhdGVK
SVQ6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBUZW1wbGF0ZUpJVDo6YWRk
VW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dm9pZCBUZW1wbGF0ZUpJVDo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJv
bFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKQoreworfQorCitF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1
aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9k
ZSBtb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0g
c3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25D
b250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxw
ZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6
bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworCisgICAgVGVtcGxhdGVKSVQgY29tcGlsZXIo
aW5mbywgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgZnVuY3Rp
b25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEZ1bmN0aW9uUGFyc2Vy
PFRlbXBsYXRlSklUPiBwYXJzZXIoY29tcGlsZXIsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VyLnBhcnNlKCkpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworCisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGVtcGxhdGVKSVQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UZW1wbGF0ZUpJVC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjUyNmRkMjQ1MTc3MDc5M2NjNDg0ZWI3NGU1OWI1YjVjNTMxYmUzMjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGVtcGxhdGVKSVQuaApAQCAt
MCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1
c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCBlYTRhNzU5OGZhMDQ5NTQ0Zjg3Njg0
YTUwZTNjZmNiOTEzMTA4ZWFmLi44NzY2OWVhMDhlMzg2NWMzOWFmMWFmNjI5NmE4MDM5ZmZlZDRl
YjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAg
LTgzLDggKzgzLDYgQEAgY2xhc3MgVmFsaWRhdGUgewogICAgIHR5cGVkZWYgVmVjdG9yPEV4cHJl
c3Npb25UeXBlLCAxPiBFeHByZXNzaW9uTGlzdDsKICAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2Vy
PFZhbGlkYXRlPjo6Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsKIAotICAgIHN0YXRpYyBjb25z
dCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBWb2lkOwotCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAogICAgIHsKQEAgLTEwMyw2
ICsxMDEsNyBAQCBjbGFzcyBWYWxpZGF0ZSB7CiAgICAgLy8gTG9jYWxzCiAgICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gdGVlTG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSk7CiAK
ICAgICAvLyBHbG9iYWxzCiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRHbG9iYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtMTI4LDcgKzEyNyw3
IEBAIGNsYXNzIFZhbGlkYXRlIHsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVs
c2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKICAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFJldHVybihDb250cm9sRGF0YSYgdG9wTGV2ZWwsIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXR1cm5WYWx1ZXMpOwotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJh
bmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEJyYW5jaChDb250cm9sRGF0YSYsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+IGNv
bmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1
bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwogICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwpAQCAtMTM4LDggKzEzNyw4IEBAIGNs
YXNzIFZhbGlkYXRlIHsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hh
YmxlKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwotICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7Ci0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29u
c3QgU2lnbmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
KHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9wdGlvbmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0
KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBT
aWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBzdGQ6Om9wdGlv
bmFsPEV4cHJlc3Npb25UeXBlPiYgcmVzdWx0KTsKIAogICAgIGJvb2wgaGFzTWVtb3J5KCkgY29u
c3QgeyByZXR1cm4gISFtX21vZHVsZS5tZW1vcnk7IH0KIApAQCAtMTkyLDYgKzE5MSwxMSBAQCBh
dXRvIFZhbGlkYXRlOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFs
dWUpIC0+IFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gVmFsaWRhdGU6OnRlZUxv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFJlc3VsdAorewor
ICAgIHJldHVybiBzZXRMb2NhbChpbmRleCwgdmFsdWUpOworfQorCiBhdXRvIFZhbGlkYXRlOjpn
ZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3Vs
dAogewogICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9tb2R1bGUuZ2xvYmFs
cy5zaXplKCksICJnZXRfZ2xvYmFsICIsIGluZGV4LCAiIG9mIHVua25vd24gZ2xvYmFsLCBsaW1p
dCBpcyAiLCBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSk7CkBAIC0yNzUsMTAgKzI3OSwxMCBAQCBh
dXRvIFZhbGlkYXRlOjpjaGVja0JyYW5jaFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0LCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgZXhwcgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRh
dGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBzdGFjaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRl
OjphZGRCcmFuY2goQ29udHJvbFR5cGUmIHRhcmdldCwgc3RkOjpvcHRpb25hbDxFeHByZXNzaW9u
VHlwZT4gY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgc3RhY2spIC0+IFJlc3VsdAog
ewogICAgIC8vIFZvaWQgbWVhbnMgdGhpcyBpcyBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaC4KLSAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBWb2lkICYmIGNvbmRpdGlvbiAh
PSBJMzIsICJjb25kaXRpb25hbCBicmFuY2ggd2l0aCBub24taTMyIGNvbmRpdGlvbiAiLCBjb25k
aXRpb24pOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICYmIGNvbmRpdGlv
bi52YWx1ZSgpICE9IEkzMiwgImNvbmRpdGlvbmFsIGJyYW5jaCB3aXRoIG5vbi1pMzIgY29uZGl0
aW9uICIsIGNvbmRpdGlvbi52YWx1ZSgpKTsKICAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQo
dGFyZ2V0LCBzdGFjayk7CiB9CiAKQEAgLTMyMSwxOCArMzI1LDE5IEBAIGF1dG8gVmFsaWRhdGU6
OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkgLT4gUmVzdWx0CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbCh1bnNpZ25lZCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkQ2Fs
bCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQp
IC0+IFJlc3VsdAogewogICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSAhPSBhcmdzLnNpemUoKSwgImFyaXR5IG1pc21hdGNoIGluIGNhbGwsIGdvdCAi
LCBhcmdzLnNpemUoKSwgIiBhcmd1bWVudHMsIGV4cGVjdGVkICIsIHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyAr
K2kpCiAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnc1tpXSAhPSBzaWduYXR1cmUu
YXJndW1lbnQoaSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGwsIGdvdCAiLCBhcmdz
W2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUuYXJndW1lbnQoaSkpOwogCi0gICAgcmVzdWx0
ID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBpZiAoc2lnbmF0dXJlLnJldHVyblR5cGUo
KSAhPSBWb2lkKQorICAgICAgICByZXN1bHQgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdChjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIHN0ZDo6b3B0aW9uYWw8RXhwcmVzc2lvblR5cGU+JiByZXN1bHQpIC0+
IFJlc3VsdAogewogICAgIGNvbnN0IGF1dG8gYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7CiAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmd1bWVudENvdW50ICE9
IGFyZ3Muc2l6ZSgpIC0gMSwgImFyaXR5IG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAi
LCBhcmdzLnNpemUoKSAtIDEsICIgYXJndW1lbnRzLCBleHBlY3RlZCAiLCBhcmd1bWVudENvdW50
KTsKQEAgLTM0Miw3ICszNDcsOCBAQCBhdXRvIFZhbGlkYXRlOjphZGRDYWxsSW5kaXJlY3QoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaQogCiAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRihhcmdzLmxhc3QoKSAhPSBJMzIsICJub24taTMyIGNhbGxfaW5k
aXJlY3QgaW5kZXggIiwgYXJncy5sYXN0KCkpOwogCi0gICAgcmVzdWx0ID0gc2lnbmF0dXJlLnJl
dHVyblR5cGUoKTsKKyAgICBpZiAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSAhPSBWb2lkKQorICAg
ICAgICByZXN1bHQgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwogICAgIHJldHVybiB7IH07CiB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360163</attachid>
            <date>2019-01-25 14:23:09 -0800</date>
            <delta_ts>2019-01-25 15:19:51 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>127458</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNzU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1
cmUuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNp
bmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlw
ZS5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgIldhc21JbnN0
YW5jZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtT01HUGxhbi5o
IgorI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJl
SW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlIDxsaW1pdHM+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit1c2luZyBuYW1lc3BhY2UgQWly
OworCitjbGFzcyBBaXJJUkdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IENvbnRyb2xE
YXRhIHsKKyAgICAgICAgQ29udHJvbERhdGEoUHJvY2VkdXJlJiBwcm9jLCBPcmlnaW4gb3JpZ2lu
LCBUeXBlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgICAgICA6IGJsb2NrVHlw
ZSh0eXBlKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9uKQorICAgICAg
ICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzaWdu
YXR1cmUgIT0gVm9pZCkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHByb2MuYWRkPFZh
bHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZSksIG9yaWdpbikpOworICAgICAgICB9CisKKyAg
ICAgICAgQ29udHJvbERhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIklmOiAgICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9vcDog
ICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5
cGU6OlRvcExldmVsOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnBy
aW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOworICAg
ICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCpzcGVjaWFs
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUiKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gYmxv
Y2tUeXBlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2Nr
Rm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5
cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAgICBy
ZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0SWZU
b0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9ja1R5
cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7CisgICAg
ICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6
IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAsIDE+
OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRGb3JC
cmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2Nr
VHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tUeXBl
OworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxvY2sq
IHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgIH07CisKKyAgICB1c2lu
ZyBFeHByZXNzaW9uVHlwZSA9IFRtcDsKKyAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xE
YXRhOworICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAx
PjsKKyAgICB1c2luZyBSZXN1bHRMaXN0IENvbnRyb2xEYXRhOjpSZXN1bHRMaXN0OworICAgIHVz
aW5nIENvbnRyb2xFbnRyeSA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6Q29udHJv
bEVudHJ5OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJl
c3Npb24gPSBUbXAgeyB9OworCisgICAgdXNpbmcgRXJyb3JUeXBlID0gU3RyaW5nOworICAgIHVz
aW5nIFVuZXhwZWN0ZWRSZXN1bHQgPSBVbmV4cGVjdGVkPEVycm9yVHlwZT47CisgICAgdXNpbmcg
UmVzdWx0ID0gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJv
clR5cGU+OworICAgIHVzaW5nIFBhcnRpYWxSZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBFcnJvclR5
cGU+OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5F
IFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBj
b25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNl
ZSBBREwgY29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
UmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5nOiAi
X3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisKKyNkZWZpbmUgV0FTTV9DT01QSUxF
X0ZBSUxfSUYoY29uZGl0aW9uLCAuLi4pIGRvIHsgXAorICAgICAgICBpZiAoVU5MSUtFTFkoY29u
ZGl0aW9uKSkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZB
X0FSR1NfXyk7ICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJsb2Nr
LCBBaXI6OktpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgLy8gT09QUzogQWRkIG9yaWdpbgorICAgICAgICBibG9jay0+YXBwZW5kKGtpbmQsIG51bGxw
dHIsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBaXI6Oktp
bmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXBwZW5k
KG1fY3VycmVudEJsb2NrLCBraW5kLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKTsKKyAgICB9CisKKyAgICBUbXAgdG1wKEJhbmsgYmFuaykgeyByZXR1cm4gbV9jb2RlLm5l
d1RtcChiYW5rKTsgfQorICAgIFRtcCBncHIoKSB7IHJldHVybiB0bXAoR1ApOyB9CisgICAgVG1w
IGZwcigpIHsgcmV0dXJuIHRtcChGUCk7IH0KKworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOwor
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExv
Y2FsKFR5cGUsIHVpbnQzMl90KTsKKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBl
LCB1aW50NjRfdCk7CisKKyAgICAvLyBMb2NhbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAgIC8vIEdsb2JhbHMKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRHbG9iYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwor
CisgICAgLy8gTWVtb3J5CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9h
ZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0LCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
dXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQmFzaWMgb3Bl
cmF0b3JzCisgICAgdGVtcGxhdGU8T3BUeXBlPgorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgdGVtcGxhdGU8T3BUeXBlPgorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBu
b25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKwor
ICAgIC8vIENvbnRyb2wgZmxvdworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVyZSk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNp
Z25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFi
bGUoQ29udHJvbERhdGEmKTsKKworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5j
aChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRy
b2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5k
VG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKKworICAgIC8vIENhbGxzCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CisKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZFNoaWZ0
KEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEludGVnZXJTdWIo
S2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QWJz
KEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQb2ludEJpbk9wKEtpbmQga2luZCwgRXhw
cmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworCisKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRy
b2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjayk7CisgICAgdm9p
ZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9w
YXJzZXIgPSBwYXJzZXI7IH07CisKKyAgICBUbXAgY29uc3RhbnQoQjM6OlR5cGUsIHVpbnQ2NF90
IGJpdHMsIE9wdGlvbmFsPE9yaWdpbj4gPSBXVEY6Om51bGxvcHQpOworICAgIHZvaWQgaW5zZXJ0
Q29uc3RhbnRzKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0Nh
bGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisKKyAgICB2b2lkIGVtaXRUaWVyVXBDaGVjayh1
aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgT3JpZ2luKTsKKworICAgIEV4cHJlc3Npb25UeXBlIGVt
aXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOworICAgIEIzOjpLaW5kIG1lbW9yeUtpbmQoQjM6
Ok9wY29kZSBtZW1vcnlPcCk7CisgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BU
eXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQg
ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Np
b25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworCisgICAgdm9pZCB1bmlmeShjb25zdCBF
eHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7CisgICAgdm9p
ZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ss
IGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKworICAgIHZvaWQgZW1pdENoZWNrc0Zvck1vZE9y
RGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
KTsKKworICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZz
ZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CisKKyAgICB2b2lkIHJlc3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlKFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBUbXApOworICAgIGVudW0gY2xh
c3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVzIH07CisgICAgdm9pZCByZXN0b3Jl
V2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVt
b3J5SW5mb3JtYXRpb24mLCBUbXAgaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsK
KworICAgIE9yaWdpbiBvcmlnaW4oKTsKKworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJh
dG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nIH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2Rl
IHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5j
dGlvbkluZGV4IHsgVUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAg
eyBudWxscHRyIH07CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBt
X2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2Fs
czsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3
aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgSGFzaE1hcDxWYWx1
ZUtleSwgVG1wPiBtX2NvbnN0YW50UG9vbDsKKyAgICBJbnNlcnRpb25TZXQgbV9jb25zdGFudElu
c2VydGlvblZhbHVlczsKKyAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJl
ZyB9OworICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
R1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBi
b29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CisKKyAgICBUbXAgbV9pbnN0YW5jZVZhbHVlIHsg
bnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0byBlbnN1cmUgdGhl
IGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCisgICAgYm9vbCBtX3Vz
ZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBUbXAgaW5zdGFuY2VWYWx1ZSgpCisgICAg
eworICAgICAgICBtX3VzZXNJbnN0YW5jZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1f
aW5zdGFuY2VWYWx1ZTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBtX21heE51bUpTQ2FsbEFyZ3Vt
ZW50cyB7IDAgfTsKK307CisKKy8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZl
IHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0
IG9mZnNldHMgaW4gQjMuCitpbnQzMl90IEFpcklSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVz
T2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgIHB0ciA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgcHRyLCBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
b2Zmc2V0KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0Owor
fQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9j
ZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBUbXAgYXJnKQoreworICAgIGlmIChDb250
ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmln
aW4oKSk7CisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYg
YWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VO
ZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVdh
c21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBj
YWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJl
c3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAg
Ly8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50UmVnIHRvIHRoaXMgKGxvZ2lj
YWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZv
aWQsIE9yaWdpbigpKTsKKyAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Cisg
ICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6
SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKKyAg
ICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFIpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IG1f
d2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bSkgeworICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5j
ZUdQUik7CisgICAgfSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFs
RnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBj
b21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVy
VXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBtX2luZm8o
aW5mbykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9jb21waWxhdGlvbk1vZGUoY29tcGls
YXRpb25Nb2RlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCisgICAgLCBt
X3RpZXJVcCh0aWVyVXApCisgICAgLCBtX3Byb2MocHJvY2VkdXJlKQorICAgICwgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKKyAgICAsIG1fY29uc3Rh
bnRJbnNlcnRpb25WYWx1ZXMobV9wcm9jKQoreworICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9j
LmFkZEJsb2NrKCk7CisKKyAgICAvLyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwaW4g
cmVnaXN0ZXJzIGhlcmUgaWYgdGhlcmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdhc20gLT4gd2Fz
bSB0aHVua3Mgc2ltcGxlciBmb3Igbm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY2NjIzCisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdz
ID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBp
bm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVt
b3J5QmFzZUdQUik7CisKKyAgICBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdz
Lndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOworICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRM
UygpKQorICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BS
KTsKKworICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICBB
U1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAg
bV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3Rl
cjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDog
cGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVy
KHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0
aW9uKQorICAgICAgICBUaHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0
aHJvd1dhc21FeGNlcHRpb24pOworCisgICAgaWYgKGluZm8ubWVtb3J5KSB7CisgICAgICAgIG1f
cHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIHBpbm5lZEdQUikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsK
KyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRH
UFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIElu
dmFsaWRHUFJSZWcgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2Vw
dGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25h
bGluZzoKKyAgICAgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBt
b2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRpb24gY2hlY2sg
YmVjYXVzZSB0aGV5IGNhbiByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAgICAg
ICAgICAgLy8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0
aGVsZXNzIG5lZWRzIHRoZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBp
dCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVu
a3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9y
KSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJv
bG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCks
IG1fY3VycmVudEJsb2NrKTsKKworICAgIHsKKyAgICAgICAgQjM6OlRtcCBmcmFtZVBvaW50ZXIg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQ
b2ludGVyLCBPcmlnaW4oKSk7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHN0YWNrT3Zl
cmZsb3dDaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CisgICAgICAgIG1faW5zdGFuY2VW
YWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5h
cHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKTsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAg
ICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
QmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdp
c3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRo
ZSBjYWxsZXIgc2lkZS4KKyAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2lu
ZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0
ZXIuCisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVk
ID0gZmFsc2U7CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQ
aW5uZWQgPSB0cnVlOworICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25z
dHJhaW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgICAg
ICB9CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0g
MjsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBwYXJh
bXMucHJvYygpLmZyYW1lU2l6ZSgpOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbWluaW11
bVBhcmVudENoZWNrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dEJ5dGVzKCksIDEwMjQpOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0cmFGcmFtZVNp
emUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGQ6
Om1heDx1aW50MzJfdD4oCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZWxp
ZGUgc3RhY2sgY2hlY2tzIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgdGVybWluYWwgbm9kZXMgaW4g
dGhlIGNhbGwKKyAgICAgICAgICAgICAgICAvLyB0cmVlLCAoZS5nIHRoZXkgZG9uJ3QgbWFrZSBh
bnkgY2FsbHMpIGFuZCBoYXZlIGEgc21hbGwgZW5vdWdoIGZyYW1lIHNpemUuIFRoaXMgd29ya3Mg
YnkKKyAgICAgICAgICAgICAgICAvLyBoYXZpbmcgYW55IHN1Y2ggdGVybWluYWwgbm9kZSBoYXZl
IGl0cyBwYXJlbnQgY2FsbGVyIGluY2x1ZGUgc29tZSBleHRyYSBzaXplIGluIGl0cworICAgICAg
ICAgICAgICAgIC8vIG93biBjaGVjayBmb3IgaXQuIFRoZSBnb2FsIGhlcmUgaXMgdHdvZm9sZDoK
KyAgICAgICAgICAgICAgICAvLyAxLiBFbWl0IGxlc3MgY29kZS4KKyAgICAgICAgICAgICAgICAv
LyAyLiBUcnkgdG8gc3BlZWQgdGhpbmdzIHVwIGJ5IHNraXBwaW5nIHN0YWNrIGNoZWNrcy4KKyAg
ICAgICAgICAgICAgICBtaW5pbXVtUGFyZW50Q2hlY2tTaXplLAorICAgICAgICAgICAgICAgIC8v
IFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBpbiB0aGUgV2FzbSAtPiBFbWJl
ZGRlciBjYWxsIElDIHN0dWIuIFNpbmNlIHRoZXNlIHdpbGwKKyAgICAgICAgICAgICAgICAvLyBz
cGlsbCBhbGwgYXJndW1lbnRzIHRvIHRoZSBzdGFjaywgd2UgZW5zdXJlIHRoYXQgYSBzdGFjayBj
aGVjayBoZXJlIGNvdmVycyB0aGUKKyAgICAgICAgICAgICAgICAvLyBzdGFjayB0aGF0IHN1Y2gg
YSBzdHViIHdvdWxkIHVzZS4KKyAgICAgICAgICAgICAgICAoQ2hlY2tlZDx1aW50MzJfdD4obV9t
YXhOdW1KU0NhbGxBcmd1bWVudHMpICogc2l6ZW9mKFJlZ2lzdGVyKSArIGpzY0NhbGxpbmdDb252
ZW50aW9uKCkuaGVhZGVyU2l6ZUluQnl0ZXMoKSkudW5zYWZlR2V0KCkKKyAgICAgICAgICAgICkp
OworICAgICAgICAgICAgY29uc3QgaW50MzJfdCBjaGVja1NpemUgPSBtX21ha2VzQ2FsbHMgPyAo
d2FzbUZyYW1lU2l6ZSArIGV4dHJhRnJhbWVTaXplKS51bnNhZmVHZXQoKSA6IHdhc21GcmFtZVNp
emUudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVjayA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6
ZSgpOworICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2VzQ2FsbHMg
fHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZs
b3dDaGVjazsKKworICAgICAgICAgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6
OnVzZUZhc3RUTFMoKSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQ
UjsKKworICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgbGVhZiBmdW5jdGlvbnMgdG8gbm90IGRv
IHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXplIGlzIHdpdGhpbgorICAgICAgICAgICAg
Ly8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2FsbGVyIHdvdWxkIGhhdmUgYWxyZWFkeSBk
b25lIHRoZSBjaGVjay4KKyAgICAgICAgICAgIGlmIChuZWVkc092ZXJmbG93Q2hlY2spIHsKKyAg
ICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGZwID0gcGFyYW1zWzFdLmdwcigpOworICAg
ICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKworICAg
ICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworCisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHRJbnN0
YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOwor
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNo
ZWNrU2l6ZSksIGZwLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG92ZXJmbG93OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5k
ZXJmbG93Q2hlY2spKQorICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJy
YW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoMSwgZnApKTsKKyAgICAgICAgICAg
ICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93LCBz
Y3JhdGNoMSwgc2NyYXRjaDIpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292
ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFn
PihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVu
a0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7
CisgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhl
IGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgorICAgICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIEND
YWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lz
dGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250
ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBi
ZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBz
YWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQg
aXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
IH0KKworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeURlY3Jl
bWVudCgpLCBPcmlnaW4oKSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJB
c3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBUbXAgaW5zdGFuY2Us
IFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVzdG9yZVdhc21D
b250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlmIChyZXN0b3Jl
Q2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CisgICAg
ICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93
cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBUbXAgcG9pbnRlclRv
QWN0dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwg
c2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tM
aW1pdCgpKSk7CisgICAgICAgIFRtcCBhY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCk7CisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCBhY3R1YWxT
dGFja0xpbWl0LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgIH0KKworICAgIGlmICghIW1lbW9yeSkg
eworICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVk
UmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CisgICAg
ICAgIGNsb2JiZXJzLnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAg
IGZvciAoYXV0byBpbmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAg
IGNsb2JiZXJzLnNldChpbmZvLnNpemVSZWdpc3Rlcik7CisKKyAgICAgICAgQjM6OlBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1
ZT4ocHJvYywgQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0g
RWZmZWN0czo6bm9uZSgpOworICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Cisg
ICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
Y2xvYmJlcnMpOworCisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZSwgVmFsdWVS
ZXA6OlNvbWVSZWdpc3Rlcik7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtw
aW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5u
ZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVS
ZWdzID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXpl
UmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVP
ZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQg
Y2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigp
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXpl
UmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0pOworICAgIH0KK30KKwor
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYgaml0
LCBFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvblN0dWIgPSBqaXQuanVtcCgpOworCisgICAg
aml0LmFkZExpbmtUYXNrKFtqdW1wVG9FeGNlcHRpb25TdHViXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9uU3R1YiwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIH0pOwor
fQorCitUbXAgQWlySVJHZW5lcmF0b3I6OmNvbnN0YW50KEIzOjpUeXBlIHR5cGUsIHVpbnQ2NF90
IGJpdHMsIE9wdGlvbmFsPE9yaWdpbj4gbWF5YmVPcmlnaW4pCit7CisgICAgYXV0byByZXN1bHQg
PSBtX2NvbnN0YW50UG9vbC5lbnN1cmUoVmFsdWVLZXkob3Bjb2RlRm9yQ29uc3RhbnQodHlwZSks
IHR5cGUsIHN0YXRpY19jYXN0PGludDY0X3Q+KGJpdHMpKSwgWyZdIHsKKyAgICAgICAgVG1wIHJl
c3VsdCA9IG1fcHJvYy5hZGRDb25zdGFudChtYXliZU9yaWdpbiA/ICptYXliZU9yaWdpbiA6IG9y
aWdpbigpLCB0eXBlLCBiaXRzKTsKKyAgICAgICAgbV9jb25zdGFudEluc2VydGlvblZhbHVlcy5p
bnNlcnRWYWx1ZSgwLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0pOwor
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIEFpcklSR2VuZXJh
dG9yOjppbnNlcnRDb25zdGFudHMoKQoreworICAgIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMu
ZXhlY3V0ZShtX3Byb2MuYXQoMCkpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRMb2Nh
bChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ2hl
Y2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gY291bnQ7
CisgICAgdG90YWxCeXRlc0NoZWNrZWQgKz0gbV9sb2NhbHMuc2l6ZSgpOworICAgIHVpbnQzMl90
IHRvdGFsQnl0ZXM7CisgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoKHRvdGFsQnl0ZXNDaGVja2Vk
LnNhZmVHZXQodG90YWxCeXRlcykgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgfHwgIW1f
bG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eSh0b3RhbEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIG1l
bW9yeSBmb3IgIiwgdG90YWxCeXRlcywgIiBsb2NhbHMiKTsKKworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIFZhcmlhYmxlKiBsb2NhbCA9IG1fcHJv
Yy5hZGRWYXJpYWJsZSh0b0IzVHlwZSh0eXBlKSk7CisgICAgICAgIG1fbG9jYWxzLnVuY2hlY2tl
ZEFwcGVuZChsb2NhbCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFyaWFi
bGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBsb2NhbCwgY29uc3RhbnQodG9CM1R5cGUo
dHlwZSksIDAsIE9yaWdpbigpKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKKyAgICBX
QVNNX0NPTVBJTEVfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOworCisgICAgbV9sb2NhbHMuZ3Jvdyhz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5s
b2FkQXJndW1lbnRzKHNpZ25hdHVyZSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgT3JpZ2luKCks
CisgICAgICAgIFs9XSAoRXhwcmVzc2lvblR5cGUgYXJndW1lbnQsIHVuc2lnbmVkIGkpIHsKKyAg
ICAgICAgICAgIFZhcmlhYmxlKiBhcmd1bWVudFZhcmlhYmxlID0gbV9wcm9jLmFkZFZhcmlhYmxl
KGFyZ3VtZW50LT50eXBlKCkpOworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBhcmd1bWVudFZh
cmlhYmxlOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZh
bHVlPihtX3Byb2MsIFNldCwgT3JpZ2luKCksIGFyZ3VtZW50VmFyaWFibGUsIGFyZ3VtZW50KTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKKyAgICByZXN1bHQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwg
b3JpZ2luKCksIG1fbG9jYWxzW2luZGV4XSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
QjM6OlBhdGNocG9pbnRWYWx1ZSogdW5yZWFjaGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAg
ICB1bnJlYWNoYWJsZS0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6OlVucmVhY2hhYmxlKTsKKyAgICB9KTsK
KyAgICB1bnJlYWNoYWJsZS0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlw
ZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IGludDMyX3QgKCpncm93TWVtb3J5KSh2b2lkKiwgSW5zdGFuY2UqLCBpbnQzMl90KSA9IFtdICh2
b2lkKiBjYWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkgLT4gaW50
MzJfdCB7CisgICAgICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOwor
CisgICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAg
ICAgYXV0byBncm93biA9IGluc3RhbmNlLT5tZW1vcnkoKS0+Z3JvdyhQYWdlQ291bnQoZGVsdGEp
KTsKKyAgICAgICAgaWYgKCFncm93bikgeworICAgICAgICAgICAgc3dpdGNoIChncm93bi5lcnJv
cigpKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRE
ZWx0YToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZEdy
b3dTaXplOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpXb3VsZEV4
Y2VlZE1heGltdW06CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246Ok91
dE9mTWVtb3J5OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKKyAgICB9OworCisgICAgcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDMy
LCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGdyb3dNZW1vcnks
IEIzQ0NhbGxQdHJUYWcpKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKCkpLCBpbnN0YW5jZVZhbHVl
KCksIGRlbHRhKTsKKworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVD
YWNoZWRTdGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3By
b2MsIG1fY3VycmVudEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0YXRpY19j
YXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29k
ZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgVG1wIHNpemUgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNo
ZWRNZW1vcnlTaXplKCkpKTsKKworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0g
MTY7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hp
ZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0
LiIpOworICAgIFRtcCBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgWlNociwgb3JpZ2luKCksCisgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7CisK
KyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRy
dW5jLCBvcmlnaW4oKSwgbnVtUGFnZXMpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7Cisg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpT
ZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0sIHZhbHVlKTsKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgZ2xvYmFsc0Fy
cmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKKyAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKG1f
aW5mby5nbG9iYWxzW2luZGV4XS50eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNh
c3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVCh0b0IzVHlw
ZShtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZSkgPT0gdmFsdWUtPnR5cGUoKSk7CisgICAgVG1w
IGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2Fm
ZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSk7CisgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCks
IHZhbHVlLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOworICAgIHJldHVybiB7IH07Cit9CisKK2lubGluZSBUbXAgQWlySVJHZW5lcmF0
b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVp
bnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQoreworICAgIEFTU0VSVCht
X21lbW9yeUJhc2VHUFIpOworCisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CisgICAgICAgIC8vIFdlJ3JlIG5vdCB1c2luZyBzaWdu
YWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9yZSBjaGVjayB0aGF0IG5vIG1lbW9y
eSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkgc2l6ZS4KKyAgICAgICAgQVNTRVJU
KG1fbWVtb3J5U2l6ZUdQUik7CisgICAgICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZz
ZXQgPiBvZmZzZXQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3Vu
ZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBtX21lbW9yeVNpemVHUFIsIHBvaW50ZXIs
IHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogeworICAgICAgICAvLyBXZSd2ZSB2aXJ0
dWFsbHkgbWFwcGVkIDRHaUIrcmVkem9uZSBmb3IgdGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVzZXIt
YWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29udGlndW91c2x5IGluIHJhbmdlIFsw
LCBjdXJyZW50XSwKKyAgICAgICAgLy8gYW5kIGV2ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBS
T1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hl
Y2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3NlbWJseSByZWdpc3RlcgorICAgICAg
ICAvLyBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdp
c3RlciArIG9mZnNldCBhY2Nlc3NlcyBwZXJmb3JtIHRoZSBhZGRpdGlvbiBpbiA2NC1iaXQgd2hp
Y2ggY2FuIHB1c2ggYW4gYWNjZXNzIGFib3ZlCisgICAgICAgIC8vIHRoZSAzMi1iaXQgbGltaXQg
KHRoZSBvZmZzZXQgaXMgdW5zaWduZWQgMzItYml0KS4gVGhlIHJlZHpvbmUgd2lsbCBjYXRjaCBt
b3N0IHNtYWxsIG9mZnNldHMsIGFuZCB3ZSdsbCBleHBsaWNpdGx5IGJvdW5kcyBjaGVjayBhbnkK
KyAgICAgICAgLy8gcmVnaXN0ZXIgKyBsYXJnZSBvZmZzZXQgYWNjZXNzLiBXZSBkb24ndCB0aGlu
ayB0aGlzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyZXF1ZW50bHkuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFdlIGNvdWxkIGNoZWNrIHRoYXQgcmVnaXN0ZXIgKyBsYXJnZSBvZmZzZXQgZG9lc24ndCBl
eGNlZWQgNEdpQityZWR6b25lIHNpbmNlIHRoYXQncyB0ZWNobmljYWxseSB0aGUgbGltaXQgd2Ug
bmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZyB0aGUKKyAgICAgICAgLy8gUFJPVF9OT05FIHJlZ2lv
biwgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBhIHNtYWxsZXIgaW1tZWRpYXRlIGJlY2F1c2Ug
aXQgY2FuIGNvZGVnZW5zIGJldHRlci4gV2Uga25vdyB0aGF0IGFueXRoaW5nIGVxdWFsIHRvIG9y
IGdyZWF0ZXIKKyAgICAgICAgLy8gdGhhbiB0aGUgZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJh
cCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5v
IGRlY2xhcmVkICdtYXhpbXVtJyB0aGVuIHdlIHN0aWxsIGtub3cgdGhhdAorICAgICAgICAvLyBh
bnkgYWNjZXNzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA0R2lCIHdpbGwgdHJhcCwgbm8gbmVl
ZCB0byBhZGQgdGhlIHJlZHpvbmUuCisgICAgICAgIGlmIChvZmZzZXQgPj0gTWVtb3J5OjpmYXN0
TWFwcGVkUmVkem9uZUJ5dGVzKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBtYXhpbXVtID0gbV9p
bmZvLm1lbW9yeS5tYXhpbXVtKCkgPyBtX2luZm8ubWVtb3J5Lm1heGltdW0oKS5ieXRlcygpIDog
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgcG9pbnRlciwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbWF4aW11bSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHBvaW50ZXIgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIHBv
aW50ZXIpOworICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21BZGRyZXNz
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7Cit9CisK
K2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKK3sKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDE2VToKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJM
b2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOgorICAgICAgICBy
ZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpGNjRMb2FkOgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIEIzOjpLaW5kIEFpcklSR2VuZXJhdG9yOjpt
ZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApCit7CisgICAgaWYgKG1fbW9kZSA9PSBNZW1v
cnlNb2RlOjpTaWduYWxpbmcpCisgICAgICAgIHJldHVybiB0cmFwcGluZyhtZW1vcnlPcCk7Cisg
ICAgcmV0dXJuIG1lbW9yeU9wOworfQorCitpbmxpbmUgVG1wIEFpcklSR2VuZXJhdG9yOjplbWl0
TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IHVv
ZmZzZXQpCit7CisgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBv
aW50ZXIsIHVvZmZzZXQpOworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STMyTG9hZDhTOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhTKSwgb3JpZ2luKCksIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6IHsK
KyAgICAgICAgVG1wIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOFU6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFopLCBvcmlnaW4oKSwgcG9pbnRl
ciwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VTogewor
ICAgICAgICBUbXAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDhaKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7
CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFpFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQxNlM6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZTKSwgb3JpZ2luKCksIHBvaW50
ZXIsIG9mZnNldCk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOiB7
CisgICAgICAgIFRtcCB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZTKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIFNFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQxNlU6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZaKSwgb3JpZ2luKCksIHBv
aW50ZXIsIG9mZnNldCk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZV
OiB7CisgICAgICAgIFRtcCB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkMTZaKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9m
ZnNldCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRP
cFR5cGU6OkkzMkxvYWQ6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50MzIsIG9yaWdpbigp
LCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDMyVTogeworICAgICAgICBUbXAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDMyLCBvcmlnaW4oKSwgcG9p
bnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAgICAgICBUbXAgdmFsdWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCks
IEludDMyLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4oKSwgdmFs
dWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDogeworICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1v
cnlLaW5kKExvYWQpLCBJbnQ2NCwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCks
IEZsb2F0LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkY2NExvYWQ6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRG91YmxlLCBvcmln
aW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWlu
dDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBvaW50ZXItPnR5
cGUoKSA9PSBJbnQzMik7CisKKyAgICBpZiAoVU5MSUtFTFkoc3VtT3ZlcmZsb3dzPHVpbnQzMl90
PihvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZlbiB0
aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRp
b24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVudGlt
ZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBCMzo6UGF0Y2hwb2ludFRtcCB0
aHJvd0V4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgICAgICB0aHJvd0V4Y2VwdGlv
bi0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAg
ICAgIH0pOworCisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okkz
MkxvYWQxNlU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgICAgICAg
ICAgcmVzdWx0ID0gY29uc3RhbnQoSW50MzIsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQ4VToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgICAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDMyUzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOgorICAgICAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgICAgICByZXN1bHQgPSBjb25zdGFu
dChJbnQ2NCwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBl
OjpGMzJMb2FkOgorICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoRmxvYXQsIDApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KERvdWJsZSwgMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3As
IGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9w
KG9wKSksIG9mZnNldCk7CisKKyAgICByZXR1cm4geyB9OworfQorCitpbmxpbmUgdWludDMyX3Qg
c2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUx
NjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTE2OgorICAgICAgICByZXR1cm4gMjsK
KyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
NjRTdG9yZTMyOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3JlOgorICAgICAgICByZXR1
cm4gNDsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICBjYXNlIFN0b3JlT3BU
eXBlOjpGNjRTdG9yZToKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKworaW5saW5lIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVt
aXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAgICBpbnQzMl90IG9mZnNldCA9
IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBzd2l0Y2gg
KG9wKSB7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgICAgICB2YWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbigp
LCB2YWx1ZSk7CisgICAgICAgIEZBTExUSFJPVUdIOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6
STMyU3RvcmU4OgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmU4KSwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLCBv
ZmZzZXQpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9y
ZTE2OgorICAgICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgVHJ1bmMsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgICAgIEZBTExUSFJPVUdIOworCisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlMTYpLCBvcmln
aW4oKSwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKKyAg
ICAgICAgRkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAg
ICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJT
dG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlKSwg
b3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgQVNTRVJUKHBvaW50ZXItPnR5cGUoKSA9PSBJbnQzMik7CisKKyAgICBpZiAoVU5MSUtFTFko
c3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3ApKSkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkgb3V0IG9mIGJvdW5k
cywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBpdAor
ICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0aGlzIG1heSBjaGFu
Z2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MzUKKyAgICAg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogdGhyb3dFeGNlcHRpb24gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbigp
KTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZC
b3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1p
dFN0b3JlT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwg
c2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRp
b24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCBj
b25kaXRpb24sIG5vblplcm8sIHplcm8pOworICAgIHJldHVybiB7IH07Cit9CisKK0FpcklSR2Vu
ZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0
eXBlLCB1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY29uc3RhbnQodG9CM1R5cGUodHlw
ZSksIHZhbHVlKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKHVp
bnQzMl90IGRlY3JlbWVudENvdW50LCBPcmlnaW4gb3JpZ2luKQoreworICAgIGlmICghbV90aWVy
VXApCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3RpZXJVcCk7CisgICAgVG1wIGNv
dW50RG93bkxvY2F0aW9uID0gY29uc3RhbnQocG9pbnRlclR5cGUoKSwgcmVpbnRlcnByZXRfY2Fz
dDx1aW50NjRfdD4obV90aWVyVXApLCBvcmlnaW4pOworICAgIFRtcCBvbGRDb3VudERvd24gPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMy
LCBvcmlnaW4sIGNvdW50RG93bkxvY2F0aW9uKTsKKyAgICBUbXAgbmV3Q291bnREb3duID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTdWIsIG9yaWdpbiwgb2xkQ291
bnREb3duLCBjb25zdGFudChJbnQzMiwgZGVjcmVtZW50Q291bnQsIG9yaWdpbikpOworICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdp
biwgbmV3Q291bnREb3duLCBjb3VudERvd25Mb2NhdGlvbik7CisKKyAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgQjM6OlZvaWQsIG9yaWdpbik7CisgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIG1vcmUgcHJlY2lzZSBoZWFw
IHJhbmdlIGZvciB0aGUgdGllciB1cCBjb3VudC4KKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6Okhl
YXBSYW5nZTo6dG9wKCk7CisgICAgZWZmZWN0cy53cml0ZXMgPSBCMzo6SGVhcFJhbmdlOjp0b3Ao
KTsKKyAgICBwYXRjaC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisKKyAgICBwYXRjaC0+YXBwZW5kKG5l
d0NvdW50RG93biwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2gtPmFwcGVuZChv
bGRDb3VudERvd24sIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNoLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdGllclVwID0gaml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNb
MV0uZ3ByKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0g
aml0LmxhYmVsKCk7CisKKyAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIHRpZXJVcC5saW5rKCZqaXQpOworCisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBleHRyYVBhZGRpbmdCeXRlcyA9IDA7CisgICAgICAgICAgICBSZWdp
c3RlclNldCByZWdpc3RlcnNUb1NwaWxsID0geyB9OworICAgICAgICAgICAgcmVnaXN0ZXJzVG9T
cGlsbC5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lz
dGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKKworICAgICAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2Z1bmN0aW9uSW5kZXgpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGpp
dC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJl
c3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgUmVn
aXN0ZXJTZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9u
LCBleHRyYVBhZGRpbmdCeXRlcyk7CisgICAgICAgICAgICBqaXQuanVtcCh0aWVyVXBSZXN1bWUp
OworCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxOb1B0clRhZz4oY2FsbCksIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodHJpZ2dlck9N
R1RpZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOworICAgIH0pOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJH
ZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpCit7CisgICAgQmFzaWNCbG9jayogYm9k
eSA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1f
cHJvYy5hZGRCbG9jaygpOworCisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsKKworICAgIG1fY3VycmVudEJsb2Nr
ID0gYm9keTsKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6Omxvb3BEZWNyZW1lbnQo
KSwgb3JpZ2luKCkpOworCisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCks
IHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworfQorCitB
aXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKFR5
cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIE9yaWdpbigp
LCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fcHJvYy5hZGRCbG9jaygpKTsKK30K
KworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhU
eXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4o
KSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBtX3Byb2MuYWRkQmxvY2soKSk7Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlw
ZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBkbyBzb21lIGtpbmQgb2Ygc3RhY2sgcGFzc2luZy4K
KworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbm90VGFrZW4gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKworICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7Cisg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRha2VuKSwg
RnJlcXVlbnRlZEJsb2NrKG5vdFRha2VuKSk7CisgICAgdGFrZW4tPmFkZFByZWRlY2Vzc29yKG1f
Y3VycmVudEJsb2NrKTsKKyAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50Qmxv
Y2spOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKKyAgICByZXN1bHQgPSBDb250cm9s
RGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVh
dGlvbiwgbm90VGFrZW4pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJy
ZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhj
dXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsK
KyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOwor
ICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5zcGVjaWFsOworICAgIGRhdGEuY29udmVydElmVG9C
bG9jaygpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJl
dHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1
ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNpemUoKSA8
PSAxKTsKKyAgICBpZiAocmV0dXJuVmFsdWVzLnNpemUoKSkKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpSZXR1cm4sIG9yaWdpbigpLCBy
ZXR1cm5WYWx1ZXNbMF0pOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpSZXR1cm4sIG9yaWdpbigpKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEm
IGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
dHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBCYXNpY0Jsb2Nr
KiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAgaWYgKGNvbmRpdGlv
bikgeworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2so
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6
QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNl
dFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKHRhcmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250
aW51YXRpb24pKTsKKyAgICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9j
ayk7CisgICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2sp
OworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVt
cCwgb3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpKTsKKyAgICAgICAgdGFyZ2V0LT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBk
ZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUo
KTsgKytpKQorICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRh
cmdldHNbaV0tPnJlc3VsdEZvckJyYW5jaCgpKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhl
eHByZXNzaW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQucmVzdWx0Rm9yQnJhbmNoKCkpOworCisgICAg
U3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxTd2l0
Y2hWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICBzd2l0Y2hWYWx1ZS0+
c2V0RmFsbFRocm91Z2goRnJlcXVlbnRlZEJsb2NrKGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tG
b3JCcmFuY2goKSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7
ICsraSkKKyAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2UoU3dpdGNoQ2FzZShpLCBGcmVx
dWVudGVkQmxvY2sodGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkpKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xF
bnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworCisg
ICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnJlc3VsdCk7Cisg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9y
aWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgZGF0YS5jb250aW51YXRpb24tPmFkZFBy
ZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hh
YmxlKGVudHJ5KTsKK30KKworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hh
YmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9s
RGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworICAgIG1fY3VycmVudEJsb2NrID0gZGF0
YS5jb250aW51YXRpb247CisKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikg
eworICAgICAgICBkYXRhLnNwZWNpYWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1
bXAsIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
ZGRQcmVkZWNlc3NvcihkYXRhLnNwZWNpYWwpOworICAgIH0KKworICAgIGZvciAoVG1wIHJlc3Vs
dCA6IGRhdGEucmVzdWx0KSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
CisgICAgfQorCisgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0
aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KKyAgICBp
ZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCkKKyAgICAgICAgcmV0dXJuIGFk
ZFJldHVybihlbnRyeS5jb250cm9sRGF0YSwgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2sp
OworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Mu
c2l6ZSgpKTsKKworICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CisKKyAgICBUeXBlIHJldHVyblR5
cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsczsKKworICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShmdW5jdGlvbkluZGV4KSkgeworICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50
cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oYXJncy5zaXplKCkpKTsKKworICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNhbiBiZSBsaW5r
ZWQgaGVyZSwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVjYXVzZSBhbGwg
aW1wb3J0IHN0dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9uIHN0YXJ0cy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgorICAgICAgICBU
bXAgdGFyZ2V0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCks
IHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGZ1bmN0
aW9uSW5kZXgpKSk7CisgICAgICAgIC8vIFRoZSB0YXJnZXQgaW5zdGFuY2UgaXMgMCB1bmxlc3Mg
dGhlIGNhbGwgaXMgd2FzbS0+d2FzbS4KKyAgICAgICAgVG1wIGlzV2FzbUNhbGwgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwgdGFy
Z2V0SW5zdGFuY2UsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCAwKSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBt
X3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0g
bV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1f
cHJvYy5hZGRCbG9jaygpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGlzV2FzbUNhbGwsIEZyZXF1ZW50
ZWRCbG9jayhpc1dhc21CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhpc0VtYmVkZGVyQmxvY2spKTsK
KworICAgICAgICBUbXAgd2FzbUNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5z
ZXR1cENhbGwobV9wcm9jLCBpc1dhc21CbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJl
dHVyblR5cGUpLAorICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQp
IHsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwg
cGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4K
KyAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJl
IGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVt
b3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwg
PSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9u
SW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgVXBzaWxvblZhbHVlKiB3YXNtQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBl
ID09IFZvaWQgPyBudWxscHRyIDogaXNXYXNtQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHdhc21DYWxsUmVzdWx0KTsKKyAgICAgICAgaXNXYXNtQmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRp
b24pOworCisgICAgICAgIC8vIEZJWE1FOiBMZXQncyByZW1vdmUgdGhpcyBpbmRpcmVjdGlvbiBi
eSBjcmVhdGluZyBhIFBJQyBmcmllbmRseSBJQworICAgICAgICAvLyBmb3IgY2FsbHMgb3V0IHRv
IHRoZSBlbWJlZGRlci4gVGhpcyBzaG91bGRuJ3QgYmUgdGhhdCBoYXJkIHRvIGRvLiBXZSBjb3Vs
ZCBwcm9iYWJseQorICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIElDIHRvIGJlIG92ZXIgQ29udGV4
dCouCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzAzNzUKKyAgICAgICAgVG1wIGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCisgICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5j
ZTo6b2Zmc2V0T2ZXYXNtVG9FbWJlZGRlclN0dWIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZVBvaXNvbmluZygpKQorICAgICAgICAgICAganVtcERlc3RpbmF0aW9u
ID0gaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0WG9yLCBvcmln
aW4oKSwganVtcERlc3RpbmF0aW9uLCBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdfSklUQ29kZVBvaXNvbikpOworCisgICAgICAgIFRt
cCBlbWJlZGRlckNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwo
bV9wcm9jLCBpc0VtYmVkZGVyQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5U
eXBlKSwKKyAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7Cisg
ICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChqdW1wRGVzdGluYXRpb24sIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJl
ciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmlu
ZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZy4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8g
dGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09
IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgVXBzaWxvblZhbHVlKiBlbWJlZGRlckNhbGxS
ZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzRW1iZWRkZXJC
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZW1iZWRkZXJD
YWxsUmVzdWx0KTsKKyAgICAgICAgaXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKKworICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgICAgICBpZiAocmV0dXJuVHlwZSA9PSBW
b2lkKQorICAgICAgICAgICAgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICByZXN1bHQgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQ
aGksIHRvQjNUeXBlKHJldHVyblR5cGUpLCBvcmlnaW4oKSk7CisgICAgICAgICAgICB3YXNtQ2Fs
bFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOworICAgICAgICAgICAgZW1iZWRkZXJDYWxs
UmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
aGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwg
YW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgICAgICByZXN0b3Jl
V2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2lu
Zm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgY29udGludWF0aW9uKTsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENh
bGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVy
blR5cGUpLAorICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsK
KyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7
CisKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFn
PihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxs
ZWVJbmRleCA9IGFyZ3MudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworICAg
IC8vIE5vdGU6IGNhbGwgaW5kaXJlY3QgY2FuIGNhbGwgZWl0aGVyIFdlYkFzc2VtYmx5RnVuY3Rp
b24gb3IgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJlY2F1c2UKKyAgICAvLyBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiBpcyBsaWtlIGNhbGxpbmcgaW50byB0aGUgZW1iZWRkZXIsIHdl
IGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBhbGwgY2FsbCBpbmRpcmVjdHMKKyAgICAvLyBjYW4gYmUg
dG8gdGhlIGVtYmVkZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sgY2FsY3VsYXRpb24uCisgICAgbV9t
YXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOworICAgIEV4cHJlc3Npb25UeXBlIGluc3RhbmNlc0J1
ZmZlcjsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoOwor
ICAgIEV4cHJlc3Npb25UeXBlIG1hc2s7CisgICAgeworICAgICAgICBFeHByZXNzaW9uVHlwZSB0
YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCks
IHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpKTsKKyAgICAgICAg
Y2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAg
ICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsK
KyAgICAgICAgaW5zdGFuY2VzQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAg
ICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSkp
OworICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksCisg
ICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFibGU6Om9mZnNldE9mTGVuZ3Ro
KCkpKTsKKyAgICAgICAgbWFzayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgWkV4dDMyLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihUYWJsZTo6b2Zmc2V0T2ZNYXNrKCkp
KSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBsb29raW5nIGZvciBp
cyB2YWxpZC4KKyAgICB7CisgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWJvdmVFcXVh
bCwgb3JpZ2luKCksIGNhbGxlZUluZGV4LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKSk7
CisKKyAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNDYWxsSW5k
aXJlY3QpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVl
SW5kZXgpOworCisgICAgaWYgKE9wdGlvbnM6OmVuYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygpKQor
ICAgICAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQml0QW5kLCBvcmlnaW4oKSwgbWFzaywgY2FsbGVlSW5kZXgpOworCisgICAgRXhwcmVz
c2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbjsKKyAgICB7CisgICAgICAgIC8vIENvbXB1dGUgdGhl
IG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgorICAg
ICAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCisgICAgICAgICAgICBjYWxsZWVJbmRleCwgY29u
c3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24p
KSk7CisgICAgICAgIGNhbGxhYmxlRnVuY3Rpb24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIG9m
ZnNldCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQi
IFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KKyAgICAgICAg
Ly8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhl
IGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgp
ID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQiKTsKKyAgICAg
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgY2Fs
bGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CisgICAgICAgIHsKKyAgICAgICAgICAg
IENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbGVlU2lnbmF0dXJlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWdu
YXR1cmU6OmludmFsaWRJbmRleCkpKTsKKworICAgICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4
Y2VwdGlvblR5cGU6Ok51bGxUYWJsZUVudHJ5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBl
eHBlY3QuCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2ln
bmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmUpKTsKKyAg
ICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
aGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBvcmlnaW4oKSwg
Y2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpKTsKKworICAgICAg
ICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHRoaXMtPmVt
aXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERvIGEgY29udGV4dCBzd2l0
Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgVG1wIG9mZnNldCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIGNh
bGxlZUluZGV4LCBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoSW5zdGFuY2UqKSkpOwor
ICAgICAgICBUbXAgbmV3Q29udGV4dEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBv
cmlnaW4oKSwgaW5zdGFuY2VzQnVmZmVyLCBvZmZzZXQpKTsKKworICAgICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayog
ZG9Db250ZXh0U3dpdGNoID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVG1wIGlzU2Ft
ZUNvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRXF1YWwsIG9yaWdpbigpLAorICAgICAgICAgICAgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0
YW5jZVZhbHVlKCkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksCisgICAgICAgICAgICBpc1NhbWVDb250
ZXh0SW5zdGFuY2UsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxv
Y2soZG9Db250ZXh0U3dpdGNoKSk7CisKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdy
ZSBjYWxsaW5nIHNvbWV0aGluZyB3aXRoIEJvdW5kc0NoZWNraW5nIG1lbW9yeS4KKyAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
cihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZykpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0
SW5zdGFuY2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
R1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAg
ICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdz
LnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3Rh
bmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1l
bW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNt
Q29udGV4dEluc3RhbmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQo
c2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0
ZXIKKyAgICAgICAgICAgIC8vICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyOTUyCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEp
OworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250
ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250
ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4K
KyAgICAgICAgfSk7CisgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgRXhwcmVzc2lvblR5cGUg
Y2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksIGNhbGxhYmxlRnVuY3Rpb24sCisgICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRp
b24oKSkpKTsKKyAgICBpZiAoT3B0aW9uczo6dXNlUG9pc29uaW5nKCkpCisgICAgICAgIGNhbGxl
ZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdFhvciwg
b3JpZ2luKCksIGNhbGxlZUNvZGUsIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENvZGVQb2lzb24pKTsKKworICAgIFR5cGUgcmV0
dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgcmVzdWx0ID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigp
LCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgWz1dIChQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5u
ZWQgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRp
YWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5j
ZS4KKyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgYWx3YXlz
IGNhbGxpbmcgc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nIHNvCisgICAgICAgICAg
ICAvLyBiZWNhdXNlIHRoZSB3YXNtLT53YXNtIHRodW5rIHVuY29uZGl0aW9uYWxseSBvdmVycmlk
ZXMgdGhlIHNpemUgcmVnaXN0ZXJzLgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBu
b3QgaGF2ZSB0byBkbyB0aGlzLCBidXQgdGhlIHdhc20tPndhc20gc3R1YiBhc3N1bWVzIGl0IGNh
bgorICAgICAgICAgICAgLy8gdXNlIGFsbCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhcyBzY3JhdGNo
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRv
U2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisgICAgICAgICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0u
Z3ByKCksIFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisK
KyAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBp
bnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgIHJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMs
IG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7
CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeShjb25z
dCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSkKK3sKKyAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgc291cmNlLCBwaGkpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dp
dGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExp
c3QmIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSByZXN1bHRTdGFjay5z
aXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kp
CisgICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFj
a1tyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaV0pOworfQorCitzdGF0aWMgdm9pZCBkdW1wRXhw
cmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEFpcklSR2VuZXJh
dG9yOjpFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQoreworICAgIGRhdGFMb2coY29t
bWEsICJFeHByZXNzaW9uU3RhY2s6Iik7CisgICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9u
IDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICBkYXRhTG9nKGNvbW1hLCAqZXhwcmVzc2lvbik7
Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRy
eT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjaykK
K3sKKyAgICBkYXRhTG9nTG4oIkNvbnN0YW50czoiKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNv
bnN0YW50IDogbV9jb25zdGFudFBvb2wpCisgICAgICAgIGRhdGFMb2dMbihkZWVwRHVtcChtX3By
b2MsIGNvbnN0YW50LnZhbHVlKSk7CisKKyAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgR3JhcGg6
Iik7CisgICAgZGF0YUxvZyhtX3Byb2MpOworICAgIGRhdGFMb2dMbigiV2l0aCBjdXJyZW50IGJs
b2NrOiIsICptX2N1cnJlbnRCbG9jayk7CisgICAgZGF0YUxvZ0xuKCJDb250cm9sIHN0YWNrOiIp
OworICAgIEFTU0VSVChjb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
Y29udHJvbFN0YWNrLnNpemUoKTsgaS0tOykgeworICAgICAgICBkYXRhTG9nKCIgICIsIGNvbnRy
b2xTdGFja1tpXS5jb250cm9sRGF0YSwgIjogIik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YSgiLCAiLCAiIik7CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsICpleHByZXNz
aW9uU3RhY2spOworICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29udHJvbFN0YWNrW2ldLmVu
Y2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICB9CisgICAg
ZGF0YUxvZ0xuKCk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdp
bgoreworICAgIE9wY29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUoKSwg
bV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKKyAgICBBU1NFUlQoaXNW
YWxpZE9wVHlwZShzdGF0aWNfY2FzdDx1aW50OF90PihvcmlnaW4ub3Bjb2RlKCkpKSk7CisgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdpbik7Cit9CisKK0V4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29t
cGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0
aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBp
bGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJV
cENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCit7
CisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7
CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50SklUID0gc3RkOjpt
YWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21F
bnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisKKyAgICBQ
cm9jZWR1cmUgcHJvY2VkdXJlOworCisgICAgcHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10g
KFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5k
YXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNv
ZGVPcmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgd2Ug
Y2Fubm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJz
KCkgb3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAgLy8gZG9uJ3Qg
c3RyaWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCksIHdoaWNoIHNh
dmVzIGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAgICBwcm9jZWR1
cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKKyAgICAKKyAgICBwcm9jZWR1cmUuc2V0
T3B0TGV2ZWwoY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZQorICAg
ICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQorICAgICAg
ICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CisKKyAgICBB
aXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25J
bmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEZ1bmN0aW9uUGFyc2VyPEFp
cklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VyLnBhcnNlKCkpOworCisgICAgaXJHZW5lcmF0b3IuaW5zZXJ0Q29uc3RhbnRzKCk7CisK
KyAgICBwcm9jZWR1cmUucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlLCAiQWZ0ZXIgcGFyc2luZzpcbiIpOwor
CisgICAgZGF0YUxvZ0lmKFdhc21BaXJJUkdlbmVyYXRvckludGVybmFsOjp2ZXJib3NlLCAiUHJl
IFNTQTogIiwgcHJvY2VkdXJlKTsKKyAgICBmaXhTU0EocHJvY2VkdXJlKTsKKyAgICBkYXRhTG9n
SWYoV2FzbUFpcklSR2VuZXJhdG9ySW50ZXJuYWw6OnZlcmJvc2UsICJQb3N0IFNTQTogIiwgcHJv
Y2VkdXJlKTsKKworCisgICAgLy8gT09QUzogY29tcHV0ZSBwcmVkZWNlc3NvciBsaXN0IGhlcmUh
CisgICAgCisgICAgeworICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJl
KTsKKyAgICAgICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53
YXNtRW50cnlwb2ludEpJVCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlw
b2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAgICAgICAg
cmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKK30KKworLy8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMgdG9v
IG1lc3N5IHRvIGRvIGluIHdhc20uanNvbi4KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENo
ZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUgb3BlcmF0aW9uLCBFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByaWdodCkKK3sKKyAgICBBU1NFUlQob3BlcmF0aW9uID09IERpdiB8
fCBvcGVyYXRpb24gPT0gTW9kIHx8IG9wZXJhdGlvbiA9PSBVRGl2IHx8IG9wZXJhdGlvbiA9PSBV
TW9kKTsKKyAgICBjb25zdCBCMzo6VHlwZSB0eXBlID0gbGVmdC0+dHlwZSgpOworCisgICAgewor
ICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgcmlnaHQsIGNv
bnN0YW50KHR5cGUsIDApKSk7CisKKyAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6
RGl2aXNpb25CeVplcm8pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAob3BlcmF0aW9u
ID09IERpdikgeworICAgICAgICBpbnQ2NF90IG1pbiA9IHR5cGUgPT0gSW50MzIgPyBzdGQ6Om51
bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1pbigpOworCisgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmln
aW4oKSwKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgY29uc3RhbnQodHlwZSwgbWluKSksCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksIHJpZ2h0LCBjb25zdGFudCh0eXBlLCAtMSkpKSk7CisKKyAgICAgICAgY2hl
Y2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6SW50ZWdlck92ZXJmbG93KTsKKyAgICAgICAgfSk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgY29uc3QgQjM6Ok9w
Y29kZSBvcCA9IERpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0
KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOwor
ICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUg
bGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICBlbWl0
Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lv
blR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JE
aXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6
T3Bjb2RlIG9wID0gRGl2OworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmln
aHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
Yywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHBy
ZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7
CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9y
aWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9uVHlw
ZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVRGl2OworICAgIGVt
aXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAgIGVtaXRDaGVja3NGb3JNb2RP
ckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBv
cmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGpp
dC5jb3VudFRyYWlsaW5nWmVyb3MzMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAg
ICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zNjQocGFy
YW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBpZiAoTWFj
cm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMy
KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1
aW50MzJfdCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1aW50
MzJfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OworICAgIFRtcCBmdW5j
QWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihwb3Bjb3VudCwgQjNDQ2FsbFB0clRh
ZykpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0FkZHJlc3MsIGFy
Zyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworI2lmIENQVShYODZfNjQpCisgICAg
aWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGppdC5jb3VudFBvcHVs
YXRpb242NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgIH0pOwor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBy
ZXN1bHQgPSBwYXRjaHBvaW50OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgor
CisgICAgdWludDY0X3QgKCpwb3Bjb3VudCkoaW50NjRfdCkgPSBbXSAoaW50NjRfdCB2YWx1ZSkg
LT4gdWludDY0X3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwodmFsdWUpOyB9OworICAg
IFRtcCBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihwb3Bjb3VudCwgQjND
Q2FsbFB0clRhZykpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwgZnVuY0Fk
ZHJlc3MsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2luKCkpOworICAgIGlmIChpc1g4NigpKQorICAgICAg
ICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9pbnQt
PmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwor
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisjaWYgQ1BVKFg4Nl82NCkK
KyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFt
c1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBqaXQuY29u
dmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNl
bmRpZgorICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9hdCwgb3JpZ2luKCkpOworICAg
IGlmIChpc1g4NigpKQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMg
PSAxOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVS
ZXA6OlNvbWVSZWdpc3RlcikpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNl
bHNlCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBh
cmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
ID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUs
IG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
aml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1sw
XS5mcHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVhcmVzdD4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgRmxvYXQsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJk
TmVhcmVzdEludEZsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1z
WzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBGbG9h
dCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICBqaXQucm91bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnBy
KCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90
Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4o
KSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJF
cXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3Vu
ZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91
dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0
RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAg
ICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAg
IHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3Vi
bGVUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBh
dGNocG9pbnQ7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFRtcCBtYXgg
PSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4g
PSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9m
Qm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQs
IG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywg
bWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAw
KSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFw
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFdLmZw
cigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXR1cm4g
eyB9OworfQorCisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChE
b3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmln
aW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBM
ZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7
CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7Cisg
ICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQzMihwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBtaW4g
PSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1h
eCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3Jl
YXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9m
Qm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7
CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsK
KyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRl
RmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7
CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQg
PSBwYXRjaHBvaW50OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAg
bWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2Fz
dDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAgIFRt
cCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBU
bXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4o
KSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQo
SW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwor
ICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVj
ayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGNvbnN0YW50KERv
dWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBUbXAgbWluID0gY29u
c3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKyAgICBUbXAgb3V0
T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFu
ZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcs
IG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwg
MCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENo
ZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJh
cC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwg
RXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2ln
bkJpdENvbnN0YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBk
b2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8g
dW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcg
aWYKKyAgICAgICAgLy8gdGhlIG51bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBh
cyBhIHNpZ25lZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRz
IGludG8gZnBycyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRo
ZW0gaWYgbmVlZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChEb3VibGUs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+Ojpt
YXgoKSkpKTsKKyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdp
bigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoc2lnbkJp
dENvbnN0YW50LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVn
OworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAo
aXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7Cisg
ICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAg
ICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5n
cHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdp
bigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVl
KiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Cisg
ICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9m
Qm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0
LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVS
ZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC50cnVuY2F0ZUZsb2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIo
KSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsK
KyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAq
IHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9h
dCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKyAg
ICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdp
bigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFu
dChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAg
ICBUbXAgc2lnbkJpdENvbnN0YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNp
bmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBw
b2ludHMgdG8gdW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21h
cnQgdGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIG51bWJlcnMgd291bGQgYmUgcG9zaXRpdmUgYW55
d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25z
dGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBv
b2wgdGhlbSBpZiBuZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGNvbnN0YW50KEZs
b2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+
OjptYXgoKSkpKTsKKyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9y
aWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoc2ln
bkJpdENvbnN0YW50LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBS
UmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7
CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAg
ICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBd
LmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJl
dHVybiB7IH07Cit9CisKK1BhcnRpYWxSZXN1bHQgQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KEtp
bmQga2luZCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYgKGlz
VmFsaWRGb3JtKGtpbmQsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAg
IGFwcGVuZChraW5kLCB2YWx1ZSwgc2hpZnQsIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCByZXN1bHQpOworICAgIGFwcGVuZChN
b3ZlLCBzaGlmdCwgbV9lY3gpOworICAgIGFwcGVuZChraW5kLCBtX2VjeCwgcmVzdWx0KTsKK30K
KworUGFydGlhbFJlc3VsdCBBaXJJUkdlbmVyYXRvcjo6YWRkSW50ZWdlclN1YihLaW5kIGtpbmQs
IEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KQoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKGtp
bmQsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChraW5k
LCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN1
YiBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBTdWIgYQorICAgIGFwcGVuZChNb3Zl
LCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKGtpbmQsIHJocywgcmVzdWx0KTsKK30KKworUGFy
dGlhbFJlc3VsdCBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEFicyhLaW5kIGtpbmQs
IEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKGtpbmQgPT0gQWJzRmxvYXQgfHwga2luZCA9PSBBYnNEb3VibGUpOworCisg
ICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0oa2luZCwgQXJnOjpUbXAs
IEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQoa2luZCwgdmFsdWUsIHJlc3VsdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKworICAg
IFRtcCBjb25zdGFudCA9IGdwcigpOworICAgIGlmIChraW5kID09IEFic0Zsb2F0KSB7CisgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSh+KDEgPDwgMzEpKSwgY29uc3RhbnQpOworICAgICAg
ICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVu
ZChBbmRGbG9hdCwgdmFsdWUsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKH4oMSA8PCA2MykpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVu
ZChNb3ZlNjRUb0RvdWJsZSwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChBbmRE
b3VibGUsIHZhbHVlLCByZXN1bHQpOworICAgIH0KK30KKworUGFydGlhbFJlc3VsdCBBaXJJUkdl
bmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEJpbk9wKEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUg
bGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAg
cmVzdWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0oa2luZCwgQXJnOjpUbXAsIEFy
Zzo6VG1wLCBBcmdzOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChraW5kLCBsaHMsIHJocywgcmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2
KCkpOworCisgICAgLy8gT3AgYSwgYgorICAgIC8vIG1lYW5zCisgICAgLy8gYiA9IGIgT3AgYQor
ICAgIC8vIE9PUFM6IHZlcmlmeQorICAgIGFwcGVuZChNb3ZlRG91YmxlLCBsaHMsIHJlc3VsdCk7
CisgICAgYXBwZW5kKGtpbmQsIHJocywgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpDZWlsLCBvcmln
aW4oKSwgYXJnMCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQjM6Ok11bCwgb3JpZ2luKCksIGFyZzAsIGFyZzEpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTdWI+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpTdWIsIG9yaWdpbigpLCBhcmcwLCBhcmcxKTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0TGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpMZXNzRXF1
YWwsIG9yaWdpbigpLCBhcmcwLCBhcmcxKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGVtb3RlRjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6RG91YmxlVG9GbG9hdCwgb3JpZ2luKCksIGFyZzApOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNaW4+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgdGVtcDIgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIGFyZzAs
IGFyZzEpOyAgICAKK1RtcCB0ZW1wNyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6OkJpdE9yLCBvcmlnaW4oKSwgYXJnMCwgYXJnMSk7ICAgIAorVG1wIHRlbXAx
NCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6Okxlc3NUaGFu
LCBvcmlnaW4oKSwgYXJnMCwgYXJnMSk7ICAgIAorVG1wIHRlbXAxMiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHRlbXAxNCwg
YXJnMCwgYXJnMSk7ICAgIAorVG1wIHRlbXAwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdGVtcDIsIHRlbXA3LCB0ZW1wMTIp
OyAgICAKK3Jlc3VsdCA9IHRlbXAwOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZT4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgYXJnMCwgYXJnMSk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NEx0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJN
YXg+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKwor
ICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NU
aGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZs
b2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJn
MSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwp
OworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNv
bnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVGbG9hdCwgYXJnMCwgcmVz
dWx0KTsKKyAgICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwt
PnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVz
c1RoYW4sIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1
bXApOworICAgIGxlc3NUaGFuLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBt
X2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNdWw+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhZGRGbG9hdGluZ1BvaW50QmluT3AoTXVsRG91
YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2RmxvYXQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkNsej4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczMyLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGMzJDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1z
IGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBU
bXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2YWx1ZSA9
IGdwcigpOworCisgICAgLy8gT09QUzogQ2FuIGZpdCBpbiBJbW0vQml0SW1tIGluc3RlYWQgb2Yg
QmlnSW1tPworICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcxLCB0ZW1wMSk7CisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5k
MzIsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJn
MCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmKSwgdmFs
dWUpOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBl
bmQoT3IzMiwgc2lnbiwgdmFsdWUsIHZhbHVlKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwg
dmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFVJMzI+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcCA9IHRtcCgpOworICAgIGFwcGVuZChNb3Zl
MzIsIGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyUmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0QW5kPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFuZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJOZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRH
dD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3FydD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0RmxvYXQsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NEd0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcXo+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDY0LCBBcmc6OnJlc0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjREaXY+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiB3aGF0
IGFib3V0IGNoaWxsLW5lc3MgaGVyZS4uLj8KKyAgICBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2
RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBZGQ+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQWRk
RmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE9yPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE9yNjQs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlVT4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTGVTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDbHo+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ291bnRMZWFkaW5nWmVy
b3M2NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVnPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE5lZ2F0ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQW5kMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RyPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYWRkU2hpZnQoUm90YXRlUmlnaHQ2NCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYWRkRmxvYXRp
bmdQb2ludEFicyhBYnNEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0Uz4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFu
ZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAg
dGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2YWx1ZSA9IGdw
cigpOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcxLCB0ZW1wMSk7CisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAwMDAwMDAwMDAwMCksIHNpZ24pOworICAgIGFw
cGVuZChBbmQ2NCwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVU
bzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZm
ZmZmZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCB2YWx1ZSwgdmFs
dWUpOworCisgICAgYXBwZW5kKE9yNjQsIHNpZ24sIHZhbHVlLCB2YWx1ZSk7CisgICAgYXBwZW5k
KE1vdmU2NFRvRG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0
U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50
NjRUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RsPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYWRkU2hpZnQoUm90YXRlTGVmdDY0LCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigp
OworICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxl
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHZT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hy
VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGFkZFNoaWZ0KFVyc2hpZnQzMiwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJMzI+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcCA9IHRtcCgpOworICAgIGFwcGVuZChN
b3ZlMzIsIGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0LCB0ZW1w
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgYWRkU2hpZnQoUnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFkZFNoaWZ0KENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDZWls
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENlaWxEb3VibGUsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkdlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NEZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEZsb29yRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJYb3I+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9yMzIsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGFkZEZsb2F0
aW5nUG9pbnRBYnMoQWJzRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1pbj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAg
QmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRo
YW5PckVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0
aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJy
YW5jaERvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFy
ZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5v
dEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vz
c29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBh
cmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAg
bm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwp
OworCisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVy
VGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxGbG9h
dCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgYWRkSW50ZWdlclN1YihTdWI2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVpbnRlcnByZXRGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZUZsb2F0VG8zMiwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKEFkZDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBhcHBlbmQoU3ViRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChPcjMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRM
dFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0THRTPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRYb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoWG9yNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NEdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TXVsPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE11bDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTdWI+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
U3ViRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFByb21vdGVGMzI+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEZsb2F0VG9E
b3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFkZD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChBZGREb3VibGUs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlUz4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kVUkzMj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMk5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFJlaW50ZXJwcmV0
STY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJGbG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChGbG9vckZs
b2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0U0kzMj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0Zsb2F0LCBhcmcw
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcXo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8p
LCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZWludGVycHJldEY2ND4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGFkZFNoaWZ0KFJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRTaHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYWRkU2hpZnQo
VXJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTcXJ0PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnREb3VibGUsIGFyZzAsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGFkZFNoaWZ0KExzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJHdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJXcmFw
STY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGFkZFNoaWZ0KFJvdGF0ZUxlZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyUm90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGFkZFNo
aWZ0KFJvdGF0ZVJpZ2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0
VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRTSTMyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCBhcmcwLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTmVnYXRlRG91YmxlLCBhcmcwLCByZXN1
bHQpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
R3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWc+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoTmVnYXRlRG91YmxlLCBhcmcw
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBl
bmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRT
dWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRE
b3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOwor
ICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChu
b3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90RXF1YWws
IEJyYW5jaERvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhh
biksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBj
b250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRG91YmxlLCBhcmcxLCBy
ZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhhbiwgSnVtcCk7CisgICAgbGVzc1RoYW4tPnNldFN1
Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NExlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0TGVTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRB
ZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQWRkNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360171</attachid>
            <date>2019-01-25 15:19:51 -0800</date>
            <delta_ts>2019-01-25 18:29:30 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>130552</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHBy
b3RlY3RlZDoKICAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhBaXI6Oklu
c3QmKSBmaW5hbDsKICAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0
JikgZmluYWw7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5l
cmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1w
SW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBzdWJjbGFzc2VzIHRo
YXQgaW1wbGVtZW50IHRoYXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKICAgICAgICAgdW5z
aWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4NjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIlNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgor
I2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0
SW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21PTUdQbGFuLmgiCisjaW5jbHVkZSAiV2FzbU9w
Y29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK2NsYXNzIEFpcklSR2Vu
ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250
cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIFR5cGUgc2lnbmF0dXJlLCBC
bG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVj
aWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAg
ICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3Bl
Y2lhbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSAhPSBWb2lkKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUo
c2lnbmF0dXJlKSwgb3JpZ2luKSk7CisgICAgICAgIH0KKworICAgICAgICBDb250cm9sRGF0YSgp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgi
SWY6ICAgICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBC
bG9ja1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2s6ICAgICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6Okxv
b3A6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgICAgIik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjog
IiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7CisgICAgICAgICAgICBpZiAoc3BlY2lh
bCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoKnNwZWNpYWwpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTm9uZSIpOworICAgICAgICB9CisKKyAgICAg
ICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBibG9ja1R5cGU7IH0KKworICAgICAg
ICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiByZXN1bHQuc2l6ZSgp
OyB9CisKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb247
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRJZlRvQmxvY2soKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQodHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgICAgICAg
ICAgYmxvY2tUeXBlID0gQmxvY2tUeXBlOjpCbG9jazsKKyAgICAgICAgICAgIHNwZWNpYWwgPSBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogV2hhdCBpcyB0aGlzPworICAg
ICAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPFRtcCwgMT47IC8vIFZhbHVlIG11c3QgYmUg
YSBQaGkKKworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdEZvckJyYW5jaCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAg
ICAgICAgICAgIHJldHVybiBSZXN1bHRMaXN0KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgQWlySVJH
ZW5lcmF0b3I7CisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGU7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKKyAgICAgICAg
UmVzdWx0TGlzdCByZXN1bHQ7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0g
VG1wOworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhw
cmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3Vs
dExpc3QgQ29udHJvbERhdGE6OlJlc3VsdExpc3Q7CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0g
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9IFRtcCB7IH07CisK
KyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3Vs
dCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcg
UGFydGlhbFJlc3VsdCA9IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAg
ICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdh
c21QYXJzZXIuaC4KKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygi
V2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdz
KS4uLikpOworICAgIH0KKworI2RlZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24s
IC4uLikgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAg
ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgdm9pZCBhcHBlbmQoQmFzaWNCbG9jayogYmxvY2ssIEFpcjo6S2luZCBraW5kLCBB
cmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICAvLyBPT1BTOiBBZGQgb3Jp
Z2luCisgICAgICAgIGJsb2NrLT5hcHBlbmQoa2luZCwgbnVsbHB0ciwgc3RkOjpmb3J3YXJkPEFy
Z3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFpcjo6S2luZCBraW5kLCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIGtp
bmQsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAg
IFRtcCB0bXAoQmFuayBiYW5rKSB7IHJldHVybiBtX2NvZGUubmV3VG1wKGJhbmspOyB9CisgICAg
VG1wIGdwcigpIHsgcmV0dXJuIHRtcChHUCk7IH0KKyAgICBUbXAgZnByKCkgeyByZXR1cm4gdG1w
KEZQKTsgfQorCisgICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQ
cm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CisKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3Qp
OworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KTsKKworICAg
IC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2Fs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUgdmFsdWUpOworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBNZW1vcnkKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNl
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5
cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEdyb3dN
ZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMKKyAgICB0ZW1wbGF0
ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZTxP
cFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25U
eXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93
CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRvcExldmVsKFR5cGUgc2ln
bmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soVHlw
ZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb29w
KFR5cGUgc2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0
YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNl
KENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwor
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENv
bnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhw
cmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVz
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywg
Q29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVz
c2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9j
ayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3Qg
U2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFj
aGFibGUoKTsKKworICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoS2luZCBraW5kLCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihLaW5kIGtpbmQsIEV4cHJlc3Np
b25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRBYnMoS2luZCBraW5kLCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBhZGRGbG9hdGluZ1BvaW50QmluT3AoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4
cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBhZGRQYXRjaHBvaW50KEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9wcm9jLmFkZDxCMzo6UGF0Y2hwb2ludFZhbHVlPih0eXBlLCBCMzo6T3JpZ2lu
KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQg
ZW1pdFBhdGNocG9pbnQoQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQsIEFy
Z3MuLi4gdGhlQXJncykKKyAgICB7CisgICAgICAgIGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkK
KyAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwgPSBtX2NvZGUuYWRkU3BlY2lhbChzdGQ6
Om1ha2VfdW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSk7CisKKyAgICAgICAgSW5zdCBp
bnN0KFBhdGNoLCBwYXRjaCwgQXJnOjpzcGVjaWFsKG1fcGF0Y2hwb2ludFNwZWNpYWwpKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsK
KyAgICAgICAgCisgICAgICAgIGF1dG8gYXJncyA9IHN0ZDo6bWFrZV90dXBsZSguLi50aGVBcmdz
KTsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8gT09QUzog
VWdoLCB0aGlzIGlzIHN1cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBCMzo6VmFs
dWUqIGhlcmUuCisgICAgICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdvcmssIGJ1
dCBvdXIgYWx0ZXJuYXRpdmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAgICAgLy8g
b3IgcmVpbnZlbnQgcGFydCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAgIHBhdGNo
LT5hcHBlbmQobnVsbHB0ciwgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICAg
ICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhdGNo
LT5yZXN1bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICBwYXRjaC0+bGF0ZUNsb2Ji
ZXJlZCgpLmNsZWFyKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAg
ICAgICAgIGluc3QuYXJncy5hcHBlbmQoZ3ByKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBwYXRjaC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZChmcHIoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxD
b250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBleHByZXNz
aW9uU3RhY2spOworICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJh
dG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OworCisgICAgVG1wIGNvbnN0YW50
KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBPcHRpb25hbDxPcmlnaW4+ID0gV1RGOjpudWxsb3B0
KTsKKyAgICB2b2lkIGluc2VydENvbnN0YW50cygpOworCitwcml2YXRlOgorICAgIHZvaWQgZW1p
dEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisgICAgdm9p
ZCBlbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIE9yaWdpbik7CisKKyAg
ICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBCMzo6
S2luZCBtZW1vcnlLaW5kKEIzOjpPcGNvZGUgbWVtb3J5T3ApOworICAgIEV4cHJlc3Npb25UeXBl
IGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qg
b2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKworICAg
IHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgcGhpLCBjb25zdCBFeHByZXNzaW9uVHlw
ZSBzb3VyY2UpOworICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiBzdGFjayk7CisKKyAgICB2b2lk
IGVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBF
eHByZXNzaW9uVHlwZSByaWdodCk7CisKKyAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOworCisgICAg
dm9pZCByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmLCBCYXNpY0Jsb2NrKiwg
VG1wKTsKKyAgICBlbnVtIGNsYXNzIFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHsgTm8sIFllcyB9
OworICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0
YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgVG1wIGluc3RhbmNlLCBQcm9jZWR1
cmUmLCBCYXNpY0Jsb2NrKik7CisKKyAgICBPcmlnaW4gb3JpZ2luKCk7CisKKyAgICBGdW5jdGlv
blBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OworICAgIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUg
eyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIGNvbnN0IENvbXBpbGF0aW9uTW9k
ZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSB9OworICAgIGNv
bnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07CisgICAgY29uc3QgVGll
clVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9OworCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7
CisgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgVmVjdG9y
PFZhcmlhYmxlKj4gbV9sb2NhbHM7CisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0
aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRo
LgorICAgIEhhc2hNYXA8VmFsdWVLZXksIFRtcD4gbV9jb25zdGFudFBvb2w7CisgICAgSW5zZXJ0
aW9uU2V0IG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXM7CisgICAgR1BSUmVnIG1fbWVtb3J5QmFz
ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52
YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisgICAgVG1w
IG1faW5zdGFuY2VWYWx1ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3Ig
YmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1
c2VkLgorICAgIGJvb2wgbV91c2VzSW5zdGFuY2VWYWx1ZSB7IGZhbHNlIH07CisgICAgVG1wIGlu
c3RhbmNlVmFsdWUoKQorICAgIHsKKyAgICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7
CisgICAgICAgIHJldHVybiBtX2luc3RhbmNlVmFsdWU7CisgICAgfQorCisgICAgdWludDMyX3Qg
bV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgeyAwIH07CisKKyAgICBCMzo6UGF0Y2hwb2ludFNwZWNp
YWwqIG1fcGF0Y2hwb2ludFNwZWNpYWwgeyBudWxscHRyIH07Cit9OworCisvLyBNZW1vcnkgYWNj
ZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVh
cyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgoraW50MzJfdCBBaXJJUkdl
bmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50
MzJfdCBvZmZzZXQpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
KSkgeworICAgICAgICBwdHIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEFkZCwgb3JpZ2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCkpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywg
VG1wIGFyZykKK3sKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihwcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOworICAgICAgICBpZiAoQ0NhbGxIZWxwZXJz
OjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCisg
ICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hS
ZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6
c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIo
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNl
IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQg
aW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBB
cmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIu
CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRj
aHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgRWZmZWN0cyBlZmZl
Y3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsK
KyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0
ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgR1BSUmVnIHdh
c21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0u
Z3ByKCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgIH0pOworfQorCitBaXJJUkdlbmVy
YXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9k
ZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQorICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAs
IG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRl
eChmdW5jdGlvbkluZGV4KQorICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHBy
b2NlZHVyZSkKKyAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMpCisgICAgLCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzKG1fcHJvYykKK3sKKyAg
ICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworCisgICAgLy8gRklYTUUgd2Ug
ZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGluIHJlZ2lzdGVycyBoZXJlIGlmIHRoZXJlJ3Mgbm8gbWVt
b3J5LiBJdCBtYWtlcyB3YXNtIC0+IHdhc20gdGh1bmtzIHNpbXBsZXIgZm9yIG5vdy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjYyMworICAgIGNvbnN0IFBpbm5l
ZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisK
KyAgICBtX21lbW9yeUJhc2VHUFIgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAg
IG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOworCisgICAgbV93YXNtQ29udGV4
dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKyAg
ICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVy
KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisKKyAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNb
MF0uc2l6ZU9mZnNldCk7CisgICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7CisgICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6
ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVycykKKyAgICAg
ICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CisgICAgfQor
CisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24o
KS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKKworICAgIGlmIChp
bmZvLm1lbW9yeSkgeworICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIpIHsKKyAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAg
ICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nOgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBt
X21lbW9yeVNpemVHUFIgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQocGlubmVkR1BSLCBJbnZhbGlkR1BSUmVnID09IHBpbm5lZEdQUik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLT5lbWl0
RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vz
cyk7CisgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgIGNh
c2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAvLyBNb3N0IG1lbW9y
eSBhY2Nlc3NlcyBpbiBzaWduYWxpbmcgbW9kZSBkb24ndCBkbyBhbiBleHBsaWNpdAorICAgICAg
ICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2UgdGhleSBjYW4gcmVseSBvbiBmYXVsdCBo
YW5kbGluZyB0byBkZXRlY3QKKyAgICAgICAgICAgIC8vIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMu
IEZhdWx0U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVkcyB0aGUKKyAgICAgICAgICAgIC8v
IHRodW5rIHRvIGV4aXN0IHNvIHRoYXQgaXQgY2FuIGp1bXAgdG8gdGhhdCB0aHVuay4KKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0
aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQorICAgICAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxv
Y2F0aW9uLCBtX3Byb2MsIE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICB7CisgICAg
ICAgIEIzOjpUbXAgZnJhbWVQb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpOworICAgICAgICBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93Q2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgcG9pbnRlclR5cGUoKSwgT3JpZ2lu
KCkpOworICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBzdGFja092ZXJmbG93Q2hlY2s7CisgICAg
ICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+YXBwZW5kU29tZVJlZ2lzdGVyKGZyYW1lUG9pbnRlcik7
CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9T
Y3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkg
eworICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJz
IHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdl
IG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgICAgICAgICAvLyBU
aGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5
KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0No
ZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOworICAgICAgICAgICAgc3RhY2tPdmVy
Zmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0YWNr
T3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcobV93YXNtQ29u
dGV4dEluc3RhbmNlR1BSKTsKKyAgICAgICAgfQorICAgICAgICBzdGFja092ZXJmbG93Q2hlY2st
Pm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDI7CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQz
Ml90PiB3YXNtRnJhbWVTaXplID0gcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKTsKKyAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1QYXJlbnRDaGVja1NpemUgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCAxMDI0KTsKKyAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGV4dHJhRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RkOjptYXg8dWludDMyX3Q+KAorICAgICAgICAgICAgICAg
IC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBmb3IgZnVuY3Rpb25zIHRo
YXQgYXJlIHRlcm1pbmFsIG5vZGVzIGluIHRoZSBjYWxsCisgICAgICAgICAgICAgICAgLy8gdHJl
ZSwgKGUuZyB0aGV5IGRvbid0IG1ha2UgYW55IGNhbGxzKSBhbmQgaGF2ZSBhIHNtYWxsIGVub3Vn
aCBmcmFtZSBzaXplLiBUaGlzIHdvcmtzIGJ5CisgICAgICAgICAgICAgICAgLy8gaGF2aW5nIGFu
eSBzdWNoIHRlcm1pbmFsIG5vZGUgaGF2ZSBpdHMgcGFyZW50IGNhbGxlciBpbmNsdWRlIHNvbWUg
ZXh0cmEgc2l6ZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAvLyBvd24gY2hlY2sgZm9yIGl0LiBU
aGUgZ29hbCBoZXJlIGlzIHR3b2ZvbGQ6CisgICAgICAgICAgICAgICAgLy8gMS4gRW1pdCBsZXNz
IGNvZGUuCisgICAgICAgICAgICAgICAgLy8gMi4gVHJ5IHRvIHNwZWVkIHRoaW5ncyB1cCBieSBz
a2lwcGluZyBzdGFjayBjaGVja3MuCisgICAgICAgICAgICAgICAgbWluaW11bVBhcmVudENoZWNr
U2l6ZSwKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBj
aGVja3MgaW4gdGhlIFdhc20gLT4gRW1iZWRkZXIgY2FsbCBJQyBzdHViLiBTaW5jZSB0aGVzZSB3
aWxsCisgICAgICAgICAgICAgICAgLy8gc3BpbGwgYWxsIGFyZ3VtZW50cyB0byB0aGUgc3RhY2ss
IHdlIGVuc3VyZSB0aGF0IGEgc3RhY2sgY2hlY2sgaGVyZSBjb3ZlcnMgdGhlCisgICAgICAgICAg
ICAgICAgLy8gc3RhY2sgdGhhdCBzdWNoIGEgc3R1YiB3b3VsZCB1c2UuCisgICAgICAgICAgICAg
ICAgKENoZWNrZWQ8dWludDMyX3Q+KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzKSAqIHNpemVvZihS
ZWdpc3RlcikgKyBqc2NDYWxsaW5nQ29udmVudGlvbigpLmhlYWRlclNpemVJbkJ5dGVzKCkpLnVu
c2FmZUdldCgpCisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGNvbnN0IGludDMyX3QgY2hl
Y2tTaXplID0gbV9tYWtlc0NhbGxzID8gKHdhc21GcmFtZVNpemUgKyBleHRyYUZyYW1lU2l6ZSku
dW5zYWZlR2V0KCkgOiB3YXNtRnJhbWVTaXplLnVuc2FmZUdldCgpOworICAgICAgICAgICAgYm9v
bCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+
IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVy
Zmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVu
dENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CisKKyAgICAgICAgICAgIEdQUlJlZyBj
b250ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyBwYXJhbXNbMF0uZ3ByKCkg
OiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisKKyAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dz
IGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6
ZSBpcyB3aXRoaW4KKyAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNh
bGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCisgICAgICAgICAgICBpZiAo
bmVlZHNPdmVyZmxvd0NoZWNrKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIEdQUlJlZyBm
cCA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBw
YXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHBh
cmFtcy5ncFNjcmF0Y2goMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
Y29udGV4dEluc3RhbmNlKTsKKworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0
YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBmcCwgc2NyYXRjaDEpOworICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvdmVyZmxvdzsKKyAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkobmVlZFVuZGVyZmxvd0NoZWNrKSkKKyAgICAgICAgICAgICAgICAg
ICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2Ny
YXRjaDEsIGZwKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93
U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYm
IENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93
IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8g
YmUgY29ycmVjdC4KKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdl
IGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBh
dGNocG9pbnQgY29uc2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0
YWNrIGNoZWNrKSB3aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgorICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVw
Q291bnQ6OmZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSwgT3JpZ2luKCkpOworfQorCit2b2lkIEFp
cklSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdCByZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRp
b24mIG1lbW9yeSwgVG1wIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJs
b2NrKQoreworICAgIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHByb2MsIGJsb2NrLCBpbnN0
YW5jZSk7CisKKyAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgPT0gUmVzdG9yZUNhY2hl
ZFN0YWNrTGltaXQ6OlllcykgeworICAgICAgICAvLyBUaGUgSW5zdGFuY2UgY2FjaGVzIHRoZSBz
dGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9uaWNhbCBsb2NhdGlvbiBp
cy4KKyAgICAgICAgVG1wIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZz
ZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOworICAgICAgICBUbXAgYWN0dWFsU3Rh
Y2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IFN0b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1pdCwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZl
Q2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAg
ICB9CisKKyAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJ
bmZvKiBwaW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgIFJl
Z2lzdGVyU2V0IGNsb2JiZXJzOworICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFz
ZU1lbW9yeVBvaW50ZXIpOworICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNp
emVSZWdpc3RlcnMpCisgICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIp
OworCisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBw
ZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7Cisg
ICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBS
YW5nZTo6dG9wKCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOworICAg
ICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJzKTsKKworICAgICAgICBwYXRjaHBvaW50
LT5hcHBlbmQoaW5zdGFuY2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworCisgICAgICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7CisgICAg
ICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7
CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAgICAgICAg
QVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFz
c3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lz
dGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0
LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0
KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRFeGNlcHRp
b25DaGVjayhDQ2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9uVHlwZSB0eXBlKQoreworICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0
eXBlKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgYXV0byBqdW1wVG9FeGNlcHRpb25T
dHViID0gaml0Lmp1bXAoKTsKKworICAgIGppdC5hZGRMaW5rVGFzayhbanVtcFRvRXhjZXB0aW9u
U3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5r
KGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihU
aHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpKTsKKyAgICB9KTsKK30KKworVG1wIEFpcklSR2VuZXJhdG9yOjpjb25zdGFu
dChCMzo6VHlwZSB0eXBlLCB1aW50NjRfdCBiaXRzLCBPcHRpb25hbDxPcmlnaW4+IG1heWJlT3Jp
Z2luKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9jb25zdGFudFBvb2wuZW5zdXJlKFZhbHVlS2V5
KG9wY29kZUZvckNvbnN0YW50KHR5cGUpLCB0eXBlLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihiaXRz
KSksIFsmXSB7CisgICAgICAgIFRtcCByZXN1bHQgPSBtX3Byb2MuYWRkQ29uc3RhbnQobWF5YmVP
cmlnaW4gPyAqbWF5YmVPcmlnaW4gOiBvcmlnaW4oKSwgdHlwZSwgYml0cyk7CisgICAgICAgIG1f
Y29uc3RhbnRJbnNlcnRpb25WYWx1ZXMuaW5zZXJ0VmFsdWUoMCwgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6aW5zZXJ0Q29uc3RhbnRzKCkKK3sKKyAgICBt
X2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzLmV4ZWN1dGUobV9wcm9jLmF0KDApKTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0
b3RhbEJ5dGVzQ2hlY2tlZCA9IGNvdW50OworICAgIHRvdGFsQnl0ZXNDaGVja2VkICs9IG1fbG9j
YWxzLnNpemUoKTsKKyAgICB1aW50MzJfdCB0b3RhbEJ5dGVzOworICAgIFdBU01fQ09NUElMRV9G
QUlMX0lGKCh0b3RhbEJ5dGVzQ2hlY2tlZC5zYWZlR2V0KHRvdGFsQnl0ZXMpID09IENoZWNrZWRT
dGF0ZTo6RGlkT3ZlcmZsb3cpIHx8ICFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxC
eXRlcyksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFsQnl0ZXMsICIgbG9jYWxz
Iik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBWYXJpYWJsZSogbG9jYWwgPSBtX3Byb2MuYWRkVmFyaWFibGUodG9CM1R5cGUodHlwZSkpOwor
ICAgICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQobG9jYWwpOworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgU2V0LCBPcmlnaW4oKSwg
bG9jYWwsIGNvbnN0YW50KHRvQjNUeXBlKHR5cGUpLCAwLCBPcmlnaW4oKSkpOworICAgIH0KKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQo
IW1fbG9jYWxzLnNpemUoKSk7CisgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoIW1fbG9jYWxzLnRy
eVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMi
KTsKKworICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAg
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUsIG1fcHJvYywg
bV9jdXJyZW50QmxvY2ssIE9yaWdpbigpLAorICAgICAgICBbPV0gKEV4cHJlc3Npb25UeXBlIGFy
Z3VtZW50LCB1bnNpZ25lZCBpKSB7CisgICAgICAgICAgICBWYXJpYWJsZSogYXJndW1lbnRWYXJp
YWJsZSA9IG1fcHJvYy5hZGRWYXJpYWJsZShhcmd1bWVudC0+dHlwZSgpKTsKKyAgICAgICAgICAg
IG1fbG9jYWxzW2ldID0gYXJndW1lbnRWYXJpYWJsZTsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBTZXQsIE9yaWdpbigpLCBhcmd1
bWVudFZhcmlhYmxlLCBhcmd1bWVudCk7CisgICAgICAgIH0pOworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxz
W2luZGV4XSk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJs
ZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbigpLCBtX2xvY2Fsc1tpbmRleF0pOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVucmVhY2hhYmxl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgdW5yZWFjaGFibGUtPnNldEdlbmVyYXRvcihbdGhp
c10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBl
OjpVbnJlYWNoYWJsZSk7CisgICAgfSk7CisgICAgdW5yZWFjaGFibGUtPmVmZmVjdHMudGVybWlu
YWwgPSB0cnVlOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCosIElu
c3RhbmNlKiwgaW50MzJfdCkgPSBbXSAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFu
Y2UsIGludDMyX3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBpbnN0YW5jZS0+c3RvcmVU
b3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5
KCktPmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6
Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6
R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5
OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBN
ZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNv
dW50KCk7CisgICAgfTsKKworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0
aW9uUHRyPHZvaWQqPihncm93TWVtb3J5LCBCM0NDYWxsUHRyVGFnKSksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIs
IG9yaWdpbigpKSwgaW5zdGFuY2VWYWx1ZSgpLCBkZWx0YSk7CisKKyAgICByZXN0b3JlV2ViQXNz
ZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6Tm8sIG1faW5mby5tZW1v
cnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRyKS0+c2l6ZSgpKSkg
PT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOworICAg
IFRtcCBzaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBJbnQ2NCwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJf
dD4oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSk7CisKKyAgICBjb25zdGV4
cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OworICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50
OjpwYWdlU2l6ZSA9PSAxdWxsIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhl
IGNvZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKKyAgICBUbXAgbnVtUGFnZXMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpTaHIsIG9yaWdpbigpLAorICAgICAg
ICBzaXplLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgc2hpZnRWYWx1ZSkpOworCisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIG51bVBhZ2VzKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFT
U0VSVChtX2xvY2Fsc1tpbmRleF0pOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFy
aWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6U2V0LCBvcmlnaW4oKSwgbV9sb2NhbHNbaW5kZXhdLCB2
YWx1ZSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xv
YmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgVG1wIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3Rh
bmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygp
KSk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCB0b0IzVHlwZShtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZSksIG9yaWdp
bigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldEds
b2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBBU1NFUlQodG9CM1R5cGUobV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGUpID09
IHZhbHVlLT50eXBlKCkpOworICAgIFRtcCBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRP
Zkdsb2JhbHMoKSkpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCB2YWx1ZSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxp
bnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICByZXR1cm4geyB9OworfQor
CitpbmxpbmUgVG1wIEFpcklSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9w
ZXJhdGlvbikKK3sKKyAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKKworICAgIHN3aXRjaCAo
bV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogeworICAgICAg
ICAvLyBXZSdyZSBub3QgdXNpbmcgc2lnbmFsIGhhbmRsaW5nIGF0IGFsbCwgd2UgbXVzdCB0aGVy
ZWZvcmUgY2hlY2sgdGhhdCBubyBtZW1vcnkgYWNjZXNzIGV4Y2VlZHMgdGhlIGN1cnJlbnQgbWVt
b3J5IHNpemUuCisgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVHUFIpOworICAgICAgICBBU1NF
UlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
bV9tZW1vcnlTaXplR1BSLCBwb2ludGVyLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6
IHsKKyAgICAgICAgLy8gV2UndmUgdmlydHVhbGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUgZm9yIHRo
aXMgbWVtb3J5LiBPbmx5IHRoZSB1c2VyLWFsbG9jYXRlZCBwYWdlcyBhcmUgYWRkcmVzc2FibGUs
IGNvbnRpZ3VvdXNseSBpbiByYW5nZSBbMCwgY3VycmVudF0sCisgICAgICAgIC8vIGFuZCBldmVy
eXRoaW5nIGFib3ZlIGlzIG1hcHBlZCBQUk9UX05PTkUuIFdlIGRvbid0IG5lZWQgdG8gcGVyZm9y
bSBhbnkgZXhwbGljaXQgYm91bmRzIGNoZWNrIGluIHRoZSA0R2lCIHJhbmdlIGJlY2F1c2UgV2Vi
QXNzZW1ibHkgcmVnaXN0ZXIKKyAgICAgICAgLy8gbWVtb3J5IGFjY2Vzc2VzIGFyZSAzMi1iaXQu
IEhvd2V2ZXIgV2ViQXNzZW1ibHkgcmVnaXN0ZXIgKyBvZmZzZXQgYWNjZXNzZXMgcGVyZm9ybSB0
aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNoIGNhbiBwdXNoIGFuIGFjY2VzcyBhYm92ZQorICAg
ICAgICAvLyB0aGUgMzItYml0IGxpbWl0ICh0aGUgb2Zmc2V0IGlzIHVuc2lnbmVkIDMyLWJpdCku
IFRoZSByZWR6b25lIHdpbGwgY2F0Y2ggbW9zdCBzbWFsbCBvZmZzZXRzLCBhbmQgd2UnbGwgZXhw
bGljaXRseSBib3VuZHMgY2hlY2sgYW55CisgICAgICAgIC8vIHJlZ2lzdGVyICsgbGFyZ2Ugb2Zm
c2V0IGFjY2Vzcy4gV2UgZG9uJ3QgdGhpbmsgdGhpcyB3aWxsIGJlIGdlbmVyYXRlZCBmcmVxdWVu
dGx5LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayB0aGF0IHJlZ2lzdGVy
ICsgbGFyZ2Ugb2Zmc2V0IGRvZXNuJ3QgZXhjZWVkIDRHaUIrcmVkem9uZSBzaW5jZSB0aGF0J3Mg
dGVjaG5pY2FsbHkgdGhlIGxpbWl0IHdlIG5lZWQgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgdGhlCisg
ICAgICAgIC8vIFBST1RfTk9ORSByZWdpb24sIGJ1dCBpdCdzIGJldHRlciBpZiB3ZSB1c2UgYSBz
bWFsbGVyIGltbWVkaWF0ZSBiZWNhdXNlIGl0IGNhbiBjb2RlZ2VucyBiZXR0ZXIuIFdlIGtub3cg
dGhhdCBhbnl0aGluZyBlcXVhbCB0byBvciBncmVhdGVyCisgICAgICAgIC8vIHRoYW4gdGhlIGRl
Y2xhcmVkICdtYXhpbXVtJyB3aWxsIHRyYXAsIHNvIHdlIGNhbiBjb21wYXJlIGFnYWluc3QgdGhh
dCBudW1iZXIuIElmIHRoZXJlIHdhcyBubyBkZWNsYXJlZCAnbWF4aW11bScgdGhlbiB3ZSBzdGls
bCBrbm93IHRoYXQKKyAgICAgICAgLy8gYW55IGFjY2VzcyBlcXVhbCB0byBvciBncmVhdGVyIHRo
YW4gNEdpQiB3aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRkIHRoZSByZWR6b25lLgorICAgICAgICBp
ZiAob2Zmc2V0ID49IE1lbW9yeTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpKSB7CisgICAgICAg
ICAgICBzaXplX3QgbWF4aW11bSA9IG1faW5mby5tZW1vcnkubWF4aW11bSgpID8gbV9pbmZvLm1l
bW9yeS5tYXhpbXVtKCkuYnl0ZXMoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0No
ZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIHNpemVPZk9wZXJhdGlvbiArIG9m
ZnNldCAtIDEsIG1heGltdW0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICB9CisKKyAgICBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBaRXh0MzIsIG9yaWdpbigpLCBwb2ludGVyKTsKKyAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxXYXNtQWRkcmVzc1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVy
LCBtX21lbW9yeUJhc2VHUFIpOworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExv
YWRPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAg
ICAgICByZXR1cm4gMTsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6CisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2
VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgIHJldHVybiAyOwor
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQzMlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgIGNhc2UgTG9hZE9w
VHlwZTo6RjMyTG9hZDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBC
Mzo6S2luZCBBaXJJUkdlbmVyYXRvcjo6bWVtb3J5S2luZChCMzo6T3Bjb2RlIG1lbW9yeU9wKQor
eworICAgIGlmIChtX21vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQorICAgICAgICByZXR1
cm4gdHJhcHBpbmcobWVtb3J5T3ApOworICAgIHJldHVybiBtZW1vcnlPcDsKK30KKworaW5saW5l
IFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIGludDMyX3Qgb2Zmc2V0ID0g
Zml4dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogeworICAgICAgICByZXR1cm4g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5k
KExvYWQ4UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIFRtcCB2YWx1ZSA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFMpLCBv
cmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4oKSwgdmFsdWUpOworICAg
IH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOiB7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQo
TG9hZDhaKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgfQorCisgICAgY2FzZSBM
b2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsKKyAgICAgICAgVG1wIHZhbHVlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4WiksIG9y
aWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAg
fQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOiB7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQo
TG9hZDE2UyksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDE2UzogeworICAgICAgICBUbXAgdmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDE2Uyks
IG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7Cisg
ICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOiB7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtp
bmQoTG9hZDE2WiksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VTogeworICAgICAgICBUbXAgdmFsdWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZDE2
WiksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7
CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOiB7CisgICAgICAgIHJldHVy
biBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtp
bmQoTG9hZCksIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICB9CisKKyAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKKyAgICAgICAgVG1wIHZhbHVlID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExv
YWQpLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCks
IHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6IHsKKyAg
ICAgICAgVG1wIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIFNFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQ6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50NjQsIG9yaWdpbigpLCBw
b2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDog
eworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBGbG9hdCwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNl
dCk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOiB7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9y
eUtpbmQoTG9hZCksIERvdWJsZSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgfQor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOworCisgICAgaWYgKFVOTElL
RUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSkpIHsK
KyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkgb3V0IG9mIGJv
dW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBp
dAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0aGlzIG1heSBj
aGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MzUKKyAg
ICAgICAgQjM6OlBhdGNocG9pbnRUbXAgdGhyb3dFeGNlcHRpb24gPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbigp
KTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZC
b3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOgorICAgICAgICBjYXNlIExvYWRP
cFR5cGU6OkkzMkxvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQ4VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDMyLCAwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoK
KyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgorICAg
ICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnQoSW50NjQsIDApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9
IGNvbnN0YW50KEZsb2F0LCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExv
YWRPcFR5cGU6OkY2NExvYWQ6CisgICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChEb3VibGUs
IDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0gZWxzZQorICAgICAg
ICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2lu
dGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCit7
CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAg
ICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNh
c2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3Rv
cmUxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBl
OjpGMzJTdG9yZToKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0
U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIHJldHVybiA4
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2lubGlu
ZSB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQp
Cit7CisgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIs
IHVvZmZzZXQpOworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2
NFN0b3JlODoKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOworICAgICAgICBGQUxMVEhST1VHSDsK
KworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlOCksIG9y
aWdpbigpLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOwor
ICAgICAgICBGQUxMVEhST1VHSDsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
bWVtb3J5S2luZChTdG9yZTE2KSwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLCBvZmZzZXQpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAg
ICAgICB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1
bmMsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgICAgIEZBTExUSFJPVUdIOworCisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0
U3RvcmU6CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgbWVtb3J5S2luZChTdG9yZSksIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNl
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50
MzIpOworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBz
aXplT2ZTdG9yZU9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlz
IGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwg
c28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlv
bi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHRocm93RXhj
ZXB0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRH
ZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZU9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJl
UG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3ApKSwgdmFsdWUsIG9mZnNl
dCk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTZWxl
Y3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHBy
ZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCitBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQWlySVJHZW5l
cmF0b3I6OmFkZENvbnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0
dXJuIGNvbnN0YW50KHRvQjNUeXBlKHR5cGUpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgQWlySVJHZW5l
cmF0b3I6OmVtaXRUaWVyVXBDaGVjayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgT3JpZ2luIG9y
aWdpbikKK3sKKyAgICBpZiAoIW1fdGllclVwKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV90aWVyVXApOworICAgIFRtcCBjb3VudERvd25Mb2NhdGlvbiA9IGNvbnN0YW50KHBvaW50
ZXJUeXBlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVwKSwgb3JpZ2luKTsK
KyAgICBUbXAgb2xkQ291bnREb3duID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLCBjb3VudERvd25Mb2NhdGlvbik7Cisg
ICAgVG1wIG5ld0NvdW50RG93biA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgU3ViLCBvcmlnaW4sIG9sZENvdW50RG93biwgY29uc3RhbnQoSW50MzIsIGRlY3JlbWVu
dENvdW50LCBvcmlnaW4pKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4sIG5ld0NvdW50RG93biwgY291bnREb3duTG9jYXRp
b24pOworCisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4pOworICAgIEVm
ZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxk
IGhhdmUgYSBtb3JlIHByZWNpc2UgaGVhcCByYW5nZSBmb3IgdGhlIHRpZXIgdXAgY291bnQuCisg
ICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIGVmZmVjdHMud3Jp
dGVzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgcGF0Y2gtPmVmZmVjdHMgPSBlZmZlY3Rz
OworCisgICAgcGF0Y2gtPmFwcGVuZChuZXdDb3VudERvd24sIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOworICAgIHBhdGNoLT5hcHBlbmQob2xkQ291bnREb3duLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUs
IHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgIHBhcmFtcy5h
ZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICB0aWVyVXAu
bGluaygmaml0KTsKKworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0cmFQYWRkaW5nQnl0
ZXMgPSAwOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbCA9IHsgfTsK
KyAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGwuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQ
cmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJz
VG9TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBleHRyYVBhZGRpbmdCeXRlcyk7
CisKKyAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9m
dW5jdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChq
aXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1Vz
ZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOworICAgICAgICAg
ICAgaml0Lmp1bXAodGllclVwUmVzdW1lKTsKKworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8Tm9Q
dHJUYWc+KGNhbGwpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpz
aW5nbGV0b24oKS5zdHViKHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CisKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworQWlySVJHZW5l
cmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJl
KQoreworICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKworICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgYm9k
eSk7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7CisgICAgZW1pdFRpZXJVcENoZWNrKFRp
ZXJVcENvdW50Ojpsb29wRGVjcmVtZW50KCksIG9yaWdpbigpKTsKKworICAgIHJldHVybiBDb250
cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgY29u
dGludWF0aW9uLCBib2R5KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklS
R2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29u
dHJvbERhdGEobV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OlRvcExldmVs
LCBtX3Byb2MuYWRkQmxvY2soKSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBB
aXJJUkdlbmVyYXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENv
bnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywg
bV9wcm9jLmFkZEJsb2NrKCkpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJZihFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gZG8gc29t
ZSBraW5kIG9mIHN0YWNrIHBhc3NpbmcuCisKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fcHJv
Yy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisK
KyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3Jz
KEZyZXF1ZW50ZWRCbG9jayh0YWtlbiksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbikpOworICAg
IHRha2VuLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgbm90VGFrZW4tPmFk
ZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gdGFr
ZW47CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJl
LCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdp
bigpLCBkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxl
KGRhdGEpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShD
b250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChkYXRhLnR5
cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lh
bDsKKyAgICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNT
RVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXpl
KCkpCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9j
LCBCMzo6UmV0dXJuLCBvcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBdKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0
dXJuLCBvcmlnaW4oKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0Rm9yQnJh
bmNoKCkpOworCisgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJy
YW5jaCgpOworICAgIGlmIChjb25kaXRpb24pIHsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJn
ZXQpLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisgICAgICAgIHRhcmdldC0+YWRk
UHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBjb250aW51YXRpb24tPmFkZFBy
ZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250
aW51YXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFy
Z2V0KSk7CisgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwor
ICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFN3
aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+
JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRo
QmxvY2soZXhwcmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHRGb3JCcmFuY2goKSk7Cisg
ICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0LnJl
c3VsdEZvckJyYW5jaCgpKTsKKworICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGNvbmRp
dGlvbik7CisgICAgc3dpdGNoVmFsdWUtPnNldEZhbGxUaHJvdWdoKEZyZXF1ZW50ZWRCbG9jayhk
ZWZhdWx0VGFyZ2V0LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHN3aXRjaFZhbHVlLT5hcHBl
bmRDYXNlKFN3aXRjaENhc2UoaSwgRnJlcXVlbnRlZEJsb2NrKHRhcmdldHNbaV0tPnRhcmdldEJs
b2NrRm9yQnJhbmNoKCkpKSk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEg
PSBlbnRyeS5jb250cm9sRGF0YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Np
b25TdGFjaywgZGF0YS5yZXN1bHQpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAg
IGRhdGEuY29udGludWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisKKyAg
ICByZXR1cm4gYWRkRW5kVG9VbnJlYWNoYWJsZShlbnRyeSk7Cit9CisKKworYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsK
KyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOworCisgICAgaWYgKGRhdGEu
dHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKKyAg
ICB9CisKKyAgICBmb3IgKFRtcCByZXN1bHQgOiBkYXRhLnJlc3VsdCkgeworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgIH0KKworICAgIC8vIFRvcExldmVsIGRvZXMg
bm90IGhhdmUgYW55IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBl
bWl0IGEgcmV0dXJuIGhlcmUuCisgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9w
TGV2ZWwpCisgICAgICAgIHJldHVybiBhZGRSZXR1cm4oZW50cnkuY29udHJvbERhdGEsIGVudHJ5
LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0
cnVlOworCisgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAg
ICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
ID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisKKyAgICBpZiAobV9pbmZvLmlzSW1wb3J0
ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKKyAgICAg
ICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3Vt
ZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICAgICAgLy8g
RklYTUUgaW1wb3J0cyBjYW4gYmUgbGlua2VkIGhlcmUsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBh
IHBhdGNocG9pbnQsIGJlY2F1c2UgYWxsIGltcG9ydCBzdHVicyBhcmUgZ2VuZXJhdGVkIGJlZm9y
ZSBCMyBjb21waWxhdGlvbiBzdGFydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjY0NjIKKyAgICAgICAgVG1wIHRhcmdldEluc3RhbmNlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zm
c2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAgICAvLyBUaGUgdGFy
Z2V0IGluc3RhbmNlIGlzIDAgdW5sZXNzIHRoZSBjYWxsIGlzIHdhc20tPndhc20uCisgICAgICAg
IFRtcCBpc1dhc21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBOb3RFcXVhbCwgb3JpZ2luKCksIHRhcmdldEluc3RhbmNlLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpOworCisgICAgICAgIEJh
c2ljQmxvY2sqIGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2lj
QmxvY2sqIGlzRW1iZWRkZXJCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdp
bigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVk
QmxvY2soaXNFbWJlZGRlckJsb2NrKSk7CisKKyAgICAgICAgVG1wIHdhc21DYWxsUmVzdWx0ID0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9y
aWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAgIFs9XSAoUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQg
YmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0
aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJv
dW5kcyBjaGVja2luZy4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhh
dmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MjE4MQorICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAg
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2Fs
bCgpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVu
ZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCks
IGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIFVwc2lsb25WYWx1ZSogd2FzbUNhbGxS
ZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzV2FzbUJsb2Nr
LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNtQ2FsbFJlc3Vs
dCk7CisgICAgICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBK
dW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKKworICAgICAgICAvLyBGSVhNRTogTGV0J3Mg
cmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKKyAg
ICAgICAgLy8gZm9yIGNhbGxzIG91dCB0byB0aGUgZW1iZWRkZXIuIFRoaXMgc2hvdWxkbid0IGJl
IHRoYXQgaGFyZCB0byBkby4gV2UgY291bGQgcHJvYmFibHkKKyAgICAgICAgLy8gaW1wbGVtZW50
IHRoZSBJQyB0byBiZSBvdmVyIENvbnRleHQqLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMzc1CisgICAgICAgIFRtcCBqdW1wRGVzdGluYXRp
b24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAg
ICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwg
c2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1
bmN0aW9uSW5kZXgpKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25pbmcoKSkKKyAg
ICAgICAgICAgIGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdFhvciwgb3JpZ2luKCksIGp1bXBEZXN0aW5hdGlvbiwgaXNFbWJlZGRl
ckJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENv
ZGVQb2lzb24pKTsKKworICAgICAgICBUbXAgZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4o
KSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgICAgICBbPV0gKFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoanVtcERlc3RpbmF0aW9uLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJz
IHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAgICAgICAgICAg
IC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21l
dGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
TGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZykpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0
dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQu
Y2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQ
dHJUYWcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIFVw
c2lsb25WYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9p
ZCA/IG51bGxwdHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJC
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAg
ICAgICAgaWYgKHJldHVyblR5cGUgPT0gVm9pZCkKKyAgICAgICAgICAgIHJlc3VsdCA9IG51bGxw
dHI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gY29udGludWF0aW9uLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgUGhpLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwgb3JpZ2lu
KCkpOworICAgICAgICAgICAgd2FzbUNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsK
KyAgICAgICAgICAgIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3Ro
ZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3Vy
IE1lbW9yeS4KKyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNh
Y2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3By
b2MsIGNvbnRpbnVhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gd2FzbUNh
bGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdp
bigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAgIFs9XSAoUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
ID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlv
bkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAg
QVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAg
bV9tYWtlc0NhbGxzID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGluZGlyZWN0IGNhbiBjYWxs
IGVpdGhlciBXZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LiBCZWNhdXNlCisgICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gaXMgbGlrZSBjYWxs
aW5nIGludG8gdGhlIGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgYWxsIGNhbGwg
aW5kaXJlY3RzCisgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNo
ZWNrIGNhbGN1bGF0aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgo
bV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUo
KSkpOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKKyAgICBF
eHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlckxlbmd0aDsKKyAgICBFeHByZXNzaW9uVHlwZSBtYXNrOworICAgIHsK
KyAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAg
ICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zm
c2V0T2ZUYWJsZSgpKSk7CisgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxl
OjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CisgICAgICAgIGluc3RhbmNlc0J1ZmZlciA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFi
bGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ckxlbmd0aCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50MzIsIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMy
X3Q+KFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgICAgIG1hc2sgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksCisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEludDMyLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJf
dD4oVGFibGU6Om9mZnNldE9mTWFzaygpKSkpOworICAgIH0KKworICAgIC8vIENoZWNrIHRoZSBp
bmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCisgICAgeworICAgICAgICBDaGVja1Zh
bHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIG9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCkpOworCisgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzQ2FsbEluZGlyZWN0KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgY2FsbGVlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KTsKKworICAgIGlmIChPcHRpb25zOjplbmFi
bGVTcGVjdHJlTWl0aWdhdGlvbnMoKSkKKyAgICAgICAgY2FsbGVlSW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksIG1hc2ssIGNh
bGxlZUluZGV4KTsKKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb247CisgICAg
eworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNl
IHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgRXhwcmVzc2lvblR5cGUgb2Zmc2V0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdpbigpLAorICAg
ICAgICAgICAgY2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSkpOworICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBj
YWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQg
dGhlIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAg
aWYgaXQgaXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBu
b3QgaW5pdGlhbGl6ZWQuCisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5k
bGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6Omlu
dmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc3MjEwCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2Rl
Z2VuIGFzc3VtZXMgaTY0Iik7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVy
ZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBJbnQ2NCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+
KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkp
OworICAgICAgICB7CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVyZUluZGV4LAor
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpKSk7CisKKyAgICAg
ICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5l
bWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1
cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0LgorICAgICAgICB7CisgICAgICAgICAgICBF
eHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlKSk7CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNp
Z25hdHVyZUluZGV4KSk7CisKKyAgICAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25U
eXBlOjpCYWRTaWduYXR1cmUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBEbyBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFRt
cCBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwg
b3JpZ2luKCksCisgICAgICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQocG9pbnRlclR5cGUo
KSwgc2l6ZW9mKEluc3RhbmNlKikpKTsKKyAgICAgICAgVG1wIG5ld0NvbnRleHRJbnN0YW5jZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9p
bnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0
KSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2Nr
KCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1fcHJvYy5hZGRCbG9j
aygpOworCisgICAgICAgIFRtcCBpc1NhbWVDb250ZXh0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKKyAgICAgICAgICAg
IG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigp
LAorICAgICAgICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNlLCBGcmVxdWVudGVkQmxvY2soY29u
dGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOworCisgICAgICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3
PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIC8vIFdlIHBl
c3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhpbmcgd2l0aCBCb3VuZHND
aGVja2luZyBtZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBk
byB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisg
ICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmQobmV3Q29udGV4dEluc3RhbmNlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJh
bXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFy
YW1zWzFdLmdwcigpOworICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5u
ZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGF1
dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgR1BS
UmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICAg
ICAgQVNTRVJUKG5ld0NvbnRleHRJbnN0YW5jZSAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIElu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdD
b250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwor
ICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFu
Y2UpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNl
TWVtb3J5KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRo
YW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyCisgICAgICAgICAgICAvLyAgIHNlZTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgorICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIEFTU0VS
VCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkg
c2l6ZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdD
b250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7IC8vIE1lbW9yeTo6dm9pZCouCisgICAgICAgIH0pOworICAgICAgICBkb0NvbnRleHRT
d2l0Y2gtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250
aW51YXRpb24pOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAg
IH0KKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAorICAgICAg
ICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zm
c2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CisgICAgaWYgKE9wdGlvbnM6OnVzZVBv
aXNvbmluZygpKQorICAgICAgICBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCaXRYb3IsIG9yaWdpbigpLCBjYWxsZWVDb2RlLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2Rl
UG9pc29uKSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgp
OworICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisg
ICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWln
aHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3Rp
Y2FsbHkgYXNzdW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5k
cyBjaGVja2luZyBzbworICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2FzbS0+d2FzbSB0aHVu
ayB1bmNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lzdGVycy4KKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNt
LT53YXNtIHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAgICAgICAgIC8vIHVzZSBhbGwgdGhlIHBp
bm5lZCByZWdpc3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcp
KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0
dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVu
IHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9k
aWZpZWQgb3VyIE1lbW9yeS4KKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0
b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCks
IG1fcHJvYywgbV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBB
aXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgcGhpLCBjb25zdCBFeHBy
ZXNzaW9uVHlwZSBzb3VyY2UpCit7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNp
bG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNvdXJjZSwgcGhpKTsKK30KKwordm9pZCBBaXJJ
UkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
c3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3Vs
dC5zaXplKCkgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNp
emUoKSAtIDEgLSBpXSwgcmVzdWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsK
K30KKworc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXIm
IGNvbW1hLCBjb25zdCBBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25T
dGFjaykKK3sKKyAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOworICAgIGZv
ciAoY29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgZGF0
YUxvZyhjb21tYSwgKmV4cHJlc3Npb24pOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1w
KGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Np
b25MaXN0KiBleHByZXNzaW9uU3RhY2spCit7CisgICAgZGF0YUxvZ0xuKCJDb25zdGFudHM6Iik7
CisgICAgZm9yIChjb25zdCBhdXRvJiBjb25zdGFudCA6IG1fY29uc3RhbnRQb29sKQorICAgICAg
ICBkYXRhTG9nTG4oZGVlcER1bXAobV9wcm9jLCBjb25zdGFudC52YWx1ZSkpOworCisgICAgZGF0
YUxvZ0xuKCJQcm9jZXNzaW5nIEdyYXBoOiIpOworICAgIGRhdGFMb2cobV9wcm9jKTsKKyAgICBk
YXRhTG9nTG4oIldpdGggY3VycmVudCBibG9jazoiLCAqbV9jdXJyZW50QmxvY2spOworICAgIGRh
dGFMb2dMbigiQ29udHJvbCBzdGFjazoiKTsKKyAgICBBU1NFUlQoY29udHJvbFN0YWNrLnNpemUo
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IGNvbnRyb2xTdGFjay5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgZGF0YUxvZygiICAiLCBjb250cm9sU3RhY2tbaV0uY29udHJvbERhdGEsICI6ICIpOwor
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIiwgIiIpOworICAgICAgICBkdW1wRXhwcmVz
c2lvblN0YWNrKGNvbW1hLCAqZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgZXhwcmVzc2lvblN0
YWNrID0gJmNvbnRyb2xTdGFja1tpXS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAg
ZGF0YUxvZ0xuKCk7CisgICAgfQorICAgIGRhdGFMb2dMbigpOworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KK3sKKyAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1f
cGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdP
ZmZzZXQoKSk7CisgICAgQVNTRVJUKGlzVmFsaWRPcFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4o
b3JpZ2luLm9wY29kZSgpKSkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmln
aW4pOworfQorCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVk
ZGVyRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAg
IGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8
Q0NhbGxIZWxwZXJzPigpOworCisgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKKworICAgIHByb2Nl
ZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBPcmlnaW4gb3JpZ2lu
KSB7CisgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCJX
YXNtOiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2luPihvcmlnaW4pKTsKKyAgICB9KTsKKyAg
ICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1c2UgZWl0aGVyIFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCisgICAgLy8gU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zOjp1bmF2YWlsYWJsZVJlZ2lzdGVycygpLiBJbiBleGNoYW5nZSBmb3IgdGhpcyBjb25j
ZXNzaW9uLCB3ZQorICAgIC8vIGRvbid0IHN0cmljdGx5IG5lZWQgdG8gcnVuIEFpcjo6cmVwb3J0
VXNlZFJlZ2lzdGVycygpLCB3aGljaCBzYXZlcyBhIGJpdCBvZiBDUFUgdGltZSBhdAorICAgIC8v
IG9wdExldmVsPTEuCisgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhmYWxzZSk7
CisgICAgCisgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9PSBDb21w
aWxhdGlvbk1vZGU6OkJCUU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUU9w
dGltaXphdGlvbkxldmVsKCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGlt
aXphdGlvbkxldmVsKCkpOworCisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywg
cHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBj
b21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9u
KTsKKyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9y
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworICAgIGlyR2VuZXJh
dG9yLmluc2VydENvbnN0YW50cygpOworCisgICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5
KCk7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIHZhbGlkYXRlKHByb2NlZHVy
ZSwgIkFmdGVyIHBhcnNpbmc6XG4iKTsKKworICAgIGRhdGFMb2dJZihXYXNtQWlySVJHZW5lcmF0
b3JJbnRlcm5hbDo6dmVyYm9zZSwgIlByZSBTU0E6ICIsIHByb2NlZHVyZSk7CisgICAgZml4U1NB
KHByb2NlZHVyZSk7CisgICAgZGF0YUxvZ0lmKFdhc21BaXJJUkdlbmVyYXRvckludGVybmFsOjp2
ZXJib3NlLCAiUG9zdCBTU0E6ICIsIHByb2NlZHVyZSk7CisKKworICAgIC8vIE9PUFM6IGNvbXB1
dGUgcHJlZGVjZXNzb3IgbGlzdCBoZXJlIQorICAgIAorICAgIHsKKyAgICAgICAgQjM6OnByZXBh
cmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZSk7CisgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1
cmUsICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOworICAgICAgICBjb21w
aWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVh
c2VCeXByb2R1Y3RzKCk7CisgICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVn
aXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAg
IH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKKy8vIEN1c3RvbSB3YXNtIG9w
cy4gVGhlc2UgYXJlIHRoZSBvbmVzIHRvbyBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCisKK3Zv
aWQgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJh
dGlvbiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpCit7CisgICAg
QVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwgb3BlcmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24g
PT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1vZCk7CisgICAgY29uc3QgQjM6OlR5cGUgdHlwZSA9
IGxlZnQtPnR5cGUoKTsKKworICAgIHsKKyAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigp
LAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBF
cXVhbCwgb3JpZ2luKCksIHJpZ2h0LCBjb25zdGFudCh0eXBlLCAwKSkpOworCisgICAgICAgIGNo
ZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25D
aGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6OkRpdmlzaW9uQnlaZXJvKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgaWYgKG9wZXJhdGlvbiA9PSBEaXYpIHsKKyAgICAgICAgaW50NjRfdCBtaW4g
PSB0eXBlID09IEludDMyID8gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgOiBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKTsKKworICAgICAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIGxlZnQsIGNv
bnN0YW50KHR5cGUsIG1pbikpLAorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCByaWdodCwgY29uc3RhbnQodHlw
ZSwgLTEpKSkpOworCisgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6OkludGVnZXJP
dmVyZmxvdyk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBF
eHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgZW1pdENoZWNrc0Zv
ck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgY29u
c3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxl
ZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgY29uc3QgQjM6Ok9w
Y29kZSBvcCA9IFVEaXY7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdo
dCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+KEV4cHJl
c3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7
CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQs
IEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAgICBlbWl0Q2hlY2tz
Rm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUg
cmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBj
b25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwg
bGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6
T3Bjb2RlIG9wID0gVURpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhw
cmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1v
ZDsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9y
aWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0
LmNvdW50VHJhaWxpbmdaZXJvczY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsK
KyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworI2lm
IENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxh
dGlvbigpKSB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4o
KSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
ICAgIGppdC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIo
KSk7CisgICAgICAgIH0pOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOworICAgICAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKyNlbmRpZgorCisgICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBb
XSAoaW50MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50
KHZhbHVlKTsgfTsKKyAgICBUbXAgZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lk
Kj4ocG9wY291bnQsIEIzQ0NhbGxQdHJUYWcpKTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLCBFZmZlY3Rz
Ojpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3Vu
dFBvcHVsYXRpb24oKSkgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwg
b3JpZ2luKCkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNb
MF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQ2NF90ICgqcG9wY291bnQpKGludDY0
X3QpID0gW10gKGludDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIF9fYnVpbHRpbl9w
b3Bjb3VudGxsKHZhbHVlKTsgfTsKKyAgICBUbXAgZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlv
blB0cjx2b2lkKj4ocG9wY291bnQsIEIzQ0NhbGxQdHJUYWcpKTsKKyAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigp
LCBFZmZlY3RzOjpub25lKCksIGZ1bmNBZGRyZXNzLCBhcmcpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBEb3VibGUsIG9yaWdpbigpKTsK
KyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9Eb3Vi
bGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFtcy5ncFNjcmF0Y2goMCkp
OworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3By
KCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgRmxvYXQsIG9yaWdpbigpKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2lu
dC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29u
c3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgICAgIGpp
dC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwg
cGFyYW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRv
RmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7
CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQg
PSBwYXRjaHBvaW50OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KG1fcHJvYywgRG91YmxlLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJbnREb3VibGUo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3By
b2MsIEZsb2F0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVS
ZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIERvdWJsZSwgb3JpZ2lu
KCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91
bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAg
ICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJl
c3VsdCA9IHBhdGNocG9pbnQ7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsK
KyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxv
YXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIGVtaXRQ
YXRjaHBvaW50KHBhdGNocG9pbnQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8v
IE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQo
RG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFu
dChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2lu
KCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVz
c1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsK
KyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAg
ICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFs
dWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQor
ICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAg
VG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNf
Y2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAg
VG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19j
YXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBU
bXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4o
KSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQo
SW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwor
ICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVj
ayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJh
bXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAg
ICovCisgICAgcmV0dXJuIHsgfTsKK30KKworCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1
ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMh
CisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSkgKiAtMi4wKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmln
aW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVl
KiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Cisg
ICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9m
Qm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMy
LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVS
ZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5j
VUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JB
U0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBj
b25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWlu
dDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4o
KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNz
VGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7Cisg
ICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAg
Q2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25U
eXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFy
YW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0
czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAg
ICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRt
cCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19j
YXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAg
VG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNf
Y2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAg
IFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIG9yaWdp
bigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFu
dChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50
LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQ2NChw
YXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50Owor
ICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRy
dWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlz
IQorICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSAqIC0yLjApKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdp
bigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91
bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3Jp
Z2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUq
IHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hl
Y2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZC
b3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0YW50OworICAgIGlm
IChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1
Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQgaW50ZWdlcnMsIHdl
IGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIG51
bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25lZCBpbnRlZ2VyLiBT
aW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBycyB3ZSBoYXZlIGIz
IGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVlZGVkLgorICAgICAg
ICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4
KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsKKyAgICB9CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50
LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBpZiAoaXNYODYoKSkg
eworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50LCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJz
ID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29u
c3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAg
ICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9
IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVU
b1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3Rh
bnQpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNT
RjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFT
SCgpOyAvLyBPT1BTOiBJbXBsZW1lbnQgdGhpcyEKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25z
dGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25z
dGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRz
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdp
bigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExl
c3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7
CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7Cisg
ICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4o
bV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQor
ICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcworICAgIC8qCisgICAgVG1w
IG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0
PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiBzdGF0aWNfY2Fz
dDxmbG9hdD4oLTIuMCkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgVG1wIG91dE9m
Qm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQs
IG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBt
aW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDAp
KTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVj
a1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4
Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgVG1wIHNpZ25C
aXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAvLyBTaW5jZSB4ODYgZG9l
c24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRvIGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVu
c2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFzdCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlm
CisgICAgICAgIC8vIHRoZSBudW1iZXJzIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNp
Z25lZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8g
ZnBycyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYg
bmVlZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChGbG9hdCwgYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1
aW50NjRfdD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7
CisgICAgfQorICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7Cisg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAg
aWYgKGlzWDg2KCkpIHsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKHNpZ25CaXRDb25zdGFu
dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2Ny
YXRjaFJlZ2lzdGVycyA9IDE7CisgICAgfQorICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAgICAg
ICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2KCkp
IHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAgICAg
ICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LnRy
dW5jYXRlRmxvYXRUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2Ny
YXRjaCwgY29uc3RhbnQpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVy
biB7IH07Cit9CisKK1BhcnRpYWxSZXN1bHQgQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KEtpbmQg
a2luZCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYgKGlzVmFs
aWRGb3JtKGtpbmQsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFw
cGVuZChraW5kLCB2YWx1ZSwgc2hpZnQsIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCByZXN1bHQpOworICAgIGFwcGVuZChNb3Zl
LCBzaGlmdCwgbV9lY3gpOworICAgIGFwcGVuZChraW5kLCBtX2VjeCwgcmVzdWx0KTsKK30KKwor
UGFydGlhbFJlc3VsdCBBaXJJUkdlbmVyYXRvcjo6YWRkSW50ZWdlclN1YihLaW5kIGtpbmQsIEV4
cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KQoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKGtpbmQs
IEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChraW5kLCBs
aHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBi
ID0gYiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKGtp
bmQsIHJocywgcmVzdWx0KTsKK30KKworUGFydGlhbFJlc3VsdCBBaXJJUkdlbmVyYXRvcjo6YWRk
RmxvYXRpbmdQb2ludEFicyhLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQWJzRmxvYXQg
fHwga2luZCA9PSBBYnNEb3VibGUpOworCisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBpZiAo
aXNWYWxpZEZvcm0oa2luZCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQo
a2luZCwgdmFsdWUsIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVChpc1g4NigpKTsKKworICAgIFRtcCBjb25zdGFudCA9IGdwcigpOworICAgIGlm
IChraW5kID09IEFic0Zsb2F0KSB7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSh+KDEg
PDwgMzEpKSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgY29uc3Rh
bnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChBbmRGbG9hdCwgdmFsdWUsIHJlc3VsdCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKH4oMSA8PCA2Mykp
LCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgY29uc3RhbnQsIHJl
c3VsdCk7CisgICAgICAgIGFwcGVuZChBbmREb3VibGUsIHZhbHVlLCByZXN1bHQpOworICAgIH0K
K30KKworUGFydGlhbFJlc3VsdCBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEJpbk9w
KEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNW
YWxpZEZvcm0oa2luZCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmdzOjpUbXApKSB7CisgICAgICAg
IGFwcGVuZChraW5kLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworCisgICAgLy8gT3AgYSwgYgorICAgIC8v
IG1lYW5zCisgICAgLy8gYiA9IGIgT3AgYQorICAgIC8vIE9PUFM6IHZlcmlmeQorICAgIGFwcGVu
ZChNb3ZlRG91YmxlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKGtpbmQsIHJocywgcmVzdWx0
KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MkNlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ2VpbEZsb2F0
LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTXVsMzIsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MkRlbW90ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252
ZXJ0RG91YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90
RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9y
RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24g
PSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNo
RmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBh
cmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVh
bCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhj
b250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJl
c3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFs
LT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAg
IGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1
YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0g
Y29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyTWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVu
dEJsb2NrLCBCcmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlz
RXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+
c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3Zl
RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEp
OworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOwor
CisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBw
ZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYWRkRmxvYXRpbmdQ
b2ludEJpbk9wKE11bERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
RGl2PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYWRkRmxvYXRpbmdQb2ludEJp
bk9wKERpdkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDbHo+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ291bnRMZWFkaW5nWmVyb3Mz
MiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29weXNpZ24+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29kZWdlbiBo
ZXJlIGZvciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHNpZ24gPSBncHIoKTsK
KyAgICBUbXAgdmFsdWUgPSBncHIoKTsKKworICAgIC8vIE9PUFM6IENhbiBmaXQgaW4gSW1tL0Jp
dEltbSBpbnN0ZWFkIG9mIEJpZ0ltbT8KKyAgICBhcHBlbmQoTW92ZUZsb2F0VG8zMiwgYXJnMSwg
dGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwKSwgc2lnbik7
CisgICAgYXBwZW5kKEFuZDMyLCB0ZW1wMSwgc2lnbiwgc2lnbik7CisKKyAgICBhcHBlbmQoTW92
ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
MHg3ZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBlbmQoQW5kMzIsIHRlbXAxLCB2YWx1ZSwgdmFs
dWUpOworCisgICAgYXBwZW5kKE9yMzIsIHNpZ24sIHZhbHVlLCB2YWx1ZSk7CisgICAgYXBwZW5k
KE1vdmUzMlRvRmxvYXQsIHZhbHVlLCByZXN1bHQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRV
STMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSB0bXAoKTsK
KyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0
VG9Eb3VibGUsIHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlJlaW50ZXJwcmV0STMyPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBbmQ2NCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0R3Q+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMlNxcnQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
U3FydEZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHZT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0Uz4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21w
YXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4pLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0RXF6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFRl
c3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0RGl2PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgLy8gT09QUzogd2hhdCBhYm91dCBjaGlsbC1uZXNzIGhlcmUuLi4/CisgICAgYWRkRmxvYXRp
bmdQb2ludEJpbk9wKERpdkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7
CisgICAgYXBwZW5kKEFkZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChPcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMZVU+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVh
bCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlUz4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
MzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0Q2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KENvdW50TGVhZGluZ1plcm9zNjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lZz4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChOZWdhdGVGbG9hdCwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQW5kPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFuZDMyLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0Um90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGFkZFNoaWZ0KFJvdGF0
ZVJpZ2h0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFicz4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGFkZEZsb2F0aW5nUG9pbnRBYnMoQWJzRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRXE+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29weXNpZ24+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29kZWdlbiBoZXJl
IGZvciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHNpZ24gPSBncHIoKTsKKyAg
ICBUbXAgdmFsdWUgPSBncHIoKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMSwg
dGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwMDAwMDAwMDAp
LCBzaWduKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFw
cGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmJpZ0ltbSgweDdmZmZmZmZmZmZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDY0LCB0
ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjY0LCBzaWduLCB2YWx1ZSwgdmFs
dWUpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyQ29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBh
cHBlbmQoQ29udmVydEludDY0VG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
Um90bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGFkZFNoaWZ0KFJvdGF0ZUxl
ZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTHQ+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFy
ZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9Eb3VibGUsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyR2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhZGRT
aGlmdChVcnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZl
cnRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSB0bXAo
KTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydElu
dDY0VG9GbG9hdCwgdGVtcCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyUz4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIGFkZFNoaWZ0KFJzaGlmdDMyLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhZGRTaGlmdChDb21wYXJlMzIsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjY0Q2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVu
ZChDZWlsRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVM+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNobD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIGFkZFNoaWZ0KExzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRGbG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChGbG9vckRvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKFhvcjMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRNaW4+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1f
Y3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JEb3VibGUs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlz
RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVh
bCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90RXF1YWwsIEJyYW5j
aERvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFy
ZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3Jl
YXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVE
b3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgSnVt
cCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7
CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJN
dWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoTXVsRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFN1
Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGFkZEludGVnZXJTdWIoU3ViNjQs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlaW50ZXJwcmV0RjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBZGQzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFN1YkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyT3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3IzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0THRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0Uz4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0k2ND4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChNdWw2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRQcm9tb3RlRjMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5k
KENvbnZlcnRGbG9hdFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBZGQ+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBh
cHBlbmQoQWRkRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVM+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFu
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFVJMzI+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJOZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRSZWludGVycHJldEk2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFw
cGVuZChNb3ZlNjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRXE+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFs
KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXE+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyRmxvb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoRmxvb3JGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVy
dFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydElu
dDMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRXF6PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVp
bnRlcnByZXRGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92
ZURvdWJsZVRvNjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclM+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhZGRTaGlmdChSc2hpZnQ2NCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGFkZFNoaWZ0KFVyc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0U3FydD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBhZGRTaGlmdChMc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyV3JhcEk2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChNb3ZlMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJvdGw+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhZGRTaGlmdChSb3RhdGVMZWZ0MzIsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBhZGRTaGlmdChSb3RhdGVSaWdodDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5k
U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChTaWduRXh0ZW5k
MzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RTPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE5lZ2F0ZURv
dWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0TmVnPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE5l
Z2F0ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWF4PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1
cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBl
bmQoaXNFcXVhbCwgQW5kRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChp
c0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7
CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAg
YXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vz
c29ycyhsZXNzVGhhbiwgY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChsZXNzVGhhbiwgTW92
ZURvdWJsZSwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAg
IGxlc3NUaGFuLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRC
bG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMZVU+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0QWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFkZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360204</attachid>
            <date>2019-01-25 18:29:30 -0800</date>
            <delta_ts>2019-01-25 18:36:21 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>131182</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHBy
b3RlY3RlZDoKICAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhBaXI6Oklu
c3QmKSBmaW5hbDsKICAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0
JikgZmluYWw7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5l
cmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1w
SW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBzdWJjbGFzc2VzIHRo
YXQgaW1wbGVtZW50IHRoYXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKICAgICAgICAgdW5z
aWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4NzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIlNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgor
I2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0
SW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21PTUdQbGFuLmgiCisjaW5jbHVkZSAiV2FzbU9w
Y29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK2NsYXNzIEFpcklSR2Vu
ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250
cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIFR5cGUgc2lnbmF0dXJlLCBC
bG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVj
aWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAg
ICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3Bl
Y2lhbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSAhPSBWb2lkKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUo
c2lnbmF0dXJlKSwgb3JpZ2luKSk7CisgICAgICAgIH0KKworICAgICAgICBDb250cm9sRGF0YSgp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgi
SWY6ICAgICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBC
bG9ja1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2s6ICAgICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6Okxv
b3A6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgICAgIik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjog
IiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7CisgICAgICAgICAgICBpZiAoc3BlY2lh
bCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoKnNwZWNpYWwpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTm9uZSIpOworICAgICAgICB9CisKKyAgICAg
ICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBibG9ja1R5cGU7IH0KKworICAgICAg
ICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiByZXN1bHQuc2l6ZSgp
OyB9CisKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb247
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRJZlRvQmxvY2soKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQodHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgICAgICAg
ICAgYmxvY2tUeXBlID0gQmxvY2tUeXBlOjpCbG9jazsKKyAgICAgICAgICAgIHNwZWNpYWwgPSBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogV2hhdCBpcyB0aGlzPworICAg
ICAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPFRtcCwgMT47IC8vIFZhbHVlIG11c3QgYmUg
YSBQaGkKKworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdEZvckJyYW5jaCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAg
ICAgICAgICAgIHJldHVybiBSZXN1bHRMaXN0KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgQWlySVJH
ZW5lcmF0b3I7CisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGU7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKKyAgICAgICAg
UmVzdWx0TGlzdCByZXN1bHQ7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0g
VG1wOworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhw
cmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3Vs
dExpc3QgQ29udHJvbERhdGE6OlJlc3VsdExpc3Q7CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0g
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9IFRtcCB7IH07CisK
KyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3Vs
dCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcg
UGFydGlhbFJlc3VsdCA9IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAg
ICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdh
c21QYXJzZXIuaC4KKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygi
V2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdz
KS4uLikpOworICAgIH0KKworI2RlZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24s
IC4uLikgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAg
ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWdu
YXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChU
eXBlLCB1aW50MzJfdCk7CisgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWlu
dDY0X3QpOworCisgICAgLy8gTG9jYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBHbG9iYWxzCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAg
IC8vIE1lbW9yeQorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9h
ZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwg
dWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBz
dG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVu
dE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIEJhc2ljIG9wZXJhdG9y
cworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVy
bywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAv
LyBDb250cm9sIGZsb3cKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVG9w
TGV2ZWwoVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1
cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xEYXRhJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFs
dWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29u
dHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0
YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisKKyAgICAvLyBDYWxscworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJ
bmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRVbnJlYWNoYWJsZSgpOworCisgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChLaW5k
IGtpbmQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRlZ2VyU3ViKEtpbmQg
a2luZCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQb2ludEFicyhLaW5k
IGtpbmQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRCaW5PcChLaW5kIGtpbmQsIEV4cHJlc3Np
b25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KworICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNr
LCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIHNldFBh
cnNlcihGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9
IHBhcnNlcjsgfTsKKworICAgIFRtcCBjb25zdGFudChCMzo6VHlwZSwgdWludDY0X3QgYml0cywg
T3B0aW9uYWw8T3JpZ2luPiA9IFdURjo6bnVsbG9wdCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJs
b2NrLCBBaXI6OktpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgLy8gT09QUzogQWRkIG9yaWdpbgorICAgICAgICBibG9jay0+YXBwZW5kKGtpbmQsIG51
bGxwdHIsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBaXI6
OktpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXBw
ZW5kKG1fY3VycmVudEJsb2NrLCBraW5kLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKTsKKyAgICB9CisKKyAgICBUbXAgdG1wKEJhbmsgYmFuaykgeyByZXR1cm4gbV9jb2Rl
Lm5ld1RtcChiYW5rKTsgfQorICAgIFRtcCBncHIoKSB7IHJldHVybiB0bXAoR1ApOyB9CisgICAg
VG1wIGZwcigpIHsgcmV0dXJuIHRtcChGUCk7IH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IGFkZFBhdGNocG9pbnQoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3By
b2MuYWRkPEIzOjpQYXRjaHBvaW50VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2lu
dChCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdz
KQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBy
ZXN1bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Js
b2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwg
QXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFs
KQorICAgICAgICAgICAgbV9wYXRjaHBvaW50U3BlY2lhbCA9IG1fY29kZS5hZGRTcGVjaWFsKHN0
ZDo6bWFrZV91bmlxdWU8QjM6OlBhdGNocG9pbnRTcGVjaWFsPigpKTsKKworICAgICAgICBJbnN0
IGluc3QoUGF0Y2gsIHBhdGNoLCBBcmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOwor
ICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSAh
PSBCMzo6Vm9pZCk7CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGF1dG8gYXJncyA9IHN0ZDo6bWFrZV90dXBsZSguLi50
aGVBcmdzKTsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8g
T09QUzogVWdoLCB0aGlzIGlzIHN1cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBC
Mzo6VmFsdWUqIGhlcmUuCisgICAgICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdv
cmssIGJ1dCBvdXIgYWx0ZXJuYXRpdmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAg
ICAgLy8gb3IgcmVpbnZlbnQgcGFydCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAg
IHBhdGNoLT5hcHBlbmQobnVsbHB0ciwgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICBwYXRjaC0+bGF0
ZUNsb2JiZXJlZCgpLmNsZWFyKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykK
KyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoZ3ByKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBwYXRjaC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZChmcHIoKSk7CisKKyAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdU
Rk1vdmUoaW5zdCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCcmFuY2gsIHR5
cGVuYW1lIEdlbmVyYXRvcj4KKyAgICB2b2lkIGVtaXRDaGVjayhjb25zdCBCcmFuY2gmIGVtaXRC
cmFuY2gsIGNvbnN0IEdlbmVyYXRvciYgZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gV2Ug
ZmFpbCBhbG9uZyB0aGUgInRydXRoeSIgZWRnZSBvZiAnYnJhbmNoJworCisgICAgICAgIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Js
b2NrKiBmYWlsZWQgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRC
cmFuY2goKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0
aW9uLCBmYWlsZWQpOworCisgICAgICAgIGF1dG8qIGZhaWxlZFBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgZmFpbGVkUGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KGdlbmVyYXRvcik7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGZhaWxlZCwgZmFpbGVkUGF0Y2hw
b2ludCwgVG1wKCkpOworICAgICAgICBhcHBlbmQoZmFpbGVkLCBPb3BzKTsKKworICAgICAgICBt
X2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRDQ2FsbCh2b2lkKiBmdW5jLCBUbXAgcmVzdWx0
LCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBlbWl0Q0NhbGwobV9jdXJyZW50QmxvY2ss
IGZ1bmMsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0Q0NhbGwoQmFzaWNCbG9j
ayogYmxvY2ssIHZvaWQqIGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICB7Cisg
ICAgICAgIEluc3QgaW5zdChBaXI6OkNDYWxsLCBudWxscHRyKTsKKworICAgICAgICBUbXAgY2Fs
bGVlID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbVB0cih0YWdDRnVuY3Rp
b25QdHI8dm9pZCo+KGZ1bmMsIEIzQ0NhbGxQdHJUYWcpKSwgY2FsbGVlKTsKKyAgICAgICAgaW5z
dC5hcmdzLmFwcGVuZChjYWxsZWUpOworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgYXV0byBhcmdzID0gc3RkOjpt
YWtlX3R1cGxlKC4uLnRoZUFyZ3MpOworICAgICAgICBmb3IgKFRtcCB0bXAgOiBhcmdzKQorICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChpbW1PclRtcChjQ2FsbC0+Y2hpbGQoaSkpKTsKKwor
ICAgICAgICBibG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgIH0KKworCisgICAgdm9p
ZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisKKyAg
ICB2b2lkIGVtaXRUaWVyVXBDaGVjayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgT3JpZ2luKTsK
KworICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOworICAg
IEIzOjpLaW5kIG1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCk7CisgICAgRXhwcmVzc2lv
blR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwor
CisgICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Np
b25UeXBlIHNvdXJjZSk7CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKworICAg
IHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKworICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVU
VVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CisK
KyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYsIEJhc2ljQmxv
Y2sqLCBUbXApOworICAgIGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywg
WWVzIH07CisgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBUbXAgaW5zdGFuY2UsIFBy
b2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKKworICAgIE9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzog
V2UgbmVlZCB0byBtYWtlIGFuIEFpcjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5n
IGZyb20gQjMgY29kZS4KKworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9w
YXJzZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsK
KyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
IH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGls
YXRpb25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4
IHsgVUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRy
IH07CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFz
aWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9y
b290IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOworICAgIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsg
Ly8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJl
c3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BS
IHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CisKKyAgICBUbXAgbV9p
bnN0YW5jZVZhbHVlIHsgbnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxv
dyB0byBlbnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQu
CisgICAgYm9vbCBtX3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBUbXAgaW5zdGFu
Y2VWYWx1ZSgpCisgICAgeworICAgICAgICBtX3VzZXNJbnN0YW5jZVZhbHVlID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG1faW5zdGFuY2VWYWx1ZTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBtX21h
eE51bUpTQ2FsbEFyZ3VtZW50cyB7IDAgfTsKKworICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCog
bV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKK307CisKKy8vIE1lbW9yeSBhY2Nlc3Nl
cyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRo
ZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCitpbnQzMl90IEFpcklSR2VuZXJh
dG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90
IG9mZnNldCkKK3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7
CisgICAgICAgIHB0ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
QWRkLCBvcmlnaW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2Fz
bUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBUbXAg
YXJnKQoreworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lz
dGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6
IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVn
aXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0
aGUgY2FsbGVyIHNpZGUuCisgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3Vt
ZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKKyAgICBFZmZlY3RzIGVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7CisgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAg
IGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gZWZmZWN0czsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNl
dChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5z
dGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBHUFJSZWcgd2FzbUNv
bnRleHRJbnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgeworICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIo
KSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisgICAgfSk7Cit9CisKK0FpcklSR2VuZXJhdG9y
OjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1v
ZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNl
cHRpb24pCisgICAgOiBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9j
b21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1
bmN0aW9uSW5kZXgpCisgICAgLCBtX3RpZXJVcCh0aWVyVXApCisgICAgLCBtX3Byb2MocHJvY2Vk
dXJlKQorICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCisgICAgLCBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQoreworICAgIG1fY3VycmVudEJsb2Nr
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICAvLyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVl
ZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUgaWYgdGhlcmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdh
c20gLT4gd2FzbSB0aHVua3Mgc2ltcGxlciBmb3Igbm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIzCisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBw
aW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFz
ZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgbV9jb2RlLnBpblJlZ2lz
dGVyKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBw
aW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOworICAgIGlmICghQ29udGV4dDo6
dXNlRmFzdFRMUygpKQorICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dElu
c3RhbmNlR1BSKTsKKworICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewor
ICAgICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsK
KyAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNp
emVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBy
ZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9jb2RlLnBp
blJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dX
YXNtRXhjZXB0aW9uKQorICAgICAgICBUaHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4
Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOworCisgICAgaWYgKGluZm8ubWVtb3J5KSB7Cisg
ICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgc3dpdGNoICht
X21vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9
PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5u
ZWRHUFIsIEludmFsaWRHUFJSZWcgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1v
ZGU6OlNpZ25hbGluZzoKKyAgICAgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNp
Z25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRp
b24gY2hlY2sgYmVjYXVzZSB0aGV5IGNhbiByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVj
dAorICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5k
bGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qg
c28gdGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5r
R2VuZXJhdG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBG
cmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywg
T3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKKworICAgIHsKKyAgICAgICAgQjM6OlRtcCBmcmFt
ZVBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6RnJhbWVQb2ludGVyLCBPcmlnaW4oKSk7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHN0YWNrT3ZlcmZsb3dDaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CisgICAgICAgIG1f
aW5zdGFuY2VWYWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsKKyAgICAgICAgc3RhY2tPdmVyZmxv
d0NoZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKTsKKyAgICAgICAgc3RhY2tP
dmVyZmxvd0NoZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMo
KSk7CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0
YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3Jl
IGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMg
ZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5u
ZWQgcmVnaXN0ZXIuCisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3Jp
dGVzUGlubmVkID0gZmFsc2U7CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVj
dHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5y
ZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIp
OworICAgICAgICB9CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNoUmVn
aXN0ZXJzID0gMjsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNp
emUgPSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOworICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbWluaW11bVBhcmVudENoZWNrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIDEwMjQpOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0
cmFGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBzdGQ6Om1heDx1aW50MzJfdD4oCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3Mg
dXMgdG8gZWxpZGUgc3RhY2sgY2hlY2tzIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgdGVybWluYWwg
bm9kZXMgaW4gdGhlIGNhbGwKKyAgICAgICAgICAgICAgICAvLyB0cmVlLCAoZS5nIHRoZXkgZG9u
J3QgbWFrZSBhbnkgY2FsbHMpIGFuZCBoYXZlIGEgc21hbGwgZW5vdWdoIGZyYW1lIHNpemUuIFRo
aXMgd29ya3MgYnkKKyAgICAgICAgICAgICAgICAvLyBoYXZpbmcgYW55IHN1Y2ggdGVybWluYWwg
bm9kZSBoYXZlIGl0cyBwYXJlbnQgY2FsbGVyIGluY2x1ZGUgc29tZSBleHRyYSBzaXplIGluIGl0
cworICAgICAgICAgICAgICAgIC8vIG93biBjaGVjayBmb3IgaXQuIFRoZSBnb2FsIGhlcmUgaXMg
dHdvZm9sZDoKKyAgICAgICAgICAgICAgICAvLyAxLiBFbWl0IGxlc3MgY29kZS4KKyAgICAgICAg
ICAgICAgICAvLyAyLiBUcnkgdG8gc3BlZWQgdGhpbmdzIHVwIGJ5IHNraXBwaW5nIHN0YWNrIGNo
ZWNrcy4KKyAgICAgICAgICAgICAgICBtaW5pbXVtUGFyZW50Q2hlY2tTaXplLAorICAgICAgICAg
ICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBpbiB0aGUgV2Fz
bSAtPiBFbWJlZGRlciBjYWxsIElDIHN0dWIuIFNpbmNlIHRoZXNlIHdpbGwKKyAgICAgICAgICAg
ICAgICAvLyBzcGlsbCBhbGwgYXJndW1lbnRzIHRvIHRoZSBzdGFjaywgd2UgZW5zdXJlIHRoYXQg
YSBzdGFjayBjaGVjayBoZXJlIGNvdmVycyB0aGUKKyAgICAgICAgICAgICAgICAvLyBzdGFjayB0
aGF0IHN1Y2ggYSBzdHViIHdvdWxkIHVzZS4KKyAgICAgICAgICAgICAgICAoQ2hlY2tlZDx1aW50
MzJfdD4obV9tYXhOdW1KU0NhbGxBcmd1bWVudHMpICogc2l6ZW9mKFJlZ2lzdGVyKSArIGpzY0Nh
bGxpbmdDb252ZW50aW9uKCkuaGVhZGVyU2l6ZUluQnl0ZXMoKSkudW5zYWZlR2V0KCkKKyAgICAg
ICAgICAgICkpOworICAgICAgICAgICAgY29uc3QgaW50MzJfdCBjaGVja1NpemUgPSBtX21ha2Vz
Q2FsbHMgPyAod2FzbUZyYW1lU2l6ZSArIGV4dHJhRnJhbWVTaXplKS51bnNhZmVHZXQoKSA6IHdh
c21GcmFtZVNpemUudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dD
aGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2
ZWRab25lU2l6ZSgpOworICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21h
a2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5l
ZWRVbmRlcmZsb3dDaGVjazsKKworICAgICAgICAgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9
IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUjsKKworICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgbGVhZiBmdW5jdGlvbnMg
dG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXplIGlzIHdpdGhpbgorICAg
ICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2FsbGVyIHdvdWxkIGhhdmUg
YWxyZWFkeSBkb25lIHRoZSBjaGVjay4KKyAgICAgICAgICAgIGlmIChuZWVkc092ZXJmbG93Q2hl
Y2spIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGZwID0gcGFyYW1zWzFdLmdw
cigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2go
MCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgx
KTsKKworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAg
ICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2Up
OworCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNv
bnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2Ny
YXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoLWNoZWNrU2l6ZSksIGZwLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShuZWVkVW5kZXJmbG93Q2hlY2spKQorICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBl
bmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoMSwgZnApKTsKKyAg
ICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6
OkJlbG93LCBzY3JhdGNoMSwgc2NyYXRjaDIpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRo
dW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJv
bVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFz
dFRMUygpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVk
LCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgorICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRj
aChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2Ny
YXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0
YW5jZShjb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkg
bmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2
YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNo
IHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgIH0KKworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25F
bnRyeURlY3JlbWVudCgpLCBPcmlnaW4oKSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBUbXAg
aW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlm
IChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVz
KSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQg
YWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBUbXAg
cG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNl
VmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0
dWFsU3RhY2tMaW1pdCgpKSk7CisgICAgICAgIFRtcCBhY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCk7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigp
LCBhY3R1YWxTdGFja0xpbWl0LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KElu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgIH0KKworICAgIGlmICgh
IW1lbW9yeSkgeworICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3Mg
PSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJl
cnM7CisgICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7
CisgICAgICAgIGZvciAoYXV0byBpbmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKKyAg
ICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZvLnNpemVSZWdpc3Rlcik7CisKKyAgICAgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNo
cG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAgICAgICAgRWZmZWN0cyBl
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXIoY2xvYmJlcnMpOworCisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5j
ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1v
cnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1
dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFT
U0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdz
WzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBh
dCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRv
IDAuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1z
WzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVn
c1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBz
aXplUmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0pOworICAg
IH0KK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVs
cGVycyYgaml0LCBFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvblN0dWIgPSBqaXQuanVtcCgp
OworCisgICAgaml0LmFkZExpbmtUYXNrKFtqdW1wVG9FeGNlcHRpb25TdHViXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9u
U3R1YiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9u
KCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwor
ICAgIH0pOworfQorCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwg
dWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5
dGVzQ2hlY2tlZCArPSBtX2xvY2Fscy5zaXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsK
KyAgICBXQVNNX0NPTVBJTEVfRkFJTF9JRigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3Rh
bEJ5dGVzKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0
b3RhbEJ5dGVzLCAiIGxvY2FscyIpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgVmFyaWFibGUqIGxvY2FsID0gbV9wcm9jLmFkZFZhcmlhYmxl
KHRvQjNUeXBlKHR5cGUpKTsKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxvY2Fs
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3By
b2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgMCwgT3Jp
Z2luKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOworICAgIFdBU01fQ09NUElMRV9G
QUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksICIgYXJndW1lbnRzIik7CisKKyAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkpOworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLmxvYWRBcmd1bWVudHMo
c2lnbmF0dXJlLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBPcmlnaW4oKSwKKyAgICAgICAgWz1d
IChFeHByZXNzaW9uVHlwZSBhcmd1bWVudCwgdW5zaWduZWQgaSkgeworICAgICAgICAgICAgVmFy
aWFibGUqIGFyZ3VtZW50VmFyaWFibGUgPSBtX3Byb2MuYWRkVmFyaWFibGUoYXJndW1lbnQtPnR5
cGUoKSk7CisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IGFyZ3VtZW50VmFyaWFibGU7CisgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywg
U2V0LCBPcmlnaW4oKSwgYXJndW1lbnRWYXJpYWJsZSwgYXJndW1lbnQpOworICAgICAgICB9KTsK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4oKSwgbV9s
b2NhbHNbaW5kZXhdKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0Y2hwb2lu
dFZhbHVlKiB1bnJlYWNoYWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgIHVucmVhY2hhYmxl
LT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNr
KGppdCwgRXhjZXB0aW9uVHlwZTo6VW5yZWFjaGFibGUpOworICAgIH0pOworICAgIHVucmVhY2hh
YmxlLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgaW50MzJfdCAoKmdy
b3dNZW1vcnkpKHZvaWQqLCBJbnN0YW5jZSosIGludDMyX3QpID0gW10gKHZvaWQqIGNhbGxGcmFt
ZSwgSW5zdGFuY2UqIGluc3RhbmNlLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKKyAgICAg
ICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICAgICAgaWYg
KGRlbHRhIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBhdXRvIGdyb3du
ID0gaW5zdGFuY2UtPm1lbW9yeSgpLT5ncm93KFBhZ2VDb3VudChkZWx0YSkpOworICAgICAgICBp
ZiAoIWdyb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgorICAgICAg
ICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CisgICAg
ICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToK
KyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBn
cm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOworICAgIH07CisKKyAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZ3Jvd01lbW9yeSwgQjNDQ2FsbFB0clRh
ZykpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOwor
CisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGlt
aXQ6Ok5vLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgbV9jdXJyZW50
QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8TWVtb3J5Kj4o
bnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBv
biB0aGlzIHNpemUiKTsKKyAgICBUbXAgc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVl
KCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUo
KSkpOworCisgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKKyAgICBzdGF0
aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhp
cyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgVG1w
IG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hy
LCBvcmlnaW4oKSwKKyAgICAgICAgc2l6ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsKKworICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbigp
LCBudW1QYWdlcyk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKKyAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCks
IG1fbG9jYWxzW2luZGV4XSwgdmFsdWUpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFRtcCBnbG9iYWxzQXJyYXkgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNl
OjpvZmZzZXRPZkdsb2JhbHMoKSkpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUobV9pbmZvLmdsb2JhbHNb
aW5kZXhdLnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90Pihp
bmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHRvQjNUeXBlKG1faW5mby5nbG9i
YWxzW2luZGV4XS50eXBlKSA9PSB2YWx1ZS0+dHlwZSgpKTsKKyAgICBUbXAgZ2xvYmFsc0FycmF5
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90
PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIGdsb2Jh
bHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQ
Uik7CisKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmc6IHsKKyAgICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBh
dCBhbGwsIHdlIG11c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNl
ZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBzaXplLgorICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXpl
R1BSKTsKKyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIG1fbWVtb3J5U2l6ZUdQUiwgcG9pbnRlciwgc2l6ZU9mT3BlcmF0
aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVt
b3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQg
NEdpQityZWR6b25lIGZvciB0aGlzIG1lbW9yeS4gT25seSB0aGUgdXNlci1hbGxvY2F0ZWQgcGFn
ZXMgYXJlIGFkZHJlc3NhYmxlLCBjb250aWd1b3VzbHkgaW4gcmFuZ2UgWzAsIGN1cnJlbnRdLAor
ICAgICAgICAvLyBhbmQgZXZlcnl0aGluZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05FLiBXZSBk
b24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0aGUgNEdp
QiByYW5nZSBiZWNhdXNlIFdlYkFzc2VtYmx5IHJlZ2lzdGVyCisgICAgICAgIC8vIG1lbW9yeSBh
Y2Nlc3NlcyBhcmUgMzItYml0LiBIb3dldmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyICsgb2Zmc2V0
IGFjY2Vzc2VzIHBlcmZvcm0gdGhlIGFkZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBh
biBhY2Nlc3MgYWJvdmUKKyAgICAgICAgLy8gdGhlIDMyLWJpdCBsaW1pdCAodGhlIG9mZnNldCBp
cyB1bnNpZ25lZCAzMi1iaXQpLiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgb2Zm
c2V0cywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueQorICAgICAgICAvLyBy
ZWdpc3RlciArIGxhcmdlIG9mZnNldCBhY2Nlc3MuIFdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBi
ZSBnZW5lcmF0ZWQgZnJlcXVlbnRseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQg
Y2hlY2sgdGhhdCByZWdpc3RlciArIGxhcmdlIG9mZnNldCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3Jl
ZHpvbmUgc2luY2UgdGhhdCdzIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lk
IG92ZXJmbG93aW5nIHRoZQorICAgICAgICAvLyBQUk9UX05PTkUgcmVnaW9uLCBidXQgaXQncyBi
ZXR0ZXIgaWYgd2UgdXNlIGEgc21hbGxlciBpbW1lZGlhdGUgYmVjYXVzZSBpdCBjYW4gY29kZWdl
bnMgYmV0dGVyLiBXZSBrbm93IHRoYXQgYW55dGhpbmcgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAg
ICAgICAvLyB0aGFuIHRoZSBkZWNsYXJlZCAnbWF4aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4g
Y29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQgJ21h
eGltdW0nIHRoZW4gd2Ugc3RpbGwga25vdyB0aGF0CisgICAgICAgIC8vIGFueSBhY2Nlc3MgZXF1
YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDRHaUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUg
cmVkem9uZS4KKyAgICAgICAgaWYgKG9mZnNldCA+PSBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25l
Qnl0ZXMoKSkgeworICAgICAgICAgICAgc2l6ZV90IG1heGltdW0gPSBtX2luZm8ubWVtb3J5Lm1h
eGltdW0oKSA/IG1faW5mby5tZW1vcnkubWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBz
aXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxLCBtYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CisgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKK30KKworaW5saW5lIHVpbnQz
Ml90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQ4VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQ4VToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
MzJMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzoKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkkzMkxvYWQxNlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgor
ICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMy
VToKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6CisgICAgICAgIHJldHVybiA0OworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6
CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitpbmxpbmUgQjM6OktpbmQgQWlySVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6
Ok9wY29kZSBtZW1vcnlPcCkKK3sKKyAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25h
bGluZykKKyAgICAgICAgcmV0dXJuIHRyYXBwaW5nKG1lbW9yeU9wKTsKKyAgICByZXR1cm4gbWVt
b3J5T3A7Cit9CisKK2lubGluZSBUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9w
VHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAg
ICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNl
dCk7CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6
IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzogeworICAgICAgICBUbXAg
dmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1l
bW9yeUtpbmQoTG9hZDhTKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3Jp
Z2luKCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTog
eworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4WiksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7CisgICAgICAgIFRtcCB2
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVt
b3J5S2luZChMb2FkOFopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmln
aW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2Uzog
eworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6IHsKKyAgICAgICAgVG1w
IHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBt
ZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBv
cmlnaW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2
VTogeworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0
KTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAg
VG1wIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBtZW1vcnlLaW5kKExvYWQxNlopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMy
LCBvcmlnaW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDogeworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIsIG9m
ZnNldCk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOiB7CisgICAg
ICAgIFRtcCB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50MzIsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBaRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkMzJTOiB7CisgICAgICAgIFRtcCB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50MzIsIG9yaWdp
bigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCks
IEludDY0LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxvYXQsIG9yaWdp
bigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0
TG9hZDogeworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBEb3VibGUsIG9yaWdpbigpLCBwb2ludGVy
LCBvZmZzZXQpOworICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMy
KTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6
ZU9mTG9hZE9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlz
IHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28g
d2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4g
SG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIEIzOjpQYXRjaHBvaW50VG1wIHRocm93RXhjZXB0aW9u
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0
b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4
Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoK
KyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRP
cFR5cGU6OkkzMkxvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgICAgICAgICByZXN1bHQgPSBj
b25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6Cisg
ICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChGbG9hdCwgMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0
ID0gY29uc3RhbnQoRG91YmxlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0
KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9w
KFN0b3JlT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJMzJTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgICAg
ICByZXR1cm4gMTsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgorICAgIGNhc2Ug
U3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkkzMlN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIHJldHVybiA0OworICAgIGNh
c2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3Jl
OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworCitpbmxpbmUgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3Rv
cmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVl
LCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIGludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVy
UGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBj
YXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKKyAg
ICAgICAgRkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVt
b3J5S2luZChTdG9yZTgpLCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgICAg
IHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywg
b3JpZ2luKCksIHZhbHVlKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3Jl
T3BUeXBlOjpJMzJTdG9yZTE2OgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmUxNiksIG9yaWdpbigpLCB2YWx1ZSwg
cG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6STY0U3RvcmUzMjoKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOworICAgICAgICBGQUxMVEhS
T1VHSDsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgorICAgIGNhc2UgU3RvcmVP
cFR5cGU6OkkzMlN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3JlOgorICAgIGNh
c2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmUpLCBvcmlnaW4oKSwgdmFs
dWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c3RvcmUo
U3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9p
bnRlci0+dHlwZSgpID09IEludDMyKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8
dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhN
RTogRXZlbiB0aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBh
IHZhbGlkYXRpb24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFz
IGEgcnVudGltZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiB0aHJvd0V4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6
OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgICAgICB0
aHJvd0V4Y2VwdGlvbi0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5l
bWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFj
Y2Vzcyk7CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVPcChvcCwg
ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9w
KG9wKSksIHZhbHVlLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lv
blR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGNvbmRpdGlvbiwgbm9u
WmVybywgemVybyk7CisgICAgcmV0dXJuIHsgfTsKK30KKworQWlySVJHZW5lcmF0b3I6OkV4cHJl
c3Npb25UeXBlIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90
IHZhbHVlKQoreworICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOwor
fQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVt
ZW50Q291bnQsIE9yaWdpbiBvcmlnaW4pCit7CisgICAgaWYgKCFtX3RpZXJVcCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVG1wIGNvdW50RG93bkxvY2F0aW9uID0gY29uc3RhbnQocG9pbnRlclR5
cGUoKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obV90aWVyVXApLCBvcmlnaW4pOworICAg
IFRtcCBvbGRDb3VudERvd24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIGNvdW50RG93bkxvY2F0aW9uKTsKKyAgICBU
bXAgbmV3Q291bnREb3duID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBTdWIsIG9yaWdpbiwgb2xkQ291bnREb3duLCBjb25zdGFudChJbnQzMiwgZGVjcmVtZW50Q291
bnQsIG9yaWdpbikpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgU3RvcmUsIG9yaWdpbiwgbmV3Q291bnREb3duLCBjb3VudERvd25Mb2NhdGlvbik7
CisKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbik7CisgICAgRWZmZWN0
cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2
ZSBhIG1vcmUgcHJlY2lzZSBoZWFwIHJhbmdlIGZvciB0aGUgdGllciB1cCBjb3VudC4KKyAgICBl
ZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgZWZmZWN0cy53cml0ZXMg
PSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisK
KyAgICBwYXRjaC0+YXBwZW5kKG5ld0NvdW50RG93biwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CisgICAgcGF0Y2gtPmFwcGVuZChvbGRDb3VudERvd24sIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgdGllclVwID0gaml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcGFy
YW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgcGFyYW1zLmFkZExh
dGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIHRpZXJVcC5saW5r
KCZqaXQpOworCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYVBhZGRpbmdCeXRlcyA9
IDA7CisgICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsID0geyB9OworICAg
ICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbC5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNl
cnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKKwor
ICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2Z1bmN0
aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwg
cmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZv
clJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRlcyk7CisgICAgICAgICAgICBq
aXQuanVtcCh0aWVyVXBSZXN1bWUpOworCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxOb1B0clRh
Zz4oY2FsbCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmds
ZXRvbigpLnN0dWIodHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCitBaXJJUkdlbmVyYXRv
cjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpCit7
CisgICAgQmFzaWNCbG9jayogYm9keSA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworCisgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsK
KworICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVw
Q291bnQ6Omxvb3BEZWNyZW1lbnQoKSwgb3JpZ2luKCkpOworCisgICAgcmV0dXJuIENvbnRyb2xE
YXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51
YXRpb24sIGJvZHkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5l
cmF0b3I6OmFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9s
RGF0YShtX3Byb2MsIE9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1f
cHJvYy5hZGRCbG9jaygpKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklS
R2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJv
bERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBtX3By
b2MuYWRkQmxvY2soKSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fcHJvYy5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigp
LCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50
ZWRCbG9jayh0YWtlbiksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbikpOworICAgIHRha2VuLT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgbm90VGFrZW4tPmFkZFByZWRlY2Vz
c29yKG1fY3VycmVudEJsb2NrKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47CisgICAg
cmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5
cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlW
YWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRh
LmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOwor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0
YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBC
bG9ja1R5cGU6OklmKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKKyAgICBk
YXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHJldHVy
blZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXplKCkpCisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0
dXJuLCBvcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBdKTsKKyAgICBlbHNlCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBvcmln
aW4oKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQnJh
bmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0Rm9yQnJhbmNoKCkpOwor
CisgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOwor
ICAgIGlmIChjb25kaXRpb24pIHsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpLCBGcmVx
dWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNz
b3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29y
KG1fY3VycmVudEJsb2NrKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0KSk7Cisg
ICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgIH0KKwor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRz
LCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhw
cmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHRGb3JCcmFuY2goKSk7CisgICAgdW5pZnlW
YWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0LnJlc3VsdEZvckJy
YW5jaCgpKTsKKworICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGNvbmRpdGlvbik7Cisg
ICAgc3dpdGNoVmFsdWUtPnNldEZhbGxUaHJvdWdoKEZyZXF1ZW50ZWRCbG9jayhkZWZhdWx0VGFy
Z2V0LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRhcmdldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3
aXRjaENhc2UoaSwgRnJlcXVlbnRlZEJsb2NrKHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJh
bmNoKCkpKSk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpl
bmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0
YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5j
b250cm9sRGF0YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywg
ZGF0YS5yZXN1bHQpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIGRhdGEuY29u
dGludWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4g
YWRkRW5kVG9VbnJlYWNoYWJsZShlbnRyeSk7Cit9CisKKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBtX2N1
cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOworCisgICAgaWYgKGRhdGEudHlwZSgpID09
IEJsb2NrVHlwZTo6SWYpIHsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKKyAgICB9CisKKyAg
ICBmb3IgKFRtcCByZXN1bHQgOiBkYXRhLnJlc3VsdCkgeworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
LmFwcGVuZChyZXN1bHQpOworICAgIH0KKworICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUg
YW55IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0
dXJuIGhlcmUuCisgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCisg
ICAgICAgIHJldHVybiBhZGRSZXR1cm4oZW50cnkuY29udHJvbERhdGEsIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisg
ICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisKKyAgICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlv
bkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgbV9tYXhO
dW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICAgICAgLy8gRklYTUUgaW1w
b3J0cyBjYW4gYmUgbGlua2VkIGhlcmUsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9p
bnQsIGJlY2F1c2UgYWxsIGltcG9ydCBzdHVicyBhcmUgZ2VuZXJhdGVkIGJlZm9yZSBCMyBjb21w
aWxhdGlvbiBzdGFydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY0NjIKKyAgICAgICAgVG1wIHRhcmdldEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJn
ZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAgICAvLyBUaGUgdGFyZ2V0IGluc3Rh
bmNlIGlzIDAgdW5sZXNzIHRoZSBjYWxsIGlzIHdhc20tPndhc20uCisgICAgICAgIFRtcCBpc1dh
c21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVh
bCwgb3JpZ2luKCksIHRhcmdldEluc3RhbmNlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpOworCisgICAgICAgIEJhc2ljQmxvY2sq
IGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlz
RW1iZWRkZXJCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dh
c21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNF
bWJlZGRlckJsb2NrKSk7CisKKyAgICAgICAgVG1wIHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBh
cmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53
cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMu
cmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJl
ciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmlu
ZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZy4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8g
dGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVu
Y3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9u
SW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIFVwc2lsb25WYWx1ZSogd2FzbUNhbGxSZXN1bHRVcHNp
bG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzV2FzbUJsb2NrLT5hcHBlbmRO
ZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNtQ2FsbFJlc3VsdCk7CisgICAg
ICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmln
aW4oKSwgY29udGludWF0aW9uKTsKKworICAgICAgICAvLyBGSVhNRTogTGV0J3MgcmVtb3ZlIHRo
aXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKKyAgICAgICAgLy8g
Zm9yIGNhbGxzIG91dCB0byB0aGUgZW1iZWRkZXIuIFRoaXMgc2hvdWxkbid0IGJlIHRoYXQgaGFy
ZCB0byBkby4gV2UgY291bGQgcHJvYmFibHkKKyAgICAgICAgLy8gaW1wbGVtZW50IHRoZSBJQyB0
byBiZSBvdmVyIENvbnRleHQqLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwMzc1CisgICAgICAgIFRtcCBqdW1wRGVzdGluYXRpb24gPSBpc0Vt
YmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5k
ZXgpKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25pbmcoKSkKKyAgICAgICAgICAg
IGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEJpdFhvciwgb3JpZ2luKCksIGp1bXBEZXN0aW5hdGlvbiwgaXNFbWJlZGRlckJsb2NrLT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENvZGVQb2lzb24p
KTsKKworICAgICAgICBUbXAgZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanVtcERl
c3RpbmF0aW9uLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdl
IG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAgICAgICAgICAgIC8vIFdlIHBl
c3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzIxODEKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJh
bXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIFVwc2lsb25WYWx1
ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxw
dHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICAgICAgaWYg
KHJldHVyblR5cGUgPT0gVm9pZCkKKyAgICAgICAgICAgIHJlc3VsdCA9IG51bGxwdHI7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgUGhpLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwgb3JpZ2luKCkpOworICAg
ICAgICAgICAgd2FzbUNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAg
ICAgIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNz
ZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4K
KyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIGNvbnRp
bnVhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdz
LCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0
ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVh
ZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAgQVNTRVJUKHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9tYWtlc0Nh
bGxzID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGluZGlyZWN0IGNhbiBjYWxsIGVpdGhlciBX
ZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLiBCZWNhdXNl
CisgICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gaXMgbGlrZSBjYWxsaW5nIGludG8g
dGhlIGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgYWxsIGNhbGwgaW5kaXJlY3Rz
CisgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1
bGF0aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1K
U0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOworCisg
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKKyAgICBFeHByZXNzaW9u
VHlwZSBpbnN0YW5jZXNCdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlckxlbmd0aDsKKyAgICBFeHByZXNzaW9uVHlwZSBtYXNrOworICAgIHsKKyAgICAgICAg
RXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJs
ZSgpKSk7CisgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxlOjpvZmZzZXRP
ZkZ1bmN0aW9ucygpKSk7CisgICAgICAgIGluc3RhbmNlc0J1ZmZlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksCisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFibGU6Om9mZnNl
dE9mSW5zdGFuY2VzKCkpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
MzIsIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxl
OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgICAgIG1hc2sgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBv
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFibGU6
Om9mZnNldE9mTWFzaygpKSkpOworICAgIH0KKworICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBh
cmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCisgICAgeworICAgICAgICBDaGVja1ZhbHVlKiBjaGVj
ayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEFib3ZlRXF1YWwsIG9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlckxlbmd0aCkpOworCisgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzQ2FsbEluZGlyZWN0KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgY2FsbGVl
SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwg
b3JpZ2luKCksIGNhbGxlZUluZGV4KTsKKworICAgIGlmIChPcHRpb25zOjplbmFibGVTcGVjdHJl
TWl0aWdhdGlvbnMoKSkKKyAgICAgICAgY2FsbGVlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksIG1hc2ssIGNhbGxlZUluZGV4
KTsKKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb247CisgICAgeworICAgICAg
ICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBs
b29raW5nIGZvci4KKyAgICAgICAgRXhwcmVzc2lvblR5cGUgb2Zmc2V0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdpbigpLAorICAgICAgICAgICAg
Y2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uKSkpOworICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyLCBvZmZzZXQpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNu
J3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlh
bGl6ZWQuCisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2Ug
Y2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRl
eCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3Vt
ZXMgaTY0Iik7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2
NCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkpOworICAgICAg
ICB7CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVyZUluZGV4LAorICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpKSk7CisKKyAgICAgICAgICAgIGNo
ZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0
aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hl
cyB0aGUgdmFsdWUgd2UgZXhwZWN0LgorICAgICAgICB7CisgICAgICAgICAgICBFeHByZXNzaW9u
VHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlKSk7CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RF
cXVhbCwgb3JpZ2luKCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUlu
ZGV4KSk7CisKKyAgICAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpCYWRT
aWduYXR1cmUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBE
byBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFRtcCBvZmZzZXQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCks
CisgICAgICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9m
KEluc3RhbmNlKikpKTsKKyAgICAgICAgVG1wIG5ld0NvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0KSk7CisKKyAg
ICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1fcHJvYy5hZGRCbG9jaygpOworCisg
ICAgICAgIFRtcCBpc1NhbWVDb250ZXh0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG5ld0NvbnRl
eHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLAorICAgICAg
ICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNlLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9u
KSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOworCisgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIC8vIFdlIHBlc3NpbWlzdGlj
YWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhpbmcgd2l0aCBCb3VuZHNDaGVja2luZyBt
ZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdp
c3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQobmV3Q29udGV4dEluc3RhbmNlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdw
cigpOworICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0g
UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVS
ZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgR1BSUmVnIGJhc2VN
ZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICAgICAgQVNTRVJU
KG5ld0NvbnRleHRJbnN0YW5jZSAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0
LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5z
dGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAgICAg
ICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOworICAg
ICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1l
bW9yeSBzaXplIHJlZ2lzdGVyCisgICAgICAgICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgorICAgICAgICAgICAgQVNTRVJUKHNpemVS
ZWdzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJl
Z3NbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5z
dGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8v
IE1lbW9yeTo6dm9pZCouCisgICAgICAgIH0pOworICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24p
OworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAorICAgICAgICAgICAgc2Fm
ZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRy
eXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CisgICAgaWYgKE9wdGlvbnM6OnVzZVBvaXNvbmluZygp
KQorICAgICAgICBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRYb3IsIG9yaWdpbigpLCBjYWxsZWVDb2RlLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2RlUG9pc29uKSk7
CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIHJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIFs9
XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xv
YmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVh
dmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNz
dW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2lu
ZyBzbworICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2FzbS0+d2FzbSB0aHVuayB1bmNvbmRp
dGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNtIHN0
dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAgICAgICAgIC8vIHVzZSBhbGwgdGhlIHBpbm5lZCByZWdp
c3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9
PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworCisgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3Ro
ZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3Vy
IE1lbW9yeS4KKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywg
bV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdlbmVy
YXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgcGhpLCBjb25zdCBFeHByZXNzaW9uVHlw
ZSBzb3VyY2UpCit7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHNvdXJjZSwgcGhpKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRv
cjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNr
LCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkg
PD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVz
dWx0LnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAtIDEg
LSBpXSwgcmVzdWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsKK30KKworc3Rh
dGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBj
b25zdCBBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK3sK
KyAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOworICAgIGZvciAoY29uc3Qg
YXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgZGF0YUxvZyhjb21t
YSwgKmV4cHJlc3Npb24pOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBl
eHByZXNzaW9uU3RhY2spCit7CisgICAgLy8gT09QUyEKKyAgICAvKgorICAgIGRhdGFMb2dMbigi
UHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgZGF0YUxvZ0xu
KCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsKKyAgICBkYXRhTG9nTG4o
IkNvbnRyb2wgc3RhY2s6Iik7CisgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOworICAg
IGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGRh
dGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAgZHVtcEV4cHJlc3Npb25TdGFj
ayhjb21tYSwgKmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGV4cHJlc3Npb25TdGFjayA9ICZj
b250cm9sU3RhY2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGRhdGFMb2dM
bigpOworICAgIH0KKyAgICBkYXRhTG9nTG4oKTsKKyAgICAqLworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KK3sKKyAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1f
cGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdP
ZmZzZXQoKSk7CisgICAgQVNTRVJUKGlzVmFsaWRPcFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4o
b3JpZ2luLm9wY29kZSgpKSkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmln
aW4pOworfQorCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVk
ZGVyRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAg
IGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8
Q0NhbGxIZWxwZXJzPigpOworCisgICAgQjM6OlByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQ29k
ZSYgY29kZSA9IHByb2NlZHVyZS5jb2RlKCk7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJp
bnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwgT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAo
b3JpZ2luLmRhdGEoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9j
YXN0PE9wY29kZU9yaWdpbj4ob3JpZ2luKSk7CisgICAgfSk7CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB3ZSBjYW5ub3QgdXNlIGVpdGhlciBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVzZWRS
ZWdpc3RlcnMoKSBvcgorICAgIC8vIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dW5hdmFpbGFi
bGVSZWdpc3RlcnMoKS4gSW4gZXhjaGFuZ2UgZm9yIHRoaXMgY29uY2Vzc2lvbiwgd2UKKyAgICAv
LyBkb24ndCBzdHJpY3RseSBuZWVkIHRvIHJ1biBBaXI6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKSwg
d2hpY2ggc2F2ZXMgYSBiaXQgb2YgQ1BVIHRpbWUgYXQKKyAgICAvLyBvcHRMZXZlbD0xLgorICAg
IC8vIE9PUFM6IERvIHdlIG5lZWQgdGhpcz8gU2hvdWxkIHdlIGp1c3Qgc2V0IGl0IGRpcmVjdGx5
IG9uIENvZGU/CisgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhmYWxzZSk7Cisg
ICAgCisgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxh
dGlvbk1vZGU6OkJCUU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUU9wdGlt
aXphdGlvbkxldmVsKCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXph
dGlvbkxldmVsKCkpOworCisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJv
Y2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21w
aWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsK
KyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgc3VjY2Vzc29yLT5hZGRQcmVk
ZWNlc3NvcihibG9jayk7CisgICAgfQorICAgIC8vIE9PUFM6IFZhbGlkYXRlICdjb2RlJyBoZXJl
IQorICAgIAorICAgIHsKKyAgICAgICAgQWlyOjpnZW5lcmF0ZShwcm9jLmNvZGUoKSwgKmNvbXBp
bGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVj
dHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBj
b2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgIH0KKworICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja3NG
b3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhw
cmVzc2lvblR5cGUgcmlnaHQpCit7CisgICAgQVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwgb3Bl
cmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24gPT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1vZCk7
CisgICAgY29uc3QgQjM6OlR5cGUgdHlwZSA9IGxlZnQtPnR5cGUoKTsKKworICAgIHsKKyAgICAg
ICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBLaW5kIG9wID0gaXM2NEJpdE9wKG9wZXJh
dGlvbikgPyBCcmFuY2hUZXN0NjQgOiBCcmFuY2hUZXN0MzI7CisgICAgICAgICAgICBhcHBlbmQo
b3AsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJpZ2h0LCByaWdodCk7Cisg
ICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0
LCBFeGNlcHRpb25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIGlmIChvcGVyYXRpb24gPT0gRGl2KSB7CisgICAgICAgIGludDY0X3QgbWluID0gdHlwZSA9
PSBJbnQzMiA/IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpIDogc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCk7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAg
ICAgICAgICAgLy8gT09QUzogVHJ5IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAg
ICAgICAgICBUbXAgbWluVG1wID0gZ3ByKCk7CisgICAgICAgICAgICBUbXAgbmVnT25lID0gZ3By
KCk7CisKKyAgICAgICAgICAgIEtpbmQgb3AgPSBpczY0Qml0T3Aob3BlcmF0aW9uKSA/IENvbXBh
cmU2NCA6IENvbXBhcmUzMjsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSht
aW4pLCBtaW5UbXApOworICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsKSwgbGVmdCwgbWluVG1wLCBtaW5UbXApOworICAgICAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6aW1tKC0xKSwgbmVnT25lKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIHJpZ2h0LCBuZWdPbmUsIG5lZ09u
ZSk7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6Ok5vdFplcm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAg
IFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpJbnRlZ2VyT3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKKy8vIE9P
UFM6IEltcGxlbWVudCB0aGVzZSBkaXYgb3BzISEhCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJl
c3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9k
T3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBC
Mzo6T3Bjb2RlIG9wID0gTW9kOworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwg
cmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2Rl
IG9wID0gVURpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsK
KyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAg
ICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhw
cmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2OworICAgIGVtaXRDaGVja3NGb3JN
b2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0
IEIzOjpPcGNvZGUgb3AgPSBNb2Q7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0
LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0IEIzOjpPcGNv
ZGUgb3AgPSBVRGl2OworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQp
OworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
b3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOwor
ICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0
Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGpp
dC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1z
WzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBh
dGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKyNlbmRpZgorCisgICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAo
aW50MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZh
bHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNpZiBDUFUoWDg2
XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkg
eworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIz
OjpJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
aml0LmNvdW50UG9wdWxhdGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsK
KyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQ2NF90
ICgqcG9wY291bnQpKGludDY0X3QpID0gW10gKGludDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsg
cmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9w
Y291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4Nigp
KQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworI2lmIENQVShYODZfNjQpCisgICAgICAg
IGppdC5jb252ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnBy
KCksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50
NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAg
ICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50
LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOwor
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2
KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAg
ICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZw
cigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252ZXJ0VUlu
dDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAg
ICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50
LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJbnRE
b3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJn
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFyYW1zWzFd
LmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnBy
KCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBh
dGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Rmxv
YXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFpl
cm9GbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAg
cmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBh
cmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVl
OworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEK
KworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBt
YXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdy
ZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0
T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlz
LT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5j
KTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkp
OworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwor
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNh
dGVEb3VibGVUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09Q
UzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9h
dCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9h
dCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBv
cmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0
T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFs
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tW
YWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpP
dXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJ
bnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0u
Z3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9
CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJU
cnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAg
IENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4
ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOworICAg
IFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkp
OworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwg
b3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNv
bnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91
bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0
aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsK
KyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1Vp
bnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBv
aW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wg
YiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVu
dCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBtaW4g
PSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1h
eCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3Jl
YXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9m
Qm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7
CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsK
KyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRl
RmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7
CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQg
PSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6
IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91Ymxl
LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3Vi
bGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4s
IG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBv
dXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1
YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVj
a1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3By
b2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6
Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAg
ICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKyAgICAvKgorICAgIFRtcCBtYXgg
PSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7CisgICAg
VG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7
CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBv
cmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29u
c3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3Vu
ZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRp
b25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOwor
CisgICAgVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAv
LyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRvIGNvbnZlcnQgZmxvYXRp
bmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFzdCB0cnkgdG8gZG8gdGhl
IHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJzIGFyZSB3b3VsZCBiZSBwb3Np
dGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2UgY2Fubm90IG1hdGVyaWFs
aXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAorICAgICAgICAvLyBzbyB3
ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJpdENvbnN0YW50ID0gY29u
c3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4o
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKHNpZ25CaXRDb25zdGFudCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAg
IHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgfQorICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsK
KyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBT
Y3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9KTsKKyAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9p
bnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBi
ID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogSW1wbGVtZW50
IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1pbigpKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywg
bWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBH
cmVhdGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91
dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigp
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5j
YXRlRmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09Q
UzogaW1wbGVtZW50IHRoaXMKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwg
Yml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CisgICAg
VG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19j
YXN0PGZsb2F0PigtMS4wKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCks
IGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJh
cCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29uc3RhbnQ7CisgICAgaWYgKGlz
WDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVjdGlv
biB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2UgYXQg
bGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAgICAgICAvLyB0aGUgbnVtYmVy
cyB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2Ug
Y2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAor
ICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJp
dENvbnN0YW50ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworICAgIH0KKyAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChzaWduQml0Q29uc3RhbnQsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAg
IH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBGUFJS
ZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIEZQUlJlZyBjb25zdGFudCA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBzY3JhdGNo
ID0gcGFyYW1zLmZwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgIGNvbnN0YW50ID0gcGFyYW1zWzJd
LmZwcigpOworICAgICAgICB9CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50NjQocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0aWFsUmVz
dWx0IEFpcklSR2VuZXJhdG9yOjphZGRTaGlmdChLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQoa2luZCwgdmFsdWUsIHNoaWZ0
LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICAKKyAgICBhcHBlbmQo
TW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUsIHNoaWZ0LCBtX2VjeCk7Cisg
ICAgYXBwZW5kKGtpbmQsIG1fZWN4LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK1Bh
cnRpYWxSZXN1bHQgQWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJTdWIoS2luZCBraW5kLCBFeHBy
ZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBB
cmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQoa2luZCwgbGhz
LCByaHMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlQoaXNYODYoKSk7CisgICAgLy8gU3ViIGEsIGIKKyAgICAvLyBtZWFucworICAgIC8v
IGIgPSBiIFN1YiBhCisgICAgYXBwZW5kKE1vdmUsIGxocywgcmVzdWx0KTsKKyAgICBhcHBlbmQo
a2luZCwgcmhzLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK1BhcnRpYWxSZXN1bHQg
QWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMoS2luZCBraW5kLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChraW5kID09IEFic0Zsb2F0IHx8IGtpbmQgPT0gQWJzRG91YmxlKTsKKworICAgIHJlc3VsdCA9
IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKGtpbmQsIEFyZzo6VG1wLCBBcmc6OlRtcCkp
IHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIHZhbHVlLCByZXN1bHQpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworCisgICAgVG1wIGNv
bnN0YW50ID0gZ3ByKCk7CisgICAgaWYgKGtpbmQgPT0gQWJzRmxvYXQpIHsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6aW1tKH4oMSA8PCAzMSkpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVu
ZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKEFuZEZs
b2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0ofigxIDw8IDYzKSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmU2
NFRvRG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKEFuZERvdWJsZSwg
dmFsdWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK1BhcnRpYWxSZXN1
bHQgQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5PcChLaW5kIGtpbmQsIEV4cHJl
c3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KQoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKGtpbmQsIEFy
Zzo6VG1wLCBBcmc6OlRtcCwgQXJnczo6VG1wKSkgeworICAgICAgICBhcHBlbmQoa2luZCwgbGhz
LCByaHMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlQoaXNYODYoKSk7CisKKyAgICAvLyBPcCBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAv
LyBiID0gYiBPcCBhCisgICAgLy8gT09QUzogdmVyaWZ5CisgICAgYXBwZW5kKE1vdmVEb3VibGUs
IGxocywgcmVzdWx0KTsKKyAgICBhcHBlbmQoa2luZCwgcmhzLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJDZWlsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENlaWxG
bG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTXVsPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE11bDMyLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWIzMiwgYXJnMCwgYXJnMSk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxl
c3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRlbW90
ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RG91
YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisK
KyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBh
cHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRT
dWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVu
ZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBl
bmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNl
dFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGlu
dWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyTWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2Nr
LCBCcmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCks
IGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWws
IG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3Vj
Y2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQs
IGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAg
IG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAg
YXBwZW5kKGxlc3NUaGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxl
c3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24p
OworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5n
UG9pbnRCaW5PcChNdWxEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKERpdkZs
b2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gT09Q
UzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBmb3IgdGhlIGltbXMgYW5kIHR3byBv
cGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wMSA9
IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7CisgICAgVG1wIHZhbHVlID0gZ3ByKCk7CisK
KyAgICAvLyBPT1BTOiBDYW4gZml0IGluIEltbS9CaXRJbW0gaW5zdGVhZCBvZiBCaWdJbW0/Cisg
ICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0oMHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEs
IHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7
CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1ZSk7CisgICAg
YXBwZW5kKEFuZDMyLCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjMyLCBz
aWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2YWx1ZSwgcmVz
dWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIFRtcCB0ZW1wID0gdG1wKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwg
dGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCB0ZW1wLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJSZWludGVycHJldEkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigp
OworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQW5kNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5l
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVO
b3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEd0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRo
YW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwgYXJnMCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxej4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NERpdj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IHdoYXQgYWJvdXQgY2hp
bGwtbmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2RG91
YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZsb2F0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TmU+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zNjQsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFw
cGVuZChOZWdhdGVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQW5kPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KEFuZDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVSaWdodDY0LCBhcmcwLCBhcmcxLCByZXN1bHQp
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
QWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRBYnMoQWJzRG91YmxlLCBh
cmcwLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyTHRTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvcHlzaWduPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgLy8gT09QUzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVy
ZSBmb3IgdGhlIGltbXMgYW5kIHR3byBvcGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9
IGZwcigpOworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7Cisg
ICAgVG1wIHZhbHVlID0gZ3ByKCk7CisKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzEs
IHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4MDAwMDAwMDAwMDAwMDAw
KSwgc2lnbik7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgc2lnbiwgc2lnbik7CisKKyAgICBh
cHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJn
OjpiaWdJbW0oMHg3ZmZmZmZmZmZmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVuZChBbmQ2NCwg
dGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3I2NCwgc2lnbiwgdmFsdWUsIHZh
bHVlKTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIHZhbHVlLCByZXN1bHQpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMkNvbnZlcnRTSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAg
YXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFJvdGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQo
Um90YXRlTGVmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTHQ+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyR2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hp
ZnQoVXJzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJMzI+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcCA9IHRtcCgpOworICAgIGFwcGVuZChNb3Zl
MzIsIGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0LCB0ZW1wLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VVPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KENvbXBhcmUz
MiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0Q2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChD
ZWlsRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVM+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFy
ZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNobD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NEZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEZsb29y
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJYb3I+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9yMzIsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0Zsb2F0LCBhcmcwLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWluPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Js
b2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRG91
YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJn
MSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwp
OworCisgICAgYXBwZW5kKGlzRXF1YWwsIE9yRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNv
bnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJl
c3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVh
bC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAg
ICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBNb3ZlRG91YmxlLCBhcmcxLCByZXN1bHQpOwor
ICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIEp1bXApOworICAgIGdyZWF0ZXJUaGFuT3JF
cXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sg
PSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE11bEZsb2F0LCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWI2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlJlaW50ZXJwcmV0RjMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFkZD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChBZGQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3ViPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFN1
YkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyT3I+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3Iz
MiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0THRVPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2
NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NEx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChD
b252ZXJ0SW50NjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKFhvcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVU+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNdWw2NCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRQcm9tb3RlRjMyPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRGbG9hdFRvRG91YmxlLCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQWRkRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRHZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NEV4dGVuZFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoTW92ZTMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJOZT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRSZWludGVycHJldEk2ND4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRmxvb3I+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoRmxvb3JGbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyRXF6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFRl
c3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVpbnRlcnByZXRGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
YWRkU2hpZnQoUnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJVPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFVyc2hpZnQ2NCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NFNxcnQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
U3FydERvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hsPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KExzaGlmdDMyLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyR3Q+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyV3JhcEk2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChN
b3ZlMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJvdGw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUm90YXRlTGVmdDMyLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyUm90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biBhZGRTaGlmdChSb3RhdGVSaWdodDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RVPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkd0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAg
YXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
biksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJl
bnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
aXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZERvdWJsZSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVh
bC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBN
b3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91
YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwg
YXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNvbnRpbnVhdGlv
bik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhj
b250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRM
ZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFkZD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChB
ZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM4LDcgKzE4MzgsNyBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIHBhdGNocG9pbnQt
Pm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAgfQogICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewotICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsgLy8gT09QUzogVGhpcyBsb29rcyBzdXBlciB3cm9uZyBnaXZl
biB3ZSBkb24ndCBzYXkgd2UgY2xvYmJlciB0aGlzIQogICAgICAgICBGUFJSZWcgc2NyYXRjaCA9
IEludmFsaWRGUFJSZWc7CiAgICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7
CiAgICAgICAgIGlmIChpc1g4NigpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360205</attachid>
            <date>2019-01-25 18:36:21 -0800</date>
            <delta_ts>2019-01-27 13:43:03 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>131182</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHBy
b3RlY3RlZDoKICAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhBaXI6Oklu
c3QmKSBmaW5hbDsKICAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0
JikgZmluYWw7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5l
cmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1w
SW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBzdWJjbGFzc2VzIHRo
YXQgaW1wbGVtZW50IHRoYXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKICAgICAgICAgdW5z
aWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4NzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIlNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgor
I2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0
SW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2Fz
bUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21PTUdQbGFuLmgiCisjaW5jbHVkZSAiV2FzbU9w
Y29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK2NsYXNzIEFpcklSR2Vu
ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250
cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIFR5cGUgc2lnbmF0dXJlLCBC
bG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVj
aWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAg
ICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3Bl
Y2lhbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSAhPSBWb2lkKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUo
c2lnbmF0dXJlKSwgb3JpZ2luKSk7CisgICAgICAgIH0KKworICAgICAgICBDb250cm9sRGF0YSgp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgi
SWY6ICAgICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBC
bG9ja1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2s6ICAgICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6Okxv
b3A6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgICAgIik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjog
IiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7CisgICAgICAgICAgICBpZiAoc3BlY2lh
bCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoKnNwZWNpYWwpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTm9uZSIpOworICAgICAgICB9CisKKyAgICAg
ICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBibG9ja1R5cGU7IH0KKworICAgICAg
ICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiByZXN1bHQuc2l6ZSgp
OyB9CisKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb247
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRJZlRvQmxvY2soKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQodHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgICAgICAg
ICAgYmxvY2tUeXBlID0gQmxvY2tUeXBlOjpCbG9jazsKKyAgICAgICAgICAgIHNwZWNpYWwgPSBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogV2hhdCBpcyB0aGlzPworICAg
ICAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPFRtcCwgMT47IC8vIFZhbHVlIG11c3QgYmUg
YSBQaGkKKworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdEZvckJyYW5jaCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAg
ICAgICAgICAgIHJldHVybiBSZXN1bHRMaXN0KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgQWlySVJH
ZW5lcmF0b3I7CisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGU7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKKyAgICAgICAg
UmVzdWx0TGlzdCByZXN1bHQ7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0g
VG1wOworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhw
cmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3Vs
dExpc3QgQ29udHJvbERhdGE6OlJlc3VsdExpc3Q7CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0g
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9IFRtcCB7IH07CisK
KyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3Vs
dCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcg
UGFydGlhbFJlc3VsdCA9IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAg
ICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdh
c21QYXJzZXIuaC4KKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygi
V2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdz
KS4uLikpOworICAgIH0KKworI2RlZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24s
IC4uLikgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAg
ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWdu
YXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChU
eXBlLCB1aW50MzJfdCk7CisgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWlu
dDY0X3QpOworCisgICAgLy8gTG9jYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBHbG9iYWxzCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAg
IC8vIE1lbW9yeQorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9h
ZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwg
dWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBz
dG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVu
dE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIEJhc2ljIG9wZXJhdG9y
cworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVy
bywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAv
LyBDb250cm9sIGZsb3cKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVG9w
TGV2ZWwoVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1
cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xEYXRhJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFs
dWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29u
dHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0
YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisKKyAgICAvLyBDYWxscworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJ
bmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRVbnJlYWNoYWJsZSgpOworCisgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChLaW5k
IGtpbmQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRlZ2VyU3ViKEtpbmQg
a2luZCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQb2ludEFicyhLaW5k
IGtpbmQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRCaW5PcChLaW5kIGtpbmQsIEV4cHJlc3Np
b25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KworICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNr
LCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIHNldFBh
cnNlcihGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9
IHBhcnNlcjsgfTsKKworICAgIFRtcCBjb25zdGFudChCMzo6VHlwZSwgdWludDY0X3QgYml0cywg
T3B0aW9uYWw8T3JpZ2luPiA9IFdURjo6bnVsbG9wdCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJs
b2NrLCBBaXI6OktpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgLy8gT09QUzogQWRkIG9yaWdpbgorICAgICAgICBibG9jay0+YXBwZW5kKGtpbmQsIG51
bGxwdHIsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBaXI6
OktpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXBw
ZW5kKG1fY3VycmVudEJsb2NrLCBraW5kLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKTsKKyAgICB9CisKKyAgICBUbXAgdG1wKEJhbmsgYmFuaykgeyByZXR1cm4gbV9jb2Rl
Lm5ld1RtcChiYW5rKTsgfQorICAgIFRtcCBncHIoKSB7IHJldHVybiB0bXAoR1ApOyB9CisgICAg
VG1wIGZwcigpIHsgcmV0dXJuIHRtcChGUCk7IH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IGFkZFBhdGNocG9pbnQoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3By
b2MuYWRkPEIzOjpQYXRjaHBvaW50VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2lu
dChCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdz
KQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBy
ZXN1bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Js
b2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwg
QXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFs
KQorICAgICAgICAgICAgbV9wYXRjaHBvaW50U3BlY2lhbCA9IG1fY29kZS5hZGRTcGVjaWFsKHN0
ZDo6bWFrZV91bmlxdWU8QjM6OlBhdGNocG9pbnRTcGVjaWFsPigpKTsKKworICAgICAgICBJbnN0
IGluc3QoUGF0Y2gsIHBhdGNoLCBBcmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOwor
ICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSAh
PSBCMzo6Vm9pZCk7CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGF1dG8gYXJncyA9IHN0ZDo6bWFrZV90dXBsZSguLi50
aGVBcmdzKTsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8g
T09QUzogVWdoLCB0aGlzIGlzIHN1cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBC
Mzo6VmFsdWUqIGhlcmUuCisgICAgICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdv
cmssIGJ1dCBvdXIgYWx0ZXJuYXRpdmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAg
ICAgLy8gb3IgcmVpbnZlbnQgcGFydCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAg
IHBhdGNoLT5hcHBlbmQobnVsbHB0ciwgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICBwYXRjaC0+bGF0
ZUNsb2JiZXJlZCgpLmNsZWFyKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykK
KyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoZ3ByKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBwYXRjaC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZChmcHIoKSk7CisKKyAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdU
Rk1vdmUoaW5zdCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCcmFuY2gsIHR5
cGVuYW1lIEdlbmVyYXRvcj4KKyAgICB2b2lkIGVtaXRDaGVjayhjb25zdCBCcmFuY2gmIGVtaXRC
cmFuY2gsIGNvbnN0IEdlbmVyYXRvciYgZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gV2Ug
ZmFpbCBhbG9uZyB0aGUgInRydXRoeSIgZWRnZSBvZiAnYnJhbmNoJworCisgICAgICAgIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Js
b2NrKiBmYWlsZWQgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRC
cmFuY2goKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0
aW9uLCBmYWlsZWQpOworCisgICAgICAgIGF1dG8qIGZhaWxlZFBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgZmFpbGVkUGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KGdlbmVyYXRvcik7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGZhaWxlZCwgZmFpbGVkUGF0Y2hw
b2ludCwgVG1wKCkpOworICAgICAgICBhcHBlbmQoZmFpbGVkLCBPb3BzKTsKKworICAgICAgICBt
X2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRDQ2FsbCh2b2lkKiBmdW5jLCBUbXAgcmVzdWx0
LCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBlbWl0Q0NhbGwobV9jdXJyZW50QmxvY2ss
IGZ1bmMsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0Q0NhbGwoQmFzaWNCbG9j
ayogYmxvY2ssIHZvaWQqIGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICB7Cisg
ICAgICAgIEluc3QgaW5zdChBaXI6OkNDYWxsLCBudWxscHRyKTsKKworICAgICAgICBUbXAgY2Fs
bGVlID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbVB0cih0YWdDRnVuY3Rp
b25QdHI8dm9pZCo+KGZ1bmMsIEIzQ0NhbGxQdHJUYWcpKSwgY2FsbGVlKTsKKyAgICAgICAgaW5z
dC5hcmdzLmFwcGVuZChjYWxsZWUpOworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgYXV0byBhcmdzID0gc3RkOjpt
YWtlX3R1cGxlKC4uLnRoZUFyZ3MpOworICAgICAgICBmb3IgKFRtcCB0bXAgOiBhcmdzKQorICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChpbW1PclRtcChjQ2FsbC0+Y2hpbGQoaSkpKTsKKwor
ICAgICAgICBibG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgIH0KKworCisgICAgdm9p
ZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisKKyAg
ICB2b2lkIGVtaXRUaWVyVXBDaGVjayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgT3JpZ2luKTsK
KworICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOworICAg
IEIzOjpLaW5kIG1lbW9yeUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCk7CisgICAgRXhwcmVzc2lv
blR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwor
CisgICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Np
b25UeXBlIHNvdXJjZSk7CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKworICAg
IHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKworICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVU
VVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CisK
KyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYsIEJhc2ljQmxv
Y2sqLCBUbXApOworICAgIGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywg
WWVzIH07CisgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBUbXAgaW5zdGFuY2UsIFBy
b2NlZHVyZSYsIEJhc2ljQmxvY2sqKTsKKworICAgIE9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzog
V2UgbmVlZCB0byBtYWtlIGFuIEFpcjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5n
IGZyb20gQjMgY29kZS4KKworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9w
YXJzZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsK
KyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
IH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGls
YXRpb25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4
IHsgVUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRy
IH07CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFz
aWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9y
b290IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOworICAgIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsg
Ly8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJl
c3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BS
IHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CisKKyAgICBUbXAgbV9p
bnN0YW5jZVZhbHVlIHsgbnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxv
dyB0byBlbnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQu
CisgICAgYm9vbCBtX3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBUbXAgaW5zdGFu
Y2VWYWx1ZSgpCisgICAgeworICAgICAgICBtX3VzZXNJbnN0YW5jZVZhbHVlID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG1faW5zdGFuY2VWYWx1ZTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBtX21h
eE51bUpTQ2FsbEFyZ3VtZW50cyB7IDAgfTsKKworICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCog
bV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKK307CisKKy8vIE1lbW9yeSBhY2Nlc3Nl
cyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRo
ZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCitpbnQzMl90IEFpcklSR2VuZXJh
dG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90
IG9mZnNldCkKK3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7
CisgICAgICAgIHB0ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
QWRkLCBvcmlnaW4oKSwgcHRyLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2Fz
bUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrLCBUbXAg
YXJnKQoreworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lz
dGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6
IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVn
aXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0
aGUgY2FsbGVyIHNpZGUuCisgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3Vt
ZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKKyAgICBFZmZlY3RzIGVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7CisgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAg
IGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gZWZmZWN0czsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNl
dChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5z
dGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBHUFJSZWcgd2FzbUNv
bnRleHRJbnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgeworICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIo
KSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisgICAgfSk7Cit9CisKK0FpcklSR2VuZXJhdG9y
OjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1v
ZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNl
cHRpb24pCisgICAgOiBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9j
b21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1
bmN0aW9uSW5kZXgpCisgICAgLCBtX3RpZXJVcCh0aWVyVXApCisgICAgLCBtX3Byb2MocHJvY2Vk
dXJlKQorICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCisgICAgLCBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQoreworICAgIG1fY3VycmVudEJsb2Nr
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICAvLyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVl
ZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUgaWYgdGhlcmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdh
c20gLT4gd2FzbSB0aHVua3Mgc2ltcGxlciBmb3Igbm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIzCisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBw
aW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFz
ZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgbV9jb2RlLnBpblJlZ2lz
dGVyKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBw
aW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOworICAgIGlmICghQ29udGV4dDo6
dXNlRmFzdFRMUygpKQorICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dElu
c3RhbmNlR1BSKTsKKworICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewor
ICAgICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsK
KyAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNp
emVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBy
ZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9jb2RlLnBp
blJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dX
YXNtRXhjZXB0aW9uKQorICAgICAgICBUaHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4
Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOworCisgICAgaWYgKGluZm8ubWVtb3J5KSB7Cisg
ICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgc3dpdGNoICht
X21vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9
PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5u
ZWRHUFIsIEludmFsaWRHUFJSZWcgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1v
ZGU6OlNpZ25hbGluZzoKKyAgICAgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNp
Z25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRp
b24gY2hlY2sgYmVjYXVzZSB0aGV5IGNhbiByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVj
dAorICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5k
bGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qg
c28gdGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5r
R2VuZXJhdG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBG
cmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywg
T3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKKworICAgIHsKKyAgICAgICAgQjM6OlRtcCBmcmFt
ZVBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6RnJhbWVQb2ludGVyLCBPcmlnaW4oKSk7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHN0YWNrT3ZlcmZsb3dDaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CisgICAgICAgIG1f
aW5zdGFuY2VWYWx1ZSA9IHN0YWNrT3ZlcmZsb3dDaGVjazsKKyAgICAgICAgc3RhY2tPdmVyZmxv
d0NoZWNrLT5hcHBlbmRTb21lUmVnaXN0ZXIoZnJhbWVQb2ludGVyKTsKKyAgICAgICAgc3RhY2tP
dmVyZmxvd0NoZWNrLT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMo
KSk7CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0
YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3Jl
IGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMg
ZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5u
ZWQgcmVnaXN0ZXIuCisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3Jp
dGVzUGlubmVkID0gZmFsc2U7CisgICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVj
dHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5y
ZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIp
OworICAgICAgICB9CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNoUmVn
aXN0ZXJzID0gMjsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNp
emUgPSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOworICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbWluaW11bVBhcmVudENoZWNrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIDEwMjQpOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0
cmFGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBzdGQ6Om1heDx1aW50MzJfdD4oCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3Mg
dXMgdG8gZWxpZGUgc3RhY2sgY2hlY2tzIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgdGVybWluYWwg
bm9kZXMgaW4gdGhlIGNhbGwKKyAgICAgICAgICAgICAgICAvLyB0cmVlLCAoZS5nIHRoZXkgZG9u
J3QgbWFrZSBhbnkgY2FsbHMpIGFuZCBoYXZlIGEgc21hbGwgZW5vdWdoIGZyYW1lIHNpemUuIFRo
aXMgd29ya3MgYnkKKyAgICAgICAgICAgICAgICAvLyBoYXZpbmcgYW55IHN1Y2ggdGVybWluYWwg
bm9kZSBoYXZlIGl0cyBwYXJlbnQgY2FsbGVyIGluY2x1ZGUgc29tZSBleHRyYSBzaXplIGluIGl0
cworICAgICAgICAgICAgICAgIC8vIG93biBjaGVjayBmb3IgaXQuIFRoZSBnb2FsIGhlcmUgaXMg
dHdvZm9sZDoKKyAgICAgICAgICAgICAgICAvLyAxLiBFbWl0IGxlc3MgY29kZS4KKyAgICAgICAg
ICAgICAgICAvLyAyLiBUcnkgdG8gc3BlZWQgdGhpbmdzIHVwIGJ5IHNraXBwaW5nIHN0YWNrIGNo
ZWNrcy4KKyAgICAgICAgICAgICAgICBtaW5pbXVtUGFyZW50Q2hlY2tTaXplLAorICAgICAgICAg
ICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBpbiB0aGUgV2Fz
bSAtPiBFbWJlZGRlciBjYWxsIElDIHN0dWIuIFNpbmNlIHRoZXNlIHdpbGwKKyAgICAgICAgICAg
ICAgICAvLyBzcGlsbCBhbGwgYXJndW1lbnRzIHRvIHRoZSBzdGFjaywgd2UgZW5zdXJlIHRoYXQg
YSBzdGFjayBjaGVjayBoZXJlIGNvdmVycyB0aGUKKyAgICAgICAgICAgICAgICAvLyBzdGFjayB0
aGF0IHN1Y2ggYSBzdHViIHdvdWxkIHVzZS4KKyAgICAgICAgICAgICAgICAoQ2hlY2tlZDx1aW50
MzJfdD4obV9tYXhOdW1KU0NhbGxBcmd1bWVudHMpICogc2l6ZW9mKFJlZ2lzdGVyKSArIGpzY0Nh
bGxpbmdDb252ZW50aW9uKCkuaGVhZGVyU2l6ZUluQnl0ZXMoKSkudW5zYWZlR2V0KCkKKyAgICAg
ICAgICAgICkpOworICAgICAgICAgICAgY29uc3QgaW50MzJfdCBjaGVja1NpemUgPSBtX21ha2Vz
Q2FsbHMgPyAod2FzbUZyYW1lU2l6ZSArIGV4dHJhRnJhbWVTaXplKS51bnNhZmVHZXQoKSA6IHdh
c21GcmFtZVNpemUudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dD
aGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2
ZWRab25lU2l6ZSgpOworICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21h
a2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5l
ZWRVbmRlcmZsb3dDaGVjazsKKworICAgICAgICAgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9
IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUjsKKworICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgbGVhZiBmdW5jdGlvbnMg
dG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXplIGlzIHdpdGhpbgorICAg
ICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2FsbGVyIHdvdWxkIGhhdmUg
YWxyZWFkeSBkb25lIHRoZSBjaGVjay4KKyAgICAgICAgICAgIGlmIChuZWVkc092ZXJmbG93Q2hl
Y2spIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGZwID0gcGFyYW1zWzFdLmdw
cigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2go
MCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgx
KTsKKworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAg
ICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2Up
OworCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNv
bnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2Ny
YXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoLWNoZWNrU2l6ZSksIGZwLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShuZWVkVW5kZXJmbG93Q2hlY2spKQorICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBl
bmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoMSwgZnApKTsKKyAg
ICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6
OkJlbG93LCBzY3JhdGNoMSwgc2NyYXRjaDIpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRo
dW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJv
bVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFz
dFRMUygpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVk
LCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgorICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRj
aChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2Ny
YXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0
YW5jZShjb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkg
bmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2
YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNo
IHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgIH0KKworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25F
bnRyeURlY3JlbWVudCgpLCBPcmlnaW4oKSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBUbXAg
aW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlm
IChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVz
KSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQg
YWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBUbXAg
cG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNl
VmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0
dWFsU3RhY2tMaW1pdCgpKSk7CisgICAgICAgIFRtcCBhY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCk7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigp
LCBhY3R1YWxTdGFja0xpbWl0LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KElu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgIH0KKworICAgIGlmICgh
IW1lbW9yeSkgeworICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3Mg
PSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJl
cnM7CisgICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7
CisgICAgICAgIGZvciAoYXV0byBpbmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKKyAg
ICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZvLnNpemVSZWdpc3Rlcik7CisKKyAgICAgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNo
cG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAgICAgICAgRWZmZWN0cyBl
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXIoY2xvYmJlcnMpOworCisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5j
ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1v
cnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1
dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFT
U0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdz
WzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBh
dCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRv
IDAuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1z
WzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVn
c1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBz
aXplUmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0pOworICAg
IH0KK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVs
cGVycyYgaml0LCBFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvblN0dWIgPSBqaXQuanVtcCgp
OworCisgICAgaml0LmFkZExpbmtUYXNrKFtqdW1wVG9FeGNlcHRpb25TdHViXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9u
U3R1YiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9u
KCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwor
ICAgIH0pOworfQorCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwg
dWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5
dGVzQ2hlY2tlZCArPSBtX2xvY2Fscy5zaXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsK
KyAgICBXQVNNX0NPTVBJTEVfRkFJTF9JRigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3Rh
bEJ5dGVzKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0
b3RhbEJ5dGVzLCAiIGxvY2FscyIpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgVmFyaWFibGUqIGxvY2FsID0gbV9wcm9jLmFkZFZhcmlhYmxl
KHRvQjNUeXBlKHR5cGUpKTsKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxvY2Fs
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3By
b2MsIFNldCwgT3JpZ2luKCksIGxvY2FsLCBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgMCwgT3Jp
Z2luKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOworICAgIFdBU01fQ09NUElMRV9G
QUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksICIgYXJndW1lbnRzIik7CisKKyAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkpOworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLmxvYWRBcmd1bWVudHMo
c2lnbmF0dXJlLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBPcmlnaW4oKSwKKyAgICAgICAgWz1d
IChFeHByZXNzaW9uVHlwZSBhcmd1bWVudCwgdW5zaWduZWQgaSkgeworICAgICAgICAgICAgVmFy
aWFibGUqIGFyZ3VtZW50VmFyaWFibGUgPSBtX3Byb2MuYWRkVmFyaWFibGUoYXJndW1lbnQtPnR5
cGUoKSk7CisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IGFyZ3VtZW50VmFyaWFibGU7CisgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywg
U2V0LCBPcmlnaW4oKSwgYXJndW1lbnRWYXJpYWJsZSwgYXJndW1lbnQpOworICAgICAgICB9KTsK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0pOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFyaWFibGVWYWx1ZT4obV9wcm9jLCBCMzo6R2V0LCBvcmlnaW4oKSwgbV9s
b2NhbHNbaW5kZXhdKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0Y2hwb2lu
dFZhbHVlKiB1bnJlYWNoYWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgIHVucmVhY2hhYmxl
LT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNr
KGppdCwgRXhjZXB0aW9uVHlwZTo6VW5yZWFjaGFibGUpOworICAgIH0pOworICAgIHVucmVhY2hh
YmxlLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgaW50MzJfdCAoKmdy
b3dNZW1vcnkpKHZvaWQqLCBJbnN0YW5jZSosIGludDMyX3QpID0gW10gKHZvaWQqIGNhbGxGcmFt
ZSwgSW5zdGFuY2UqIGluc3RhbmNlLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKKyAgICAg
ICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICAgICAgaWYg
KGRlbHRhIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBhdXRvIGdyb3du
ID0gaW5zdGFuY2UtPm1lbW9yeSgpLT5ncm93KFBhZ2VDb3VudChkZWx0YSkpOworICAgICAgICBp
ZiAoIWdyb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgorICAgICAg
ICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CisgICAg
ICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToK
KyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBn
cm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOworICAgIH07CisKKyAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZ3Jvd01lbW9yeSwgQjNDQ2FsbFB0clRh
ZykpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOwor
CisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGlt
aXQ6Ok5vLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgbV9jdXJyZW50
QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8TWVtb3J5Kj4o
bnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBv
biB0aGlzIHNpemUiKTsKKyAgICBUbXAgc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVl
KCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUo
KSkpOworCisgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKKyAgICBzdGF0
aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhp
cyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgVG1w
IG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hy
LCBvcmlnaW4oKSwKKyAgICAgICAgc2l6ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNoaWZ0VmFsdWUpKTsKKworICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgVHJ1bmMsIG9yaWdpbigp
LCBudW1QYWdlcyk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdKTsKKyAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgb3JpZ2luKCks
IG1fbG9jYWxzW2luZGV4XSwgdmFsdWUpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFRtcCBnbG9iYWxzQXJyYXkgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNl
OjpvZmZzZXRPZkdsb2JhbHMoKSkpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUobV9pbmZvLmdsb2JhbHNb
aW5kZXhdLnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90Pihp
bmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHRvQjNUeXBlKG1faW5mby5nbG9i
YWxzW2luZGV4XS50eXBlKSA9PSB2YWx1ZS0+dHlwZSgpKTsKKyAgICBUbXAgZ2xvYmFsc0FycmF5
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90
PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIGdsb2Jh
bHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNr
QW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQ
Uik7CisKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmc6IHsKKyAgICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBh
dCBhbGwsIHdlIG11c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNl
ZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBzaXplLgorICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXpl
R1BSKTsKKyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIG1fbWVtb3J5U2l6ZUdQUiwgcG9pbnRlciwgc2l6ZU9mT3BlcmF0
aW9uICsgb2Zmc2V0IC0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVt
b3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQg
NEdpQityZWR6b25lIGZvciB0aGlzIG1lbW9yeS4gT25seSB0aGUgdXNlci1hbGxvY2F0ZWQgcGFn
ZXMgYXJlIGFkZHJlc3NhYmxlLCBjb250aWd1b3VzbHkgaW4gcmFuZ2UgWzAsIGN1cnJlbnRdLAor
ICAgICAgICAvLyBhbmQgZXZlcnl0aGluZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05FLiBXZSBk
b24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0aGUgNEdp
QiByYW5nZSBiZWNhdXNlIFdlYkFzc2VtYmx5IHJlZ2lzdGVyCisgICAgICAgIC8vIG1lbW9yeSBh
Y2Nlc3NlcyBhcmUgMzItYml0LiBIb3dldmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyICsgb2Zmc2V0
IGFjY2Vzc2VzIHBlcmZvcm0gdGhlIGFkZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBh
biBhY2Nlc3MgYWJvdmUKKyAgICAgICAgLy8gdGhlIDMyLWJpdCBsaW1pdCAodGhlIG9mZnNldCBp
cyB1bnNpZ25lZCAzMi1iaXQpLiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgb2Zm
c2V0cywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueQorICAgICAgICAvLyBy
ZWdpc3RlciArIGxhcmdlIG9mZnNldCBhY2Nlc3MuIFdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBi
ZSBnZW5lcmF0ZWQgZnJlcXVlbnRseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQg
Y2hlY2sgdGhhdCByZWdpc3RlciArIGxhcmdlIG9mZnNldCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3Jl
ZHpvbmUgc2luY2UgdGhhdCdzIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lk
IG92ZXJmbG93aW5nIHRoZQorICAgICAgICAvLyBQUk9UX05PTkUgcmVnaW9uLCBidXQgaXQncyBi
ZXR0ZXIgaWYgd2UgdXNlIGEgc21hbGxlciBpbW1lZGlhdGUgYmVjYXVzZSBpdCBjYW4gY29kZWdl
bnMgYmV0dGVyLiBXZSBrbm93IHRoYXQgYW55dGhpbmcgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAg
ICAgICAvLyB0aGFuIHRoZSBkZWNsYXJlZCAnbWF4aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4g
Y29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQgJ21h
eGltdW0nIHRoZW4gd2Ugc3RpbGwga25vdyB0aGF0CisgICAgICAgIC8vIGFueSBhY2Nlc3MgZXF1
YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDRHaUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUg
cmVkem9uZS4KKyAgICAgICAgaWYgKG9mZnNldCA+PSBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25l
Qnl0ZXMoKSkgeworICAgICAgICAgICAgc2l6ZV90IG1heGltdW0gPSBtX2luZm8ubWVtb3J5Lm1h
eGltdW0oKSA/IG1faW5mby5tZW1vcnkubWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBz
aXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgLSAxLCBtYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CisgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKK30KKworaW5saW5lIHVpbnQz
Ml90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQ4VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQ4VToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
MzJMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzoKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkkzMkxvYWQxNlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgor
ICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMy
VToKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6CisgICAgICAgIHJldHVybiA0OworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6
CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitpbmxpbmUgQjM6OktpbmQgQWlySVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6
Ok9wY29kZSBtZW1vcnlPcCkKK3sKKyAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25h
bGluZykKKyAgICAgICAgcmV0dXJuIHRyYXBwaW5nKG1lbW9yeU9wKTsKKyAgICByZXR1cm4gbWVt
b3J5T3A7Cit9CisKK2lubGluZSBUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9w
VHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAg
ICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNl
dCk7CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6
IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgbWVtb3J5S2luZChMb2FkOFMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzogeworICAgICAgICBUbXAg
dmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1l
bW9yeUtpbmQoTG9hZDhTKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3Jp
Z2luKCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTog
eworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKExvYWQ4WiksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7CisgICAgICAgIFRtcCB2
YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVt
b3J5S2luZChMb2FkOFopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmln
aW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2Uzog
eworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6IHsKKyAgICAgICAgVG1w
IHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBt
ZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBv
cmlnaW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2
VTogeworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQxNlopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0
KTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAg
VG1wIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBtZW1vcnlLaW5kKExvYWQxNlopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMy
LCBvcmlnaW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDogeworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIsIG9m
ZnNldCk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOiB7CisgICAg
ICAgIFRtcCB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50MzIsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQp
OworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBaRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkMzJTOiB7CisgICAgICAgIFRtcCB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50MzIsIG9yaWdp
bigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCks
IEludDY0LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxvYXQsIG9yaWdp
bigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0
TG9hZDogeworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBEb3VibGUsIG9yaWdpbigpLCBwb2ludGVy
LCBvZmZzZXQpOworICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMy
KTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6
ZU9mTG9hZE9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlz
IHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28g
d2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4g
SG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIEIzOjpQYXRjaHBvaW50VG1wIHRocm93RXhjZXB0aW9u
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0
b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4
Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoK
KyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRP
cFR5cGU6OkkzMkxvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgICAgICAgICByZXN1bHQgPSBj
b25zdGFudChJbnQzMiwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6Cisg
ICAgICAgICAgICByZXN1bHQgPSBjb25zdGFudChGbG9hdCwgMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0
ID0gY29uc3RhbnQoRG91YmxlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0
KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9w
KFN0b3JlT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJMzJTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgICAg
ICByZXR1cm4gMTsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgorICAgIGNhc2Ug
U3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkkzMlN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIHJldHVybiA0OworICAgIGNh
c2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3Jl
OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworCitpbmxpbmUgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3Rv
cmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVl
LCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIGludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVy
UGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBj
YXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKKyAg
ICAgICAgRkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVt
b3J5S2luZChTdG9yZTgpLCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgICAg
IHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywg
b3JpZ2luKCksIHZhbHVlKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3Jl
T3BUeXBlOjpJMzJTdG9yZTE2OgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmUxNiksIG9yaWdpbigpLCB2YWx1ZSwg
cG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6STY0U3RvcmUzMjoKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOworICAgICAgICBGQUxMVEhS
T1VHSDsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgorICAgIGNhc2UgU3RvcmVP
cFR5cGU6OkkzMlN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3JlOgorICAgIGNh
c2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmUpLCBvcmlnaW4oKSwgdmFs
dWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c3RvcmUo
U3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9p
bnRlci0+dHlwZSgpID09IEludDMyKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8
dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhN
RTogRXZlbiB0aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBh
IHZhbGlkYXRpb24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFz
IGEgcnVudGltZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiB0aHJvd0V4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6
OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgICAgICB0
aHJvd0V4Y2VwdGlvbi0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5l
bWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFj
Y2Vzcyk7CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVPcChvcCwg
ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9w
KG9wKSksIHZhbHVlLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lv
blR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGNvbmRpdGlvbiwgbm9u
WmVybywgemVybyk7CisgICAgcmV0dXJuIHsgfTsKK30KKworQWlySVJHZW5lcmF0b3I6OkV4cHJl
c3Npb25UeXBlIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90
IHZhbHVlKQoreworICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOwor
fQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVt
ZW50Q291bnQsIE9yaWdpbiBvcmlnaW4pCit7CisgICAgaWYgKCFtX3RpZXJVcCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVG1wIGNvdW50RG93bkxvY2F0aW9uID0gY29uc3RhbnQocG9pbnRlclR5
cGUoKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obV90aWVyVXApLCBvcmlnaW4pOworICAg
IFRtcCBvbGRDb3VudERvd24gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4sIGNvdW50RG93bkxvY2F0aW9uKTsKKyAgICBU
bXAgbmV3Q291bnREb3duID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBTdWIsIG9yaWdpbiwgb2xkQ291bnREb3duLCBjb25zdGFudChJbnQzMiwgZGVjcmVtZW50Q291
bnQsIG9yaWdpbikpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgU3RvcmUsIG9yaWdpbiwgbmV3Q291bnREb3duLCBjb3VudERvd25Mb2NhdGlvbik7
CisKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNoID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbik7CisgICAgRWZmZWN0
cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2
ZSBhIG1vcmUgcHJlY2lzZSBoZWFwIHJhbmdlIGZvciB0aGUgdGllciB1cCBjb3VudC4KKyAgICBl
ZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgZWZmZWN0cy53cml0ZXMg
PSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisK
KyAgICBwYXRjaC0+YXBwZW5kKG5ld0NvdW50RG93biwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CisgICAgcGF0Y2gtPmFwcGVuZChvbGRDb3VudERvd24sIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgdGllclVwID0gaml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcGFy
YW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgcGFyYW1zLmFkZExh
dGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIHRpZXJVcC5saW5r
KCZqaXQpOworCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYVBhZGRpbmdCeXRlcyA9
IDA7CisgICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsID0geyB9OworICAg
ICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbC5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNl
cnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKKwor
ICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2Z1bmN0
aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwg
cmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZv
clJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRlcyk7CisgICAgICAgICAgICBq
aXQuanVtcCh0aWVyVXBSZXN1bWUpOworCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxOb1B0clRh
Zz4oY2FsbCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmds
ZXRvbigpLnN0dWIodHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCitBaXJJUkdlbmVyYXRv
cjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpCit7
CisgICAgQmFzaWNCbG9jayogYm9keSA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworCisgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBib2R5KTsK
KworICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVw
Q291bnQ6Omxvb3BEZWNyZW1lbnQoKSwgb3JpZ2luKCkpOworCisgICAgcmV0dXJuIENvbnRyb2xE
YXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51
YXRpb24sIGJvZHkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5l
cmF0b3I6OmFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9s
RGF0YShtX3Byb2MsIE9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1f
cHJvYy5hZGRCbG9jaygpKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklS
R2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJv
bERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OkJsb2NrLCBtX3By
b2MuYWRkQmxvY2soKSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fcHJvYy5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigp
LCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50
ZWRCbG9jayh0YWtlbiksIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbikpOworICAgIHRha2VuLT5h
ZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgbm90VGFrZW4tPmFkZFByZWRlY2Vz
c29yKG1fY3VycmVudEJsb2NrKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47CisgICAg
cmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5
cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlW
YWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRh
LmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOwor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0
YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBC
bG9ja1R5cGU6OklmKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKKyAgICBk
YXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHJldHVy
blZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXplKCkpCisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0
dXJuLCBvcmlnaW4oKSwgcmV0dXJuVmFsdWVzWzBdKTsKKyAgICBlbHNlCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6UmV0dXJuLCBvcmln
aW4oKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQnJh
bmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlm
eVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0Rm9yQnJhbmNoKCkpOwor
CisgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOwor
ICAgIGlmIChjb25kaXRpb24pIHsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpLCBGcmVx
dWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNz
b3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29y
KG1fY3VycmVudEJsb2NrKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0KSk7Cisg
ICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgIH0KKwor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRz
LCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhw
cmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHRGb3JCcmFuY2goKSk7CisgICAgdW5pZnlW
YWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0LnJlc3VsdEZvckJy
YW5jaCgpKTsKKworICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGNvbmRpdGlvbik7Cisg
ICAgc3dpdGNoVmFsdWUtPnNldEZhbGxUaHJvdWdoKEZyZXF1ZW50ZWRCbG9jayhkZWZhdWx0VGFy
Z2V0LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRhcmdldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3
aXRjaENhc2UoaSwgRnJlcXVlbnRlZEJsb2NrKHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJh
bmNoKCkpKSk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpl
bmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0
YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5j
b250cm9sRGF0YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywg
ZGF0YS5yZXN1bHQpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgZGF0YS5jb250aW51YXRpb24pOworICAgIGRhdGEuY29u
dGludWF0aW9uLT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4g
YWRkRW5kVG9VbnJlYWNoYWJsZShlbnRyeSk7Cit9CisKKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBtX2N1
cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOworCisgICAgaWYgKGRhdGEudHlwZSgpID09
IEJsb2NrVHlwZTo6SWYpIHsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5hcHBlbmROZXdDb250cm9s
VmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YWRkUHJlZGVjZXNzb3IoZGF0YS5zcGVjaWFsKTsKKyAgICB9CisKKyAg
ICBmb3IgKFRtcCByZXN1bHQgOiBkYXRhLnJlc3VsdCkgeworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
LmFwcGVuZChyZXN1bHQpOworICAgIH0KKworICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUg
YW55IGNvZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0
dXJuIGhlcmUuCisgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCisg
ICAgICAgIHJldHVybiBhZGRSZXR1cm4oZW50cnkuY29udHJvbERhdGEsIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisg
ICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisKKyAgICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlv
bkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgbV9tYXhO
dW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICAgICAgLy8gRklYTUUgaW1w
b3J0cyBjYW4gYmUgbGlua2VkIGhlcmUsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9p
bnQsIGJlY2F1c2UgYWxsIGltcG9ydCBzdHVicyBhcmUgZ2VuZXJhdGVkIGJlZm9yZSBCMyBjb21w
aWxhdGlvbiBzdGFydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY0NjIKKyAgICAgICAgVG1wIHRhcmdldEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJn
ZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAgICAvLyBUaGUgdGFyZ2V0IGluc3Rh
bmNlIGlzIDAgdW5sZXNzIHRoZSBjYWxsIGlzIHdhc20tPndhc20uCisgICAgICAgIFRtcCBpc1dh
c21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVh
bCwgb3JpZ2luKCksIHRhcmdldEluc3RhbmNlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpOworCisgICAgICAgIEJhc2ljQmxvY2sq
IGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlz
RW1iZWRkZXJCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dh
c21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNF
bWJlZGRlckJsb2NrKSk7CisKKyAgICAgICAgVG1wIHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBh
cmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53
cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMu
cmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJl
ciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmlu
ZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZy4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8g
dGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVu
Y3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9u
SW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIFVwc2lsb25WYWx1ZSogd2FzbUNhbGxSZXN1bHRVcHNp
bG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzV2FzbUJsb2NrLT5hcHBlbmRO
ZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNtQ2FsbFJlc3VsdCk7CisgICAg
ICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmln
aW4oKSwgY29udGludWF0aW9uKTsKKworICAgICAgICAvLyBGSVhNRTogTGV0J3MgcmVtb3ZlIHRo
aXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKKyAgICAgICAgLy8g
Zm9yIGNhbGxzIG91dCB0byB0aGUgZW1iZWRkZXIuIFRoaXMgc2hvdWxkbid0IGJlIHRoYXQgaGFy
ZCB0byBkby4gV2UgY291bGQgcHJvYmFibHkKKyAgICAgICAgLy8gaW1wbGVtZW50IHRoZSBJQyB0
byBiZSBvdmVyIENvbnRleHQqLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwMzc1CisgICAgICAgIFRtcCBqdW1wRGVzdGluYXRpb24gPSBpc0Vt
YmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5k
ZXgpKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25pbmcoKSkKKyAgICAgICAgICAg
IGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEJpdFhvciwgb3JpZ2luKCksIGp1bXBEZXN0aW5hdGlvbiwgaXNFbWJlZGRlckJsb2NrLT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENvZGVQb2lzb24p
KTsKKworICAgICAgICBUbXAgZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanVtcERl
c3RpbmF0aW9uLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdl
IG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAgICAgICAgICAgIC8vIFdlIHBl
c3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzIxODEKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJh
bXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIFVwc2lsb25WYWx1
ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxw
dHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICAgICAgaWYg
KHJldHVyblR5cGUgPT0gVm9pZCkKKyAgICAgICAgICAgIHJlc3VsdCA9IG51bGxwdHI7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgUGhpLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwgb3JpZ2luKCkpOworICAg
ICAgICAgICAgd2FzbUNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAg
ICAgIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNz
ZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4K
KyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIGNvbnRp
bnVhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdz
LCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0
ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVh
ZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAgQVNTRVJUKHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9tYWtlc0Nh
bGxzID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGluZGlyZWN0IGNhbiBjYWxsIGVpdGhlciBX
ZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLiBCZWNhdXNl
CisgICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gaXMgbGlrZSBjYWxsaW5nIGludG8g
dGhlIGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgYWxsIGNhbGwgaW5kaXJlY3Rz
CisgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1
bGF0aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1K
U0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOworCisg
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcjsKKyAgICBFeHByZXNzaW9u
VHlwZSBpbnN0YW5jZXNCdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlckxlbmd0aDsKKyAgICBFeHByZXNzaW9uVHlwZSBtYXNrOworICAgIHsKKyAgICAgICAg
RXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJs
ZSgpKSk7CisgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxlOjpvZmZzZXRP
ZkZ1bmN0aW9ucygpKSk7CisgICAgICAgIGluc3RhbmNlc0J1ZmZlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksCisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFibGU6Om9mZnNl
dE9mSW5zdGFuY2VzKCkpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
MzIsIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxl
OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgICAgIG1hc2sgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBv
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFibGU6
Om9mZnNldE9mTWFzaygpKSkpOworICAgIH0KKworICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBh
cmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCisgICAgeworICAgICAgICBDaGVja1ZhbHVlKiBjaGVj
ayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEFib3ZlRXF1YWwsIG9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlckxlbmd0aCkpOworCisgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzQ2FsbEluZGlyZWN0KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgY2FsbGVl
SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwg
b3JpZ2luKCksIGNhbGxlZUluZGV4KTsKKworICAgIGlmIChPcHRpb25zOjplbmFibGVTcGVjdHJl
TWl0aWdhdGlvbnMoKSkKKyAgICAgICAgY2FsbGVlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksIG1hc2ssIGNhbGxlZUluZGV4
KTsKKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb247CisgICAgeworICAgICAg
ICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBs
b29raW5nIGZvci4KKyAgICAgICAgRXhwcmVzc2lvblR5cGUgb2Zmc2V0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdpbigpLAorICAgICAgICAgICAg
Y2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uKSkpOworICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyLCBvZmZzZXQpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNu
J3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlh
bGl6ZWQuCisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2Ug
Y2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRl
eCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3Vt
ZXMgaTY0Iik7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2
NCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkpOworICAgICAg
ICB7CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVyZUluZGV4LAorICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpKSk7CisKKyAgICAgICAgICAgIGNo
ZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0
aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hl
cyB0aGUgdmFsdWUgd2UgZXhwZWN0LgorICAgICAgICB7CisgICAgICAgICAgICBFeHByZXNzaW9u
VHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlKSk7CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RF
cXVhbCwgb3JpZ2luKCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUlu
ZGV4KSk7CisKKyAgICAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpCYWRT
aWduYXR1cmUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBE
byBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFRtcCBvZmZzZXQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCks
CisgICAgICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9m
KEluc3RhbmNlKikpKTsKKyAgICAgICAgVG1wIG5ld0NvbnRleHRJbnN0YW5jZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZlciwgb2Zmc2V0KSk7CisKKyAg
ICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1fcHJvYy5hZGRCbG9jaygpOworCisg
ICAgICAgIFRtcCBpc1NhbWVDb250ZXh0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG5ld0NvbnRl
eHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLAorICAgICAg
ICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNlLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9u
KSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOworCisgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIC8vIFdlIHBlc3NpbWlzdGlj
YWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhpbmcgd2l0aCBCb3VuZHNDaGVja2luZyBt
ZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdp
c3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQobmV3Q29udGV4dEluc3RhbmNlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdw
cigpOworICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0g
UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVS
ZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgR1BSUmVnIGJhc2VN
ZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICAgICAgQVNTRVJU
KG5ld0NvbnRleHRJbnN0YW5jZSAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0
LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5z
dGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAgICAg
ICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOworICAg
ICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1l
bW9yeSBzaXplIHJlZ2lzdGVyCisgICAgICAgICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgorICAgICAgICAgICAgQVNTRVJUKHNpemVS
ZWdzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJl
Z3NbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5z
dGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8v
IE1lbW9yeTo6dm9pZCouCisgICAgICAgIH0pOworICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24p
OworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAorICAgICAgICAgICAgc2Fm
ZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRy
eXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CisgICAgaWYgKE9wdGlvbnM6OnVzZVBvaXNvbmluZygp
KQorICAgICAgICBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRYb3IsIG9yaWdpbigpLCBjYWxsZWVDb2RlLCBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2RlUG9pc29uKSk7
CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIHJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgIFs9
XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xv
YmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVh
dmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNz
dW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2lu
ZyBzbworICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2FzbS0+d2FzbSB0aHVuayB1bmNvbmRp
dGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNtIHN0
dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAgICAgICAgIC8vIHVzZSBhbGwgdGhlIHBpbm5lZCByZWdp
c3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9
PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworCisgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3Ro
ZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3Vy
IE1lbW9yeS4KKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywg
bV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdlbmVy
YXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgcGhpLCBjb25zdCBFeHByZXNzaW9uVHlw
ZSBzb3VyY2UpCit7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHNvdXJjZSwgcGhpKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRv
cjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNr
LCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkg
PD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVz
dWx0LnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAtIDEg
LSBpXSwgcmVzdWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsKK30KKworc3Rh
dGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBj
b25zdCBBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK3sK
KyAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOworICAgIGZvciAoY29uc3Qg
YXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgZGF0YUxvZyhjb21t
YSwgKmV4cHJlc3Npb24pOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBl
eHByZXNzaW9uU3RhY2spCit7CisgICAgLy8gT09QUyEKKyAgICAvKgorICAgIGRhdGFMb2dMbigi
UHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgZGF0YUxvZ0xu
KCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsKKyAgICBkYXRhTG9nTG4o
IkNvbnRyb2wgc3RhY2s6Iik7CisgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOworICAg
IGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGRh
dGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAgZHVtcEV4cHJlc3Npb25TdGFj
ayhjb21tYSwgKmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGV4cHJlc3Npb25TdGFjayA9ICZj
b250cm9sU3RhY2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGRhdGFMb2dM
bigpOworICAgIH0KKyAgICBkYXRhTG9nTG4oKTsKKyAgICAqLworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KK3sKKyAgICBPcGNvZGVPcmlnaW4gb3JpZ2luKG1f
cGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdP
ZmZzZXQoKSk7CisgICAgQVNTRVJUKGlzVmFsaWRPcFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4o
b3JpZ2luLm9wY29kZSgpKSkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmln
aW4pOworfQorCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVk
ZGVyRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAg
IGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8
Q0NhbGxIZWxwZXJzPigpOworCisgICAgQjM6OlByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQ29k
ZSYgY29kZSA9IHByb2NlZHVyZS5jb2RlKCk7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJp
bnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwgT3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAo
b3JpZ2luLmRhdGEoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9j
YXN0PE9wY29kZU9yaWdpbj4ob3JpZ2luKSk7CisgICAgfSk7CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB3ZSBjYW5ub3QgdXNlIGVpdGhlciBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVzZWRS
ZWdpc3RlcnMoKSBvcgorICAgIC8vIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dW5hdmFpbGFi
bGVSZWdpc3RlcnMoKS4gSW4gZXhjaGFuZ2UgZm9yIHRoaXMgY29uY2Vzc2lvbiwgd2UKKyAgICAv
LyBkb24ndCBzdHJpY3RseSBuZWVkIHRvIHJ1biBBaXI6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKSwg
d2hpY2ggc2F2ZXMgYSBiaXQgb2YgQ1BVIHRpbWUgYXQKKyAgICAvLyBvcHRMZXZlbD0xLgorICAg
IC8vIE9PUFM6IERvIHdlIG5lZWQgdGhpcz8gU2hvdWxkIHdlIGp1c3Qgc2V0IGl0IGRpcmVjdGx5
IG9uIENvZGU/CisgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhmYWxzZSk7Cisg
ICAgCisgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxh
dGlvbk1vZGU6OkJCUU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUU9wdGlt
aXphdGlvbkxldmVsKCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXph
dGlvbkxldmVsKCkpOworCisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJv
Y2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21w
aWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsK
KyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgc3VjY2Vzc29yLT5hZGRQcmVk
ZWNlc3NvcihibG9jayk7CisgICAgfQorICAgIC8vIE9PUFM6IFZhbGlkYXRlICdjb2RlJyBoZXJl
IQorICAgIAorICAgIHsKKyAgICAgICAgQWlyOjpnZW5lcmF0ZShwcm9jLmNvZGUoKSwgKmNvbXBp
bGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVj
dHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBj
b2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgIH0KKworICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja3NG
b3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhw
cmVzc2lvblR5cGUgcmlnaHQpCit7CisgICAgQVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwgb3Bl
cmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24gPT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1vZCk7
CisgICAgY29uc3QgQjM6OlR5cGUgdHlwZSA9IGxlZnQtPnR5cGUoKTsKKworICAgIHsKKyAgICAg
ICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBLaW5kIG9wID0gaXM2NEJpdE9wKG9wZXJh
dGlvbikgPyBCcmFuY2hUZXN0NjQgOiBCcmFuY2hUZXN0MzI7CisgICAgICAgICAgICBhcHBlbmQo
b3AsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJpZ2h0LCByaWdodCk7Cisg
ICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0
LCBFeGNlcHRpb25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIGlmIChvcGVyYXRpb24gPT0gRGl2KSB7CisgICAgICAgIGludDY0X3QgbWluID0gdHlwZSA9
PSBJbnQzMiA/IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpIDogc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCk7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAg
ICAgICAgICAgLy8gT09QUzogVHJ5IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAg
ICAgICAgICBUbXAgbWluVG1wID0gZ3ByKCk7CisgICAgICAgICAgICBUbXAgbmVnT25lID0gZ3By
KCk7CisKKyAgICAgICAgICAgIEtpbmQgb3AgPSBpczY0Qml0T3Aob3BlcmF0aW9uKSA/IENvbXBh
cmU2NCA6IENvbXBhcmUzMjsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSht
aW4pLCBtaW5UbXApOworICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsKSwgbGVmdCwgbWluVG1wLCBtaW5UbXApOworICAgICAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6aW1tKC0xKSwgbmVnT25lKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIHJpZ2h0LCBuZWdPbmUsIG5lZ09u
ZSk7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6Ok5vdFplcm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAg
IFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpJbnRlZ2VyT3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKKy8vIE9P
UFM6IEltcGxlbWVudCB0aGVzZSBkaXYgb3BzISEhCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJl
c3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9k
T3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBC
Mzo6T3Bjb2RlIG9wID0gTW9kOworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwg
cmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2Rl
IG9wID0gVURpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsK
KyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAg
ICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhw
cmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2OworICAgIGVtaXRDaGVja3NGb3JN
b2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0
IEIzOjpPcGNvZGUgb3AgPSBNb2Q7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0
LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0IEIzOjpPcGNv
ZGUgb3AgPSBVRGl2OworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQp
OworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
b3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOwor
ICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0
Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGpp
dC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1z
WzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBh
dGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKyNlbmRpZgorCisgICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAo
aW50MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZh
bHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNpZiBDUFUoWDg2
XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkg
eworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIz
OjpJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
aml0LmNvdW50UG9wdWxhdGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsK
KyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQ2NF90
ICgqcG9wY291bnQpKGludDY0X3QpID0gW10gKGludDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsg
cmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9w
Y291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4Nigp
KQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworI2lmIENQVShYODZfNjQpCisgICAgICAg
IGppdC5jb252ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnBy
KCksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50
NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAg
ICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50
LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOwor
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2
KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAg
ICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZw
cigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252ZXJ0VUlu
dDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAg
ICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50
LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJbnRE
b3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJn
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFyYW1zWzFd
LmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnBy
KCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBh
dGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Rmxv
YXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFpl
cm9GbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAg
cmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBh
cmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVl
OworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEK
KworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBt
YXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdy
ZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0
T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlz
LT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5j
KTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkp
OworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwor
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNh
dGVEb3VibGVUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09Q
UzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9h
dCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9h
dCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBv
cmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0
T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFs
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tW
YWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpP
dXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJ
bnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0u
Z3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9
CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJU
cnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAg
IENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4
ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOworICAg
IFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkp
OworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwg
b3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNv
bnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91
bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0
aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsK
KyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1Vp
bnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBv
aW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wg
YiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVu
dCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBtaW4g
PSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1h
eCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3Jl
YXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9m
Qm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7
CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsK
KyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRl
RmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7
CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQg
PSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6
IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91Ymxl
LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3Vi
bGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4s
IG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBv
dXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1
YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVj
a1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3By
b2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6
Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAg
ICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKyAgICAvKgorICAgIFRtcCBtYXgg
PSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7CisgICAg
VG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7
CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBv
cmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29u
c3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3Vu
ZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRp
b25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOwor
CisgICAgVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAv
LyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRvIGNvbnZlcnQgZmxvYXRp
bmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFzdCB0cnkgdG8gZG8gdGhl
IHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJzIGFyZSB3b3VsZCBiZSBwb3Np
dGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2UgY2Fubm90IG1hdGVyaWFs
aXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAorICAgICAgICAvLyBzbyB3
ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJpdENvbnN0YW50ID0gY29u
c3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4o
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2Ms
IEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6
OlNvbWVSZWdpc3Rlcik7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKHNpZ25CaXRDb25zdGFudCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAg
IHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgfQorICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsK
KyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBT
Y3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9KTsKKyAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9p
bnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBi
ID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogSW1wbGVtZW50
IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1pbigpKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywg
bWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBH
cmVhdGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91
dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigp
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5j
YXRlRmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09Q
UzogaW1wbGVtZW50IHRoaXMKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwg
Yml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CisgICAg
VG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19j
YXN0PGZsb2F0PigtMS4wKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCks
IGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJh
cCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29uc3RhbnQ7CisgICAgaWYgKGlz
WDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVjdGlv
biB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2UgYXQg
bGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAgICAgICAvLyB0aGUgbnVtYmVy
cyB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2Ug
Y2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAor
ICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJp
dENvbnN0YW50ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworICAgIH0KKyAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChzaWduQml0Q29uc3RhbnQsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAg
IH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBGUFJS
ZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIEZQUlJlZyBjb25zdGFudCA9IElu
dmFsaWRGUFJSZWc7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBzY3JhdGNo
ID0gcGFyYW1zLmZwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgIGNvbnN0YW50ID0gcGFyYW1zWzJd
LmZwcigpOworICAgICAgICB9CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50NjQocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0aWFsUmVz
dWx0IEFpcklSR2VuZXJhdG9yOjphZGRTaGlmdChLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQoa2luZCwgdmFsdWUsIHNoaWZ0
LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICAKKyAgICBhcHBlbmQo
TW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUsIHNoaWZ0LCBtX2VjeCk7Cisg
ICAgYXBwZW5kKGtpbmQsIG1fZWN4LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK1Bh
cnRpYWxSZXN1bHQgQWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJTdWIoS2luZCBraW5kLCBFeHBy
ZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBB
cmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQoa2luZCwgbGhz
LCByaHMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlQoaXNYODYoKSk7CisgICAgLy8gU3ViIGEsIGIKKyAgICAvLyBtZWFucworICAgIC8v
IGIgPSBiIFN1YiBhCisgICAgYXBwZW5kKE1vdmUsIGxocywgcmVzdWx0KTsKKyAgICBhcHBlbmQo
a2luZCwgcmhzLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK1BhcnRpYWxSZXN1bHQg
QWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMoS2luZCBraW5kLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChraW5kID09IEFic0Zsb2F0IHx8IGtpbmQgPT0gQWJzRG91YmxlKTsKKworICAgIHJlc3VsdCA9
IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKGtpbmQsIEFyZzo6VG1wLCBBcmc6OlRtcCkp
IHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIHZhbHVlLCByZXN1bHQpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworCisgICAgVG1wIGNv
bnN0YW50ID0gZ3ByKCk7CisgICAgaWYgKGtpbmQgPT0gQWJzRmxvYXQpIHsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6aW1tKH4oMSA8PCAzMSkpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVu
ZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKEFuZEZs
b2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0ofigxIDw8IDYzKSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmU2
NFRvRG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKEFuZERvdWJsZSwg
dmFsdWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK1BhcnRpYWxSZXN1
bHQgQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5PcChLaW5kIGtpbmQsIEV4cHJl
c3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KQoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKGtpbmQsIEFy
Zzo6VG1wLCBBcmc6OlRtcCwgQXJnczo6VG1wKSkgeworICAgICAgICBhcHBlbmQoa2luZCwgbGhz
LCByaHMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlQoaXNYODYoKSk7CisKKyAgICAvLyBPcCBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAv
LyBiID0gYiBPcCBhCisgICAgLy8gT09QUzogdmVyaWZ5CisgICAgYXBwZW5kKE1vdmVEb3VibGUs
IGxocywgcmVzdWx0KTsKKyAgICBhcHBlbmQoa2luZCwgcmhzLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJDZWlsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENlaWxG
bG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTXVsPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE11bDMyLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWIzMiwgYXJnMCwgYXJnMSk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxl
c3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRlbW90
ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RG91
YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisK
KyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBh
cHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRT
dWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVu
ZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBl
bmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNl
dFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGlu
dWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyTWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2Nr
LCBCcmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCks
IGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWws
IG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3Vj
Y2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQs
IGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAg
IG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAg
YXBwZW5kKGxlc3NUaGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxl
c3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24p
OworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5n
UG9pbnRCaW5PcChNdWxEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKERpdkZs
b2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gT09Q
UzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBmb3IgdGhlIGltbXMgYW5kIHR3byBv
cGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wMSA9
IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7CisgICAgVG1wIHZhbHVlID0gZ3ByKCk7CisK
KyAgICAvLyBPT1BTOiBDYW4gZml0IGluIEltbS9CaXRJbW0gaW5zdGVhZCBvZiBCaWdJbW0/Cisg
ICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0oMHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEs
IHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7
CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1ZSk7CisgICAg
YXBwZW5kKEFuZDMyLCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjMyLCBz
aWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2YWx1ZSwgcmVz
dWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIFRtcCB0ZW1wID0gdG1wKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwg
dGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCB0ZW1wLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJSZWludGVycHJldEkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigp
OworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQW5kNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5l
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVO
b3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEd0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRo
YW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwgYXJnMCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxej4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NERpdj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IHdoYXQgYWJvdXQgY2hp
bGwtbmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2RG91
YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZsb2F0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TmU+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zNjQsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFw
cGVuZChOZWdhdGVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQW5kPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KEFuZDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVSaWdodDY0LCBhcmcwLCBhcmcxLCByZXN1bHQp
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
QWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRBYnMoQWJzRG91YmxlLCBh
cmcwLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyTHRTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvcHlzaWduPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgLy8gT09QUzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVy
ZSBmb3IgdGhlIGltbXMgYW5kIHR3byBvcGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9
IGZwcigpOworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7Cisg
ICAgVG1wIHZhbHVlID0gZ3ByKCk7CisKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzEs
IHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4MDAwMDAwMDAwMDAwMDAw
KSwgc2lnbik7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgc2lnbiwgc2lnbik7CisKKyAgICBh
cHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJn
OjpiaWdJbW0oMHg3ZmZmZmZmZmZmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVuZChBbmQ2NCwg
dGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3I2NCwgc2lnbiwgdmFsdWUsIHZh
bHVlKTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIHZhbHVlLCByZXN1bHQpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMkNvbnZlcnRTSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAg
YXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFJvdGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQo
Um90YXRlTGVmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTHQ+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyR2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hp
ZnQoVXJzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJMzI+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcCA9IHRtcCgpOworICAgIGFwcGVuZChNb3Zl
MzIsIGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0LCB0ZW1wLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VVPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KENvbXBhcmUz
MiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0Q2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChD
ZWlsRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVM+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFy
ZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNobD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NEZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEZsb29y
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJYb3I+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9yMzIsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0Zsb2F0LCBhcmcwLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWluPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Js
b2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRG91
YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJn
MSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwp
OworCisgICAgYXBwZW5kKGlzRXF1YWwsIE9yRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNv
bnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJl
c3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVh
bC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAg
ICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBNb3ZlRG91YmxlLCBhcmcxLCByZXN1bHQpOwor
ICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIEp1bXApOworICAgIGdyZWF0ZXJUaGFuT3JF
cXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sg
PSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE11bEZsb2F0LCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWI2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlJlaW50ZXJwcmV0RjMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFkZD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChBZGQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3ViPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFN1
YkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyT3I+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3Iz
MiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0THRVPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2
NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NEx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChD
b252ZXJ0SW50NjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKFhvcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVU+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNdWw2NCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRQcm9tb3RlRjMyPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRGbG9hdFRvRG91YmxlLCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQWRkRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRHZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NEV4dGVuZFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoTW92ZTMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJOZT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRSZWludGVycHJldEk2ND4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRmxvb3I+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoRmxvb3JGbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyRXF6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFRl
c3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVpbnRlcnByZXRGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
YWRkU2hpZnQoUnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJVPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFVyc2hpZnQ2NCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NFNxcnQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
U3FydERvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hsPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KExzaGlmdDMyLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyR3Q+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyV3JhcEk2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChN
b3ZlMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJvdGw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUm90YXRlTGVmdDMyLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyUm90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biBhZGRTaGlmdChSb3RhdGVSaWdodDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RVPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkd0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAg
YXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
biksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJl
bnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
aXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZERvdWJsZSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVh
bC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBN
b3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91
YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwg
YXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNvbnRpbnVhdGlv
bik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhj
b250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRM
ZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFkZD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChB
ZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM4LDcgKzE4MzgsNyBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIHBhdGNocG9pbnQt
Pm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAgfQogICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewotICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsgLy8gT09QUzogVGhpcyBsb29rcyBzdXBlciB3cm9uZyBnaXZl
biB3ZSBkb24ndCBzYXkgd2UgY2xvYmJlciB0aGlzIQogICAgICAgICBGUFJSZWcgc2NyYXRjaCA9
IEludmFsaWRGUFJSZWc7CiAgICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7
CiAgICAgICAgIGlmIChpc1g4NigpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360309</attachid>
            <date>2019-01-27 13:43:03 -0800</date>
            <delta_ts>2019-01-27 15:08:47 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>146615</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2
b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBh
Ci0gICAgICAgICAgICAgICAgLy8gdm9pZCByZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVy
ZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lkLgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1w
b3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJl
dFZvaWQKKyAgICAgICAgICAgICAgICAvLyBmb3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVk
UmVncyhBaXI6Okluc3QmKSBmaW5hbDsKICAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJl
Z3MoQWlyOjpJbnN0JikgZmluYWw7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBv
dmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUg
bWFueSBzb21lCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJh
dGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBz
dWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgK
ICAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgor
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZpcnR1YWxS
ZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUg
Ildhc21Db250ZXh0SW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisj
aW5jbHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgi
CisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21PTUdQbGFuLmgiCisjaW5j
bHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK2Ns
YXNzIEFpcklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewor
ICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIFR5cGUg
c2lnbmF0dXJlLCBUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29u
dGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDog
YmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24p
CisgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwgc2lnbmF0dXJl
KHNpZ25hdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChzaWduYXR1cmUgIT0gVHlwZTo6Vm9pZCk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChyZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZSA9PSBUeXBlOjpWb2lkKTsKKyAgICAgICAgfQor
CisgICAgICAgIENvbnRyb2xEYXRhKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6SWY6CisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJJZjogICAgICAgIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6QmxvY2s6CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJCbG9jazogICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6TG9vcDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxv
b3A6ICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxv
Y2tUeXBlOjpUb3BMZXZlbDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAi
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91
dC5wcmludCgiQ29udGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsK
KyAgICAgICAgICAgIGlmIChzcGVjaWFsKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgqc3Bl
Y2lhbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJOb25l
Iik7CisgICAgICAgIH0KKworICAgICAgICBCbG9ja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGJsb2NrVHlwZTsgfQorCisgICAgICAgIFR5cGUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4g
c2lnbmF0dXJlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3Qg
eyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAg
ICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0
SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAs
IDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRG
b3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tU
eXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHNp
Z25hdHVyZTsKKyAgICB9OworCisgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUbXA7CisgICAg
dXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKKyAgICB1c2luZyBFeHByZXNzaW9uTGlz
dCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT47CisgICAgdXNpbmcgUmVzdWx0TGlzdCBDb250
cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBh
cnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gVG1wIHsgfTsKKworICAgIHVzaW5n
IEVycm9yVHlwZSA9IFN0cmluZzsKKyAgICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBl
Y3RlZDxFcnJvclR5cGU+OworICAgIHVzaW5nIFJlc3VsdCA9IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPjsKKyAgICB1c2luZyBQYXJ0aWFsUmVz
dWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5h
bWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNlci5o
LgorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJs
eS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7Cisg
ICAgfQorCisjZGVmaW5lIFdBU01fQ09NUElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7
IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAg
fSB3aGlsZSAoMCkKKworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOworCisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQz
Ml90KTsKKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CisK
KyAgICAvLyBMb2NhbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRM
b2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKTsKKworICAgIC8vIEdsb2JhbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2Jh
bCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gTWVtb3J5
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBv
ZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHN0b3JlKFN0b3Jl
T3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWlu
dDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRH
cm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQmFzaWMgb3BlcmF0b3JzCisgICAgdGVt
cGxhdGU8T3BUeXBlPgorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9w
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgdGVtcGxh
dGU8T3BUeXBlPgorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4
cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTZWxlY3Qo
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNz
aW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIENvbnRyb2wg
ZmxvdworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUb3BMZXZlbChUeXBl
IHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2Nr
KFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
TG9vcChUeXBlIHNpZ25hdHVyZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJv
bERhdGEmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEm
KTsKKworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25z
dCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYs
IEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdl
dHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4
cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5k
QmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShD
b250cm9sRW50cnkmKTsKKworICAgIC8vIENhbGxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVu
cmVhY2hhYmxlKCk7CisKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZFNoaWZ0KEtpbmQga2luZCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEludGVnZXJTdWIoS2luZCBraW5kLCBFeHBy
ZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QWJzKEtpbmQga2luZCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxS
ZXN1bHQgYWRkRmxvYXRpbmdQb2ludEJpbk9wKEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUgbGhz
LCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgdm9p
ZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4
cHJlc3Npb25MaXN0KiBleHByZXNzaW9uU3RhY2spOworICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0
aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9
OworCisgICAgVG1wIGNvbnN0YW50KEIzOjpUeXBlLCB1aW50NjRfdCBiaXRzLCBPcHRpb25hbDxP
cmlnaW4+ID0gV1RGOjpudWxsb3B0KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQmFzaWNCbG9jayogYmxvY2ssIEFpcjo6
S2luZCBraW5kLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICAvLyBP
T1BTOiBBZGQgb3JpZ2luCisgICAgICAgIGJsb2NrLT5hcHBlbmQoa2luZCwgbnVsbHB0ciwgc3Rk
Ojpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFpcjo6S2luZCBraW5k
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBhcHBlbmQobV9jdXJy
ZW50QmxvY2ssIGtpbmQsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOwor
ICAgIH0KKworICAgIFRtcCB0bXAoQmFuayBiYW5rKSB7IHJldHVybiBtX2NvZGUubmV3VG1wKGJh
bmspOyB9CisgICAgVG1wIGdwcigpIHsgcmV0dXJuIHRtcChHUCk7IH0KKyAgICBUbXAgZnByKCkg
eyByZXR1cm4gdG1wKEZQKTsgfQorICAgIFRtcCB0bXBGb3JUeXBlKFR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OmkzMjoKKyAgICAg
ICAgY2FzZSBUeXBlOjppNjQ6CisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIGNh
c2UgVHlwZTo6ZjMyOgorICAgICAgICBjYXNlIFR5cGU6OmY2NDoKKyAgICAgICAgICAgIHJldHVy
biBmcHIoKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUbXAoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGFkZFBhdGNocG9pbnQo
QjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb2MuYWRkPEIzOjpQYXRj
aHBvaW50VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCMzo6UGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAg
ICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIHN0ZDo6Zm9y
d2FyZDxBcmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2Nr
LCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdz
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFsKQorICAgICAgICAgICAg
bV9wYXRjaHBvaW50U3BlY2lhbCA9IG1fY29kZS5hZGRTcGVjaWFsKHN0ZDo6bWFrZV91bmlxdWU8
QjM6OlBhdGNocG9pbnRTcGVjaWFsPigpKTsKKworICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBh
dGNoLCBBcmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOworICAgICAgICBpZiAocmVz
dWx0KSB7CisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSAhPSBCMzo6Vm9pZCk7Cisg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGF1dG8gYXJncyA9IHN0ZDo6bWFrZV90dXBsZSguLi50aGVBcmdzKTsKKyAgICAg
ICAgZm9yIChUbXAgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8gT09QUzogVWdoLCB0aGlz
IGlzIHN1cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBCMzo6VmFsdWUqIGhlcmUu
CisgICAgICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdvcmssIGJ1dCBvdXIgYWx0
ZXJuYXRpdmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAgICAgLy8gb3IgcmVpbnZl
bnQgcGFydCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQo
bnVsbHB0ciwgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZCh0bXApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhdGNoLT5yZXN1bHRD
b25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICBwYXRjaC0+bGF0ZUNsb2JiZXJlZCgpLmNs
ZWFyKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGlu
c3QuYXJncy5hcHBlbmQoZ3ByKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRjaC0+
bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVu
ZChmcHIoKSk7CisKKyAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCcmFuY2gsIHR5cGVuYW1lIEdlbmVyYXRv
cj4KKyAgICB2b2lkIGVtaXRDaGVjayhjb25zdCBCcmFuY2gmIGVtaXRCcmFuY2gsIGNvbnN0IEdl
bmVyYXRvciYgZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgLy8gV2UgZmFpbCBhbG9uZyB0aGUg
InRydXRoeSIgZWRnZSBvZiAnYnJhbmNoJworCisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVh
dGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBmYWlsZWQgPSBt
X3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRCcmFuY2goKTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBmYWlsZWQpOwor
CisgICAgICAgIGF1dG8qIGZhaWxlZFBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lk
KTsKKyAgICAgICAgZmFpbGVkUGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKGdlbmVyYXRvcik7Cisg
ICAgICAgIGVtaXRQYXRjaHBvaW50KGZhaWxlZCwgZmFpbGVkUGF0Y2hwb2ludCwgVG1wKCkpOwor
ICAgICAgICBhcHBlbmQoZmFpbGVkLCBPb3BzKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4K
KyAgICB2b2lkIGVtaXRDQ2FsbCh2b2lkKiBmdW5jLCBUbXAgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgeworICAgICAgICBlbWl0Q0NhbGwobV9jdXJyZW50QmxvY2ssIGZ1bmMsIHJlc3VsdCwg
c3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0Q0NhbGwoQmFzaWNCbG9jayogYmxvY2ssIHZvaWQq
IGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICB7CisgICAgICAgIEluc3QgaW5z
dChBaXI6OkNDYWxsLCBudWxscHRyKTsKKworICAgICAgICBUbXAgY2FsbGVlID0gZ3ByKCk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbVB0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1
bmMsIEIzQ0NhbGxQdHJUYWcpKSwgY2FsbGVlKTsKKyAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChj
YWxsZWUpOworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKHJlc3VsdCk7CisKKyAgICAgICAgYXV0byBhcmdzID0gc3RkOjptYWtlX3R1cGxlKC4uLnRo
ZUFyZ3MpOworICAgICAgICBmb3IgKFRtcCB0bXAgOiBhcmdzKQorICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZChpbW1PclRtcChjQ2FsbC0+Y2hpbGQoaSkpKTsKKworICAgICAgICBibG9jay0+
YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgIH0KKworCisgICAgdm9pZCBlbWl0VGhyb3dFeGNl
cHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisKKyAgICB2b2lkIGVtaXRUaWVy
VXBDaGVjayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgT3JpZ2luKTsKKworICAgIEV4cHJlc3Np
b25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOworICAgIEIzOjpLaW5kIG1lbW9y
eUtpbmQoQjM6Ok9wY29kZSBtZW1vcnlPcCk7CisgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRP
cChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwor
ICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworCisgICAgdm9pZCB1bmlm
eShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSk7
CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVz
dWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKworICAgIHZvaWQgZW1pdENoZWNr
c0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0KTsKKworICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRl
clBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CisKKyAgICB2b2lkIHJlc3Rv
cmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYsIEJhc2ljQmxvY2sqLCBUbXApOworICAg
IGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVzIH07CisgICAgdm9p
ZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwg
Y29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBUbXAgaW5zdGFuY2UsIFByb2NlZHVyZSYsIEJhc2lj
QmxvY2sqKTsKKworICAgIE9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzogV2UgbmVlZCB0byBtYWtl
IGFuIEFpcjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGZyb20gQjMgY29kZS4K
KworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRy
IH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBjb25zdCBNZW1v
cnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgY29uc3Qg
Q29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFN
b2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsK
KyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CisKKyAgICBQcm9j
ZWR1cmUmIG1fcHJvYzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFzaWNCbG9jayogbV9jdXJy
ZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sgeyBudWxs
cHRyIH07CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxUbXAsIFR5cGU+PiBtX2xvY2FsczsKKyAgICBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7
IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRy
ZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQ
UiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisgICAgVG1wIG1f
aW5zdGFuY2VWYWx1ZSB7IG51bGxwdHIgfTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVs
b3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2Vk
LgorICAgIGJvb2wgbV91c2VzSW5zdGFuY2VWYWx1ZSB7IGZhbHNlIH07CisgICAgVG1wIGluc3Rh
bmNlVmFsdWUoKQorICAgIHsKKyAgICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7Cisg
ICAgICAgIHJldHVybiBtX2luc3RhbmNlVmFsdWU7CisgICAgfQorCisgICAgdWludDMyX3QgbV9t
YXhOdW1KU0NhbGxBcmd1bWVudHMgeyAwIH07CisKKyAgICBCMzo6UGF0Y2hwb2ludFNwZWNpYWwq
IG1fcGF0Y2hwb2ludFNwZWNpYWwgeyBudWxscHRyIH07Cit9OworCisvLyBNZW1vcnkgYWNjZXNz
ZXMgaW4gV2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0
aGV5IGhhdmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgoraW50MzJfdCBBaXJJUkdlbmVy
YXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJf
dCBvZmZzZXQpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkg
eworICAgICAgICBwdHIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEFkZCwgb3JpZ2luKCksIHB0ciwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIG9mZnNldCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdh
c21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaywgVG1w
IGFyZykKK3sKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
Pihwcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOworICAgICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFy
ZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6c3Rv
cmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJl
Z2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4g
dGhlIGNhbGxlciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1
bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCisg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgRWZmZWN0cyBlZmZlY3Rz
ID0gRWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAg
ICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJT
ZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGlu
c3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgR1BSUmVnIHdhc21D
b250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3By
KCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgIH0pOworfQorCitBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBt
b2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQorICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1f
Y29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChm
dW5jdGlvbkluZGV4KQorICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHByb2Nl
ZHVyZSkKKyAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQorICAgICwgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKK3sKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgIG1fcm9vdEJsb2NrID0gbV9jdXJyZW50QmxvY2s7
CisKKyAgICAvLyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhl
cmUgaWYgdGhlcmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2lt
cGxlciBmb3Igbm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
NjIzCisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVn
aXN0ZXJJbmZvOjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFz
ZU1lbW9yeVBvaW50ZXI7CisgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7
CisKKyAgICBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0
SW5zdGFuY2VQb2ludGVyOworICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAg
ICBtX2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKworICAgIGlm
IChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICBBU1NFUlQoIXBpbm5l
ZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgbV9tZW1vcnlTaXpl
R1BSID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAg
Zm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5z
aXplUmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6
ZVJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAg
ICBUaHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNl
cHRpb24pOworCisgICAgaWYgKGluZm8ubWVtb3J5KSB7CisgICAgICAgIG1fcHJvYy5zZXRXYXNt
Qm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5l
ZEdQUikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgICAg
IGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6
CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIEludmFsaWRHUFJSZWcg
PT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoICht
X21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAg
ICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRv
IGFuIGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRpb24gY2hlY2sgYmVjYXVzZSB0aGV5
IGNhbiByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAgICAgICAgICAgLy8gb3V0
LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRz
IHRoZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0
byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRv
bigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJs
b2NrKTsKKworICAgIHsKKyAgICAgICAgQjM6OlRtcCBmcmFtZVBvaW50ZXIgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBPcmln
aW4oKSk7CisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHN0YWNrT3ZlcmZsb3dDaGVjayA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBw
b2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IHN0YWNr
T3ZlcmZsb3dDaGVjazsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5hcHBlbmRTb21lUmVn
aXN0ZXIoZnJhbWVQb2ludGVyKTsKKyAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5jbG9iYmVy
KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIGlmICghQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNt
VG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9l
cyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lk
ZS4KKyAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJl
ZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCisgICAgICAg
ICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMud3JpdGVzUGlubmVkID0gZmFsc2U7Cisg
ICAgICAgICAgICBzdGFja092ZXJmbG93Q2hlY2stPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVl
OworICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5yZXN1bHRDb25zdHJhaW50ID0gVmFs
dWVSZXA6OnJlZyhtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgICAgICB9CisgICAgICAg
IHN0YWNrT3ZlcmZsb3dDaGVjay0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMjsKKyAgICAgICAg
c3RhY2tPdmVyZmxvd0NoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBwYXJhbXMucHJvYygpLmZy
YW1lU2l6ZSgpOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbWluaW11bVBhcmVudENoZWNr
U2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDEw
MjQpOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0cmFGcmFtZVNpemUgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGQ6Om1heDx1aW50MzJf
dD4oCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hl
Y2tzIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgdGVybWluYWwgbm9kZXMgaW4gdGhlIGNhbGwKKyAg
ICAgICAgICAgICAgICAvLyB0cmVlLCAoZS5nIHRoZXkgZG9uJ3QgbWFrZSBhbnkgY2FsbHMpIGFu
ZCBoYXZlIGEgc21hbGwgZW5vdWdoIGZyYW1lIHNpemUuIFRoaXMgd29ya3MgYnkKKyAgICAgICAg
ICAgICAgICAvLyBoYXZpbmcgYW55IHN1Y2ggdGVybWluYWwgbm9kZSBoYXZlIGl0cyBwYXJlbnQg
Y2FsbGVyIGluY2x1ZGUgc29tZSBleHRyYSBzaXplIGluIGl0cworICAgICAgICAgICAgICAgIC8v
IG93biBjaGVjayBmb3IgaXQuIFRoZSBnb2FsIGhlcmUgaXMgdHdvZm9sZDoKKyAgICAgICAgICAg
ICAgICAvLyAxLiBFbWl0IGxlc3MgY29kZS4KKyAgICAgICAgICAgICAgICAvLyAyLiBUcnkgdG8g
c3BlZWQgdGhpbmdzIHVwIGJ5IHNraXBwaW5nIHN0YWNrIGNoZWNrcy4KKyAgICAgICAgICAgICAg
ICBtaW5pbXVtUGFyZW50Q2hlY2tTaXplLAorICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dz
IHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBpbiB0aGUgV2FzbSAtPiBFbWJlZGRlciBjYWxsIElD
IHN0dWIuIFNpbmNlIHRoZXNlIHdpbGwKKyAgICAgICAgICAgICAgICAvLyBzcGlsbCBhbGwgYXJn
dW1lbnRzIHRvIHRoZSBzdGFjaywgd2UgZW5zdXJlIHRoYXQgYSBzdGFjayBjaGVjayBoZXJlIGNv
dmVycyB0aGUKKyAgICAgICAgICAgICAgICAvLyBzdGFjayB0aGF0IHN1Y2ggYSBzdHViIHdvdWxk
IHVzZS4KKyAgICAgICAgICAgICAgICAoQ2hlY2tlZDx1aW50MzJfdD4obV9tYXhOdW1KU0NhbGxB
cmd1bWVudHMpICogc2l6ZW9mKFJlZ2lzdGVyKSArIGpzY0NhbGxpbmdDb252ZW50aW9uKCkuaGVh
ZGVyU2l6ZUluQnl0ZXMoKSkudW5zYWZlR2V0KCkKKyAgICAgICAgICAgICkpOworICAgICAgICAg
ICAgY29uc3QgaW50MzJfdCBjaGVja1NpemUgPSBtX21ha2VzQ2FsbHMgPyAod2FzbUZyYW1lU2l6
ZSArIGV4dHJhRnJhbWVTaXplKS51bnNhZmVHZXQoKSA6IHdhc21GcmFtZVNpemUudW5zYWZlR2V0
KCk7CisgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZsb3dDaGVjayA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpOworICAgICAg
ICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBtX21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1l
U2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKKwor
ICAgICAgICAgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMo
KSA/IHBhcmFtc1swXS5ncHIoKSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKworICAgICAg
ICAgICAgLy8gVGhpcyBhbGxvd3MgbGVhZiBmdW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNr
cyBpZiB0aGVpciBmcmFtZSBzaXplIGlzIHdpdGhpbgorICAgICAgICAgICAgLy8gY2VydGFpbiBs
aW1pdHMgc2luY2UgdGhlaXIgY2FsbGVyIHdvdWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVj
ay4KKyAgICAgICAgICAgIGlmIChuZWVkc092ZXJmbG93Q2hlY2spIHsKKyAgICAgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIGZwID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKworICAgICAgICAgICAgICAg
IGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworCisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHRJbnN0YW5jZSwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2NyYXRjaDIpOworICAgICAgICAgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIGZw
LCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92
ZXJmbG93OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hlY2sp
KQorICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2Fs
bEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoMSwgZnApKTsKKyAgICAgICAgICAgICAgICBvdmVyZmxv
dy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoMSwgc2Ny
YXRjaDIpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNp
bmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvciku
Y29kZSgpKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
dXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAg
ICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZh
bHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgorICAgICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6
bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2Up
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2Qg
cmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlz
bid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBl
ZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0
aW5nIHJlbW92ZWQuCisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIGVt
aXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeURlY3JlbWVudCgpLCBPcmln
aW4oKSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2Jh
bFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBj
b25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBUbXAgaW5zdGFuY2UsIFByb2NlZHVyZSYg
cHJvYywgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFu
Y2UocHJvYywgYmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tM
aW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CisgICAgICAgIC8vIFRoZSBJ
bnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMg
Y2Fub25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBUbXAgcG9pbnRlclRvQWN0dWFsU3RhY2tM
aW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50
MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSk7Cisg
ICAgICAgIFRtcCBhY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgcG9pbnRl
clRvQWN0dWFsU3RhY2tMaW1pdCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCBhY3R1YWxTdGFja0xpbWl0LCBp
bnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSkpOworICAgIH0KKworICAgIGlmICghIW1lbW9yeSkgeworICAgICAgICBj
b25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CisgICAgICAgIGNsb2JiZXJz
LnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgIGZvciAoYXV0byBp
bmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIGNsb2JiZXJzLnNl
dChpbmZvLnNpemVSZWdpc3Rlcik7CisKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6
OlZvaWQsIG9yaWdpbigpKTsKKyAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOworICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGVmZmVj
dHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IGVmZmVjdHM7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlcnMpOwor
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNl
TWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVk
UmVncy0+c2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkg
Pj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBU
aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBz
dWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5n
cHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNp
emVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdz
W2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBBaXJJUkdl
bmVyYXRvcjo6ZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYgaml0LCBFeGNlcHRpb25U
eXBlIHR5cGUpCit7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBh
dXRvIGp1bXBUb0V4Y2VwdGlvblN0dWIgPSBqaXQuanVtcCgpOworCisgICAgaml0LmFkZExpbmtU
YXNrKFtqdW1wVG9FeGNlcHRpb25TdHViXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9uU3R1YiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIH0pOworfQorCisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG90
YWxCeXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCArPSBtX2xvY2Fs
cy5zaXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NPTVBJTEVfRkFJ
TF9JRigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBDaGVja2VkU3Rh
dGU6OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0
ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGxvY2FscyIp
OworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6aTMyOgorICAgICAgICBjYXNlIFR5
cGU6Omk2NDogeworICAgICAgICAgICAgVG1wIGxvY2FsID0gZ3ByKCk7CisgICAgICAgICAgICBt
X2xvY2Fscy51bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIGFw
cGVuZChYb3I2NCwgbG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgVHlwZTo6ZjMyOgorICAgICAgICBjYXNlIFR5cGU6OmY2NDogeworICAg
ICAgICAgICAgVG1wIGxvY2FsID0gZnByKCk7CisgICAgICAgICAgICBtX2xvY2Fscy51bmNoZWNr
ZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7
CisgICAgICAgICAgICAvLyBJRUVFIDc1NCAiMCIgaXMganVzdCBpbnQzMi82NCB6ZXJvLgorICAg
ICAgICAgICAgYXBwZW5kKFhvcjY0LCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgICAgIGFwcGVuZCh0
eXBlID09IFR5cGU6OmYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwgdGVtcCwg
bG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFM6IElzIHRo
aXMgY29ycmVjdD8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAg
V0FTTV9DT01QSUxFX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKKworICAgIG1fbG9jYWxzLmdyb3co
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBz
aWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIFR5cGU6OmkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjppNjQ6CisgICAgICAgICAgICBtX2xv
Y2Fsc1tpXSA9IHsgZ3ByKCksIHR5cGUgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGU6OmYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpmNjQ6CisgICAgICAgICAgICBtX2xv
Y2Fsc1tpXSA9IHsgZnByKCksIHR5cGUgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9jb2RlKTsKKwor
ICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLmxvYWRBcmd1bWVudHMoc2lnbmF0dXJlLCBt
X3Byb2MsIG1fY3VycmVudEJsb2NrLCBPcmlnaW4oKSwKKyAgICAgICAgWz1dIChjb25zdCBBaXI6
OkFyZyYgYXJnLCB1bnNpZ25lZCBpKSB7CisgICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkpIHsK
KyAgICAgICAgICAgICAgICBJbnN0IGluc3Q7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzaWdu
YXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFR5cGU6OmkzMjoKKyAg
ICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoTW92ZTMyLCBudWxscHRyLCBhcmcsIG1fbG9j
YWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBUeXBlOjppNjQ6CisgICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KE1vdmUs
IG51bGxwdHIsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFR5cGU6OmYzMjoKKyAgICAgICAgICAgICAgICAg
ICAgaW5zdCA9IEluc3QoTW92ZUZsb2F0LCBudWxscHRyLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUeXBl
OjpmNjQ6CisgICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KE1vdmVEb3VibGUsIG51bGxw
dHIsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0SW5zdCgwLCBXVEZNb3ZlKGluc3QpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGFyZy5pc0FkZHIoKSk7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFR5cGU6OmkzMjoKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgYXJnLCBt
X2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgVHlwZTo6aTY0OgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
YXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgVHlwZTo6ZjMyOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQo
TW92ZUZsb2F0LCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUeXBlOjpmNjQ6CisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZChNb3ZlRG91YmxlLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgLy8gT09QUzogTmVlZCB0byBjb25z
aWRlciBpZiB0aGVzZSBNb3ZlcyBkb24ndCBnZXQgcmVnIGFsbG9jZWQsIHdlIG1heSBiZSBzdGFj
ayBvdmVyZmxvd2luZworICAgIC8vIHcvIHRoZSBzdGFjayBsb2FkL3N0b3JlLi4uCisgICAgLy8g
TWF5YmUgd2Ugc2hvdWxkIGp1c3QgZm9yZ2V0IGFkZEFyZ3VtZW50cyBhbmQgZG8gdGhpcyBpbiBv
dXIgcHJvbG9ndWUgYWZ0ZXIgc3RhY2sgY2hlY2shCisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
bV9yb290QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdLmZpcnN0KTsKKyAgICBy
ZXN1bHQgPSBtX2xvY2Fsc1tpbmRleF0uZmlyc3Q7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogdW5yZWFjaGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbigpKTsK
KyAgICB1bnJlYWNoYWJsZS0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVt
aXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6OlVucmVhY2hhYmxlKTsKKyAgICB9
KTsKKyAgICB1bnJlYWNoYWJsZS0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGludDMyX3QgKCpncm93TWVtb3J5KSh2b2lkKiwgSW5zdGFuY2UqLCBpbnQzMl90KSA9IFtd
ICh2b2lkKiBjYWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkgLT4g
aW50MzJfdCB7CisgICAgICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUp
OworCisgICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAg
ICAgICAgYXV0byBncm93biA9IGluc3RhbmNlLT5tZW1vcnkoKS0+Z3JvdyhQYWdlQ291bnQoZGVs
dGEpKTsKKyAgICAgICAgaWYgKCFncm93bikgeworICAgICAgICAgICAgc3dpdGNoIChncm93bi5l
cnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFs
aWREZWx0YToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxp
ZEdyb3dTaXplOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpXb3Vs
ZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246
Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKKyAgICB9OworCisgICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIElu
dDMyLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGdyb3dNZW1v
cnksIEIzQ0NhbGxQdHJUYWcpKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKCkpLCBpbnN0YW5jZVZh
bHVlKCksIGRlbHRhKTsKKworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBt
X3Byb2MsIG1fY3VycmVudEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0YXRp
Y19jYXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAi
Y29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisgICAgVG1wIHNpemUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4o
KSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKCkpKTsKKworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVl
ID0gMTY7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwg
c2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3Jy
ZWN0LiIpOworICAgIFRtcCBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCksCisgICAgICAgIHNpemUsIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBzaGlmdFZhbHVlKSk7
CisKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IFRydW5jLCBvcmlnaW4oKSwgbnVtUGFnZXMpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
IHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XS5m
aXJzdCk7CisgICAgc3dpdGNoIChtX2xvY2Fsc1tpbmRleF0uc2Vjb25kKSB7CisgICAgY2FzZSBU
eXBlOjppMzI6CisgICAgICAgIGFwcGVuZChNb3ZlMzIsIHZhbHVlLCBtX2xvY2Fsc1tpbmRleF0u
Zmlyc3QpOworICAgIGNhc2UgVHlwZTo6aTY0OgorICAgICAgICBhcHBlbmQoTW92ZSwgdmFsdWUs
IG1fbG9jYWxzW2luZGV4XS5maXJzdCk7CisgICAgY2FzZSBUeXBlOjpmMzI6CisgICAgICAgIGFw
cGVuZChNb3ZlRmxvYXQsIHZhbHVlLCBtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAgIGNhc2Ug
VHlwZTo6ZjY0OgorICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgdmFsdWUsIG1fbG9jYWxzW2lu
ZGV4XS5maXJzdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIFRtcCBnbG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZz
ZXRPZkdsb2JhbHMoKSkpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUobV9pbmZvLmdsb2JhbHNbaW5kZXhd
LnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2lu
ZGV4XS50eXBlKSA9PSB2YWx1ZS0+dHlwZSgpKTsKKyAgICBUbXAgZ2xvYmFsc0FycmF5ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0
YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJh
eSwgc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworaW5saW5lIFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50
MzJfdCBzaXplT2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CisK
KyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmc6IHsKKyAgICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGws
IHdlIG11c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRo
ZSBjdXJyZW50IG1lbW9yeSBzaXplLgorICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsK
KyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIG1fbWVtb3J5U2l6ZUdQUiwgcG9pbnRlciwgc2l6ZU9mT3BlcmF0aW9uICsg
b2Zmc2V0IC0gMSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQgNEdpQity
ZWR6b25lIGZvciB0aGlzIG1lbW9yeS4gT25seSB0aGUgdXNlci1hbGxvY2F0ZWQgcGFnZXMgYXJl
IGFkZHJlc3NhYmxlLCBjb250aWd1b3VzbHkgaW4gcmFuZ2UgWzAsIGN1cnJlbnRdLAorICAgICAg
ICAvLyBhbmQgZXZlcnl0aGluZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05FLiBXZSBkb24ndCBu
ZWVkIHRvIHBlcmZvcm0gYW55IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0aGUgNEdpQiByYW5n
ZSBiZWNhdXNlIFdlYkFzc2VtYmx5IHJlZ2lzdGVyCisgICAgICAgIC8vIG1lbW9yeSBhY2Nlc3Nl
cyBhcmUgMzItYml0LiBIb3dldmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyICsgb2Zmc2V0IGFjY2Vz
c2VzIHBlcmZvcm0gdGhlIGFkZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nl
c3MgYWJvdmUKKyAgICAgICAgLy8gdGhlIDMyLWJpdCBsaW1pdCAodGhlIG9mZnNldCBpcyB1bnNp
Z25lZCAzMi1iaXQpLiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgb2Zmc2V0cywg
YW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueQorICAgICAgICAvLyByZWdpc3Rl
ciArIGxhcmdlIG9mZnNldCBhY2Nlc3MuIFdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBiZSBnZW5l
cmF0ZWQgZnJlcXVlbnRseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgY2hlY2sg
dGhhdCByZWdpc3RlciArIGxhcmdlIG9mZnNldCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3JlZHpvbmUg
c2luY2UgdGhhdCdzIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lkIG92ZXJm
bG93aW5nIHRoZQorICAgICAgICAvLyBQUk9UX05PTkUgcmVnaW9uLCBidXQgaXQncyBiZXR0ZXIg
aWYgd2UgdXNlIGEgc21hbGxlciBpbW1lZGlhdGUgYmVjYXVzZSBpdCBjYW4gY29kZWdlbnMgYmV0
dGVyLiBXZSBrbm93IHRoYXQgYW55dGhpbmcgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICAv
LyB0aGFuIHRoZSBkZWNsYXJlZCAnbWF4aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFy
ZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQgJ21heGltdW0n
IHRoZW4gd2Ugc3RpbGwga25vdyB0aGF0CisgICAgICAgIC8vIGFueSBhY2Nlc3MgZXF1YWwgdG8g
b3IgZ3JlYXRlciB0aGFuIDRHaUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUgcmVkem9u
ZS4KKyAgICAgICAgaWYgKG9mZnNldCA+PSBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0ZXMo
KSkgeworICAgICAgICAgICAgc2l6ZV90IG1heGltdW0gPSBtX2luZm8ubWVtb3J5Lm1heGltdW0o
KSA/IG1faW5mby5tZW1vcnkubWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBzaXplT2ZP
cGVyYXRpb24gKyBvZmZzZXQgLSAxLCBtYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgfQorCisgICAgcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgcG9pbnRlcik7CisgICAgcmV0dXJu
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUFkZHJlc3NWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgcG9pbnRlciwgbV9tZW1vcnlCYXNlR1BSKTsKK30KKworaW5saW5lIHVpbnQzMl90IHNp
emVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToK
KyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQ4VToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2Fk
MTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQxNlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgorICAgICAg
ICByZXR1cm4gMjsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkMzJTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAg
ICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6CisgICAg
ICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitpbmxpbmUgQjM6OktpbmQgQWlySVJHZW5lcmF0b3I6Om1lbW9yeUtpbmQoQjM6Ok9wY29k
ZSBtZW1vcnlPcCkKK3sKKyAgICBpZiAobV9tb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGluZykK
KyAgICAgICAgcmV0dXJuIHRyYXBwaW5nKG1lbW9yeU9wKTsKKyAgICByZXR1cm4gbWVtb3J5T3A7
Cit9CisKK2lubGluZSBUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBv
cCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAgICBpbnQz
Ml90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6IHsKKyAg
ICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgbWVtb3J5S2luZChMb2FkOFMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzogeworICAgICAgICBUbXAgdmFsdWUg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtp
bmQoTG9hZDhTKSwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFNFeHQzMiwgb3JpZ2luKCks
IHZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogeworICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBtZW1vcnlLaW5kKExvYWQ4WiksIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAgIH0K
KworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7CisgICAgICAgIFRtcCB2YWx1ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2lu
ZChMb2FkOFopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwg
dmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzogeworICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBtZW1vcnlLaW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICB9
CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6IHsKKyAgICAgICAgVG1wIHZhbHVl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlL
aW5kKExvYWQxNlMpLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgU0V4dDMyLCBvcmlnaW4o
KSwgdmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VTogewor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtZW1vcnlLaW5kKExvYWQxNlopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAgVG1wIHZh
bHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1v
cnlLaW5kKExvYWQxNlopLCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmln
aW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDogewor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBtZW1vcnlLaW5kKExvYWQpLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIsIG9mZnNldCk7
CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOiB7CisgICAgICAgIFRt
cCB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
bWVtb3J5S2luZChMb2FkKSwgSW50MzIsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0
MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkMzJTOiB7CisgICAgICAgIFRtcCB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgSW50MzIsIG9yaWdpbigpLCBw
b2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQorCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoTG9hZCksIEludDY0
LCBvcmlnaW4oKSwgcG9pbnRlciwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5
cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2luZChMb2FkKSwgRmxvYXQsIG9yaWdpbigpLCBw
b2ludGVyLCBvZmZzZXQpOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDog
eworICAgICAgICByZXR1cm4gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBtZW1vcnlLaW5kKExvYWQpLCBEb3VibGUsIG9yaWdpbigpLCBwb2ludGVyLCBvZmZz
ZXQpOworICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci0+dHlwZSgpID09IEludDMyKTsKKwor
ICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mTG9h
ZE9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlzIHByb3Zh
Ymx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28gd2UgaGF2
ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gSG93ZXZl
ciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY2NDM1CisgICAgICAgIEIzOjpQYXRjaHBvaW50VG1wIHRocm93RXhjZXB0aW9uID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpW
b2lkLCBvcmlnaW4oKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0b3IoW3Ro
aXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
c3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAgICAgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgICAgICAgICByZXN1bHQgPSBjb25zdGFu
dChJbnQzMiwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAgICAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgorICAgICAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0
TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0YW50KEludDY0LCAwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6CisgICAgICAg
ICAgICByZXN1bHQgPSBjb25zdGFudChGbG9hdCwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0ID0gY29u
c3RhbnQoRG91YmxlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9
IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KTsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3Jl
T3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
MzJTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgICAgICByZXR1
cm4gMTsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgorICAgIGNhc2UgU3RvcmVP
cFR5cGU6Okk2NFN0b3JlMTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgU3RvcmVPcFR5
cGU6OkkzMlN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgU3Rv
cmVPcFR5cGU6Okk2NFN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgorICAg
ICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworCitpbmxpbmUgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50
MzJfdCB1b2Zmc2V0KQoreworICAgIGludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVyUGx1c09m
ZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0
b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICAgICAg
RkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgbWVtb3J5S2lu
ZChTdG9yZTgpLCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgICAgIHZhbHVl
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBUcnVuYywgb3JpZ2lu
KCksIHZhbHVlKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisKKyAgICBjYXNlIFN0b3JlT3BUeXBl
OjpJMzJTdG9yZTE2OgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmUxNiksIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRl
ciwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0
U3RvcmUzMjoKKyAgICAgICAgdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOworICAgICAgICBGQUxMVEhST1VHSDsK
KworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6
OkkzMlN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3JlOgorICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkY2NFN0b3JlOgorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmUpLCBvcmlnaW4oKSwgdmFsdWUsIHBv
aW50ZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci0+
dHlwZSgpID09IEludDMyKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMy
X3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZl
biB0aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlk
YXRpb24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVu
dGltZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBCMzo6UGF0Y2hwb2ludFZh
bHVlKiB0aHJvd0V4Y2VwdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAgICAgICB0aHJvd0V4
Y2VwdGlvbi0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7
CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVPcChvcCwgZW1pdENo
ZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSks
IHZhbHVlLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUg
bm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIGNvbmRpdGlvbiwgbm9uWmVybywg
emVybyk7CisgICAgcmV0dXJuIHsgfTsKK30KKworQWlySVJHZW5lcmF0b3I6OkV4cHJlc3Npb25U
eXBlIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVl
KQoreworICAgIHJldHVybiBjb25zdGFudCh0b0IzVHlwZSh0eXBlKSwgdmFsdWUpOworfQorCit2
b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291
bnQsIE9yaWdpbiBvcmlnaW4pCit7CisgICAgaWYgKCFtX3RpZXJVcCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgVG1wIGNvdW50ZG93blB0ciA9IGdwcigpOworICAgIFRtcCBvbGRDb3VudGRvd24g
PSBncHIoKTsKKyAgICBUbXAgbmV3Q291bnRkb3duID0gZ3ByKCk7CisKKyAgICBhcHBlbmQoTW92
ZSwgQXJnOjpiaWdJbW0ocmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obV90aWVyVXApKSwgY291
bnRkb3duUHRyKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY291bnRkb3duUHRyKSwg
b2xkQ291bnRkb3duKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEltbUZvcm0o
ZGVjcmVtZW50Q291bnQpKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBvbGRDb3VudGRvd24sIG5ld0Nv
dW50ZG93bik7CisgICAgYXBwZW5kKFN1YjMyLCBBcmc6OmltbShkZWNyZW1lbnRDb3VudCksIG5l
d0NvdW50ZG93bik7CisgICAgYXBwZW5kKE1vdmUzMiwgbmV3Q291bnRkb3duLCBBcmc6OmFkZHIo
Y291bnRkb3duUHRyKSk7CisKKyAgICBhdXRvKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZv
aWQpOworICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBlZmZlY3Rz
LnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgZWZmZWN0cy53cml0ZXMgPSBCMzo6
SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisKKyAgICBw
YXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHRpZXJVcCA9IGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHBhcmFtc1swXS5n
cHIoKSwgcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHRp
ZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChb
PV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICB0aWVyVXAubGluaygmaml0KTsK
KworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0cmFQYWRkaW5nQnl0ZXMgPSAwOworICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbCA9IHsgfTsKKyAgICAgICAgICAg
IHJlZ2lzdGVyc1RvU3BpbGwuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24g
PSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNh
bGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBleHRyYVBhZGRpbmdCeXRlcyk7CisKKyAgICAgICAg
ICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9mdW5jdGlvbkluZGV4
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVy
c1RvU3BpbGwsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOworICAgICAgICAgICAgaml0Lmp1bXAo
dGllclVwUmVzdW1lKTsKKworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8Tm9QdHJUYWc+KGNhbGwp
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNo
LCBUbXAoKSwgbmV3Q291bnRkb3duLCBvbGRDb3VudGRvd24pOworfQorCitBaXJJUkdlbmVyYXRv
cjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpCit7
CisgICAgQmFzaWNCbG9jayogYm9keSA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKEp1bXAp
OworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkpOworCisgICAgbV9jdXJy
ZW50QmxvY2sgPSBib2R5OworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6bG9vcERl
Y3JlbWVudCgpLCBvcmlnaW4oKSk7CisKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBv
cmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6TG9v
cCwgY29udGludWF0aW9uLCBib2R5KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRh
IEFpcklSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1
cm4gQ29udHJvbERhdGEobV9wcm9jLCBPcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNp
Z25hdHVyZSksIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fcHJvYy5hZGRCbG9jaygpKTsKK30KKwor
QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBl
IHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwg
c2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6QmxvY2ssIG1fcHJv
Yy5hZGRCbG9jaygpKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAKKyAgICAv
LyBPT1BTOiBUaGlzIHNvcnQgb2YgY2FsbHMgZm9yIGEgVHlwZWRUbXAuIEJlY2F1c2UgaWYgd2Ug
YWxsb3cgYSAzMi1iaXQKKyAgICAvLyB2YWx1ZSB0byBoYXZlIGFueSB1cHBlciBiaXRzLCB0aGVu
IEJyYW5jaFRlc3Q2NCBhaW50IHJpZ2h0Li4uLgorICAgIGFwcGVuZChCcmFuY2hUZXN0NjQsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90WmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9u
KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YWtlbiwgbm90VGFrZW4pOwor
CisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YSht
X3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tU
eXBlOjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5
VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YS5yZXN1bHQpOworICAgIGFwcGVuZChK
dW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlv
bik7CisgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6Oklm
KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKKyAgICBkYXRhLmNvbnZlcnRJ
ZlRvQmxvY2soKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBy
ZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocmV0dXJuVmFsdWVz
LnNpemUoKSA8PSAxKTsKKyAgICBpZiAocmV0dXJuVmFsdWVzLnNpemUoKSkgeworICAgICAgICBU
bXAgcmV0dXJuVmFsdWVHUFIgPSBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBUbXAgcmV0dXJuVmFsdWVGUFIgPSBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAg
ICAgICBzd2l0Y2ggKGRhdGEuc2lnbmF0dXJlKCkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjppMzI6
CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXQzMiwgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6aTY0OgorICAgICAgICAgICAgYXBwZW5k
KE1vdmUsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYXBw
ZW5kKFJldDY0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlOjpmMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCByZXR1cm5WYWx1
ZXNbMF0sIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0
dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6ZjY0
OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHJldHVyblZhbHVlc1swXSwgcmV0dXJu
VmFsdWVGUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhcHBl
bmQoUmV0Vm9pZCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0Rm9yQnJhbmNo
KCkpOworCisgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5j
aCgpOworICAgIGlmIChjb25kaXRpb24pIHsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0
aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbik7CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQp
LCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisgICAgICAgIHRhcmdldC0+YWRkUHJl
ZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBjb250aW51YXRpb24tPmFkZFByZWRl
Y2Vzc29yKG1fY3VycmVudEJsb2NrKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51
YXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sodGFyZ2V0
KSk7CisgICAgICAgIHRhcmdldC0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAg
IH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFN3aXRj
aChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0
YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3Qm
IGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxv
Y2soZXhwcmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHRGb3JCcmFuY2goKSk7CisgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0LnJlc3Vs
dEZvckJyYW5jaCgpKTsKKworICAgIFN3aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8U3dpdGNoVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGNvbmRpdGlv
bik7CisgICAgc3dpdGNoVmFsdWUtPnNldEZhbGxUaHJvdWdoKEZyZXF1ZW50ZWRCbG9jayhkZWZh
dWx0VGFyZ2V0LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRD
YXNlKFN3aXRjaENhc2UoaSwgRnJlcXVlbnRlZEJsb2NrKHRhcmdldHNbaV0tPnRhcmdldEJsb2Nr
Rm9yQnJhbmNoKCkpKSk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJh
dG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVz
c2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBl
bnRyeS5jb250cm9sRGF0YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25T
dGFjaywgZGF0YS5yZXN1bHQpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9j
ay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisKKyAgICByZXR1cm4gYWRkRW5k
VG9VbnJlYWNoYWJsZShlbnRyeSk7Cit9CisKKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5k
VG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBtX2N1cnJlbnRC
bG9jayA9IGRhdGEuY29udGludWF0aW9uOworCisgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2Nr
VHlwZTo6SWYpIHsKKyAgICAgICAgYXBwZW5kKGRhdGEuc3BlY2lhbCwgSnVtcCk7CisgICAgICAg
IGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhtX2N1cnJlbnRCbG9jayk7CisgICAgfQorCisg
ICAgZm9yIChUbXAgcmVzdWx0IDogZGF0YS5yZXN1bHQpCisgICAgICAgIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworCisgICAgLy8gVG9wTGV2ZWwgZG9lcyBu
b3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVt
aXQgYSByZXR1cm4gaGVyZS4KKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BM
ZXZlbCkKKyAgICAgICAgcmV0dXJuIGFkZFJldHVybihkYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJl
c3Npb25TdGFjayk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKKworICAgIFR5
cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzOworCisgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CisgICAgICAgIG1fbWF4TnVtSlND
YWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19j
YXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOworCisgICAgICAgIC8vIEZJWE1FIGltcG9ydHMg
Y2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBi
ZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRp
b24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYy
CisgICAgICAgIFRtcCB0YXJnZXRJbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3Rh
bmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5z
dGFuY2UoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgLy8gVGhlIHRhcmdldCBpbnN0YW5jZSBp
cyAwIHVubGVzcyB0aGUgY2FsbCBpcyB3YXNtLT53YXNtLgorICAgICAgICBUbXAgaXNXYXNtQ2Fs
bCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9y
aWdpbigpLCB0YXJnZXRJbnN0YW5jZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIDApKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBpc1dh
c21CbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBpc0VtYmVk
ZGVyQmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2Fs
bCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRk
ZXJCbG9jaykpOworCisgICAgICAgIFRtcCB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxs
IHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhl
IGluc3RhbmNlLgorICAgICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUg
d2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcu
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgp
LnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgICAgICAgICAgICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9u
SW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2Fs
bCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4
IH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICBVcHNpbG9uVmFsdWUqIHdhc21DYWxsUmVzdWx0VXBzaWxvbiA9
IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc1dhc21CbG9jay0+YXBwZW5kTmV3PFVw
c2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgd2FzbUNhbGxSZXN1bHQpOworICAgICAgICBp
c1dhc21CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCks
IGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgLy8gRklYTUU6IExldCdzIHJlbW92ZSB0aGlzIGlu
ZGlyZWN0aW9uIGJ5IGNyZWF0aW5nIGEgUElDIGZyaWVuZGx5IElDCisgICAgICAgIC8vIGZvciBj
YWxscyBvdXQgdG8gdGhlIGVtYmVkZGVyLiBUaGlzIHNob3VsZG4ndCBiZSB0aGF0IGhhcmQgdG8g
ZG8uIFdlIGNvdWxkIHByb2JhYmx5CisgICAgICAgIC8vIGltcGxlbWVudCB0aGUgSUMgdG8gYmUg
b3ZlciBDb250ZXh0Ki4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDM3NQorICAgICAgICBUbXAganVtcERlc3RpbmF0aW9uID0gaXNFbWJlZGRl
ckJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKKyAgICAgICAgICAgIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMy
X3Q+KEluc3RhbmNlOjpvZmZzZXRPZldhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSkp
OworICAgICAgICBpZiAoT3B0aW9uczo6dXNlUG9pc29uaW5nKCkpCisgICAgICAgICAgICBqdW1w
RGVzdGluYXRpb24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
aXRYb3IsIG9yaWdpbigpLCBqdW1wRGVzdGluYXRpb24sIGlzRW1iZWRkZXJCbG9jay0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ19KSVRDb2RlUG9pc29uKSk7CisK
KyAgICAgICAgVG1wIGVtYmVkZGVyQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigp
LnNldHVwQ2FsbChtX3Byb2MsIGlzRW1iZWRkZXJCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNU
eXBlKHJldHVyblR5cGUpLAorICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQpIHsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5l
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGp1bXBEZXN0aW5h
dGlvbiwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdo
dCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICAgICAgICAvLyBXZSBwZXNzaW1p
c3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMg
Ym91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcyMTgxCisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVn
aXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAg
ICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGVdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3Jl
dHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBVcHNpbG9uVmFsdWUqIGVt
YmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24gPSByZXR1cm5UeXBlID09IFZvaWQgPyBudWxscHRyIDog
aXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBlbWJlZGRlckNhbGxSZXN1bHQpOworICAgICAgICBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOworCisg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgICAgIGlmIChyZXR1
cm5UeXBlID09IFZvaWQpCisgICAgICAgICAgICByZXN1bHQgPSBudWxscHRyOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFBoaSwgdG9CM1R5cGUocmV0dXJuVHlwZSksIG9yaWdpbigpKTsKKyAgICAgICAg
ICAgIHdhc21DYWxsUmVzdWx0VXBzaWxvbi0+c2V0UGhpKHJlc3VsdCk7CisgICAgICAgICAgICBl
bWJlZGRlckNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5
IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCisgICAg
ICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBjb250aW51YXRp
b24pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlv
bigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9C
M1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlu
bmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlu
bmVkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNt
RW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEV4cHJlc3Np
b25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOworICAgIEFTU0VSVChzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKworICAgIG1fbWFrZXNDYWxscyA9
IHRydWU7CisgICAgLy8gTm90ZTogY2FsbCBpbmRpcmVjdCBjYW4gY2FsbCBlaXRoZXIgV2ViQXNz
ZW1ibHlGdW5jdGlvbiBvciBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi4gQmVjYXVzZQorICAg
IC8vIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIGlzIGxpa2UgY2FsbGluZyBpbnRvIHRoZSBl
bWJlZGRlciwgd2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIGFsbCBjYWxsIGluZGlyZWN0cworICAg
IC8vIGNhbiBiZSB0byB0aGUgZW1iZWRkZXIgZm9yIG91ciBzdGFjayBjaGVjayBjYWxjdWxhdGlv
bi4KKyAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxs
QXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKKworICAgIEV4
cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUg
aW5zdGFuY2VzQnVmZmVyOworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZm
ZXJMZW5ndGg7CisgICAgRXhwcmVzc2lvblR5cGUgbWFzazsKKyAgICB7CisgICAgICAgIEV4cHJl
c3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIGluc3Rh
bmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSkp
OworICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwK
KyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihUYWJsZTo6b2Zmc2V0T2ZGdW5j
dGlvbnMoKSkpOworICAgICAgICBpbnN0YW5jZXNCdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxlOjpvZmZzZXRPZklu
c3RhbmNlcygpKSk7CisgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGggPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBv
cmlnaW4oKSwKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihUYWJsZTo6b2Zm
c2V0T2ZMZW5ndGgoKSkpOworICAgICAgICBtYXNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxlOjpvZmZz
ZXRPZk1hc2soKSkpKTsKKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxv
b2tpbmcgZm9yIGlzIHZhbGlkLgorICAgIHsKKyAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBBYm92ZUVxdWFsLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgsIGNhbGxhYmxlRnVuY3Rpb25CdWZm
ZXJMZW5ndGgpKTsKKworICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc0NhbGxJbmRpcmVjdCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGNhbGxlZUluZGV4
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdp
bigpLCBjYWxsZWVJbmRleCk7CisKKyAgICBpZiAoT3B0aW9uczo6ZW5hYmxlU3BlY3RyZU1pdGln
YXRpb25zKCkpCisgICAgICAgIGNhbGxlZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLCBtYXNrLCBjYWxsZWVJbmRleCk7CisK
KyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uOworICAgIHsKKyAgICAgICAgLy8g
Q29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2lu
ZyBmb3IuCisgICAgICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIGNhbGxl
ZUluZGV4LCBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbikpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlciwgb2Zmc2V0KTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBB
biAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVk
LgorICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBq
dXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMg
MC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAorICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpzaWdu
YXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVzIGk2
NCIpOworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9y
aWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkpKTsKKyAgICAgICAgewor
ICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAorICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAor
ICAgICAgICAgICAgICAgICAgICBjYWxsZWVTaWduYXR1cmVJbmRleCwKKyAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4KSkpOworCisgICAgICAgICAgICBjaGVjay0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0
aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhl
IHZhbHVlIHdlIGV4cGVjdC4KKyAgICAgICAgeworICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUg
ZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZSkpOworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAorICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWws
IG9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkp
OworCisgICAgICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6QmFkU2lnbmF0
dXJlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRG8gYSBj
b250ZXh0IHN3aXRjaCBpZiBuZWVkZWQuCisgICAgeworICAgICAgICBUbXAgb2Zmc2V0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdpbigpLAorICAg
ICAgICAgICAgY2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihJbnN0
YW5jZSopKSk7CisgICAgICAgIFRtcCBuZXdDb250ZXh0SW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBBZGQsIG9yaWdpbigpLCBpbnN0YW5jZXNCdWZmZXIsIG9mZnNldCkpOworCisgICAgICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBC
YXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX3Byb2MuYWRkQmxvY2soKTsKKworICAgICAg
ICBUbXAgaXNTYW1lQ29udGV4dEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksCisgICAgICAgICAgICBuZXdDb250ZXh0SW5z
dGFuY2UsIGluc3RhbmNlVmFsdWUoKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwKKyAgICAgICAgICAg
IGlzU2FtZUNvbnRleHRJbnN0YW5jZSwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbiksIEZy
ZXF1ZW50ZWRCbG9jayhkb0NvbnRleHRTd2l0Y2gpKTsKKworICAgICAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBkb0NvbnRleHRTd2l0Y2gtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdpbigpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkg
YXNzdW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdpdGggQm91bmRzQ2hlY2tpbmcgbWVtb3J5
LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KG5ld0NvbnRleHRJbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBh
dGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Cisg
ICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0gcGFyYW1zWzBdLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1sxXS5ncHIoKTsK
KyAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5
ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIEFTU0VSVChuZXdD
b250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkg
c2l6ZSByZWdpc3RlcgorICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5z
aXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBd
LnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6
ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1v
cnk6OnZvaWQqLgorICAgICAgICB9KTsKKyAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKKwor
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBFeHBy
ZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKKyAgICAgICAgICAgIHNhZmVDYXN0
PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2lu
dExvYWRMb2NhdGlvbigpKSkpOworICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25pbmcoKSkKKyAg
ICAgICAgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQml0WG9yLCBvcmlnaW4oKSwgY2FsbGVlQ29kZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGdfSklUQ29kZVBvaXNvbikpOworCisg
ICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICByZXN1bHQg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9j
aywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAorICAgICAgICBbPV0gKFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgeworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIg
YWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcg
dGhlIGluc3RhbmNlLgorICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3
ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcgc28K
KyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHdhc20tPndhc20gdGh1bmsgdW5jb25kaXRpb25h
bGx5IG92ZXJyaWRlcyB0aGUgc2l6ZSByZWdpc3RlcnMuCisgICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHViIGFz
c3VtZXMgaXQgY2FuCisgICAgICAgICAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJz
IGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIx
ODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9p
ZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKworICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdl
YkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1v
cnkuCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIG1fY3Vy
cmVudEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6
OnVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291
cmNlKQoreworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBzb3VyY2UsIHBoaSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnVu
aWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29u
c3QgUmVzdWx0TGlzdCYgcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJl
c3VsdFN0YWNrLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5z
aXplKCk7ICsraSkKKyAgICAgICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0s
IHJlc3VsdFN0YWNrW3Jlc3VsdFN0YWNrLnNpemUoKSAtIDEgLSBpXSk7Cit9CisKK3N0YXRpYyB2
b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3Qg
QWlySVJHZW5lcmF0b3I6OkV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCit7CisgICAg
ZGF0YUxvZyhjb21tYSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGRhdGFMb2coY29tbWEsICpl
eHByZXNzaW9uKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8
Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVz
c2lvblN0YWNrKQoreworICAgIC8vIE9PUFMhCisgICAgLyoKKyAgICBkYXRhTG9nTG4oIlByb2Nl
c3NpbmcgR3JhcGg6Iik7CisgICAgZGF0YUxvZyhtX2NvZGUpOworICAgIGRhdGFMb2dMbigiV2l0
aCBjdXJyZW50IGJsb2NrOiIsICptX2N1cnJlbnRCbG9jayk7CisgICAgZGF0YUxvZ0xuKCJDb250
cm9sIHN0YWNrOiIpOworICAgIEFTU0VSVChjb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gY29udHJvbFN0YWNrLnNpemUoKTsgaS0tOykgeworICAgICAgICBkYXRhTG9n
KCIgICIsIGNvbnRyb2xTdGFja1tpXS5jb250cm9sRGF0YSwgIjogIik7CisgICAgICAgIENvbW1h
UHJpbnRlciBjb21tYSgiLCAiLCAiIik7CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29t
bWEsICpleHByZXNzaW9uU3RhY2spOworICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29udHJv
bFN0YWNrW2ldLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBkYXRhTG9nTG4oKTsK
KyAgICB9CisgICAgZGF0YUxvZ0xuKCk7CisgICAgKi8KK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6b3JpZ2luKCkgLT4gT3JpZ2luCit7CisgICAgT3Bjb2RlT3JpZ2luIG9yaWdpbihtX3BhcnNl
ci0+Y3VycmVudE9wY29kZSgpLCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0
KCkpOworICAgIEFTU0VSVChpc1ZhbGlkT3BUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG9yaWdp
bi5vcGNvZGUoKSkpKTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsK
K30KKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRo
cm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8
SW50ZXJuYWxGdW5jdGlvbj4oKTsKKworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVu
dHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21w
aWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxs
SGVscGVycz4oKTsKKworICAgIEIzOjpQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIENvZGUmIGNv
ZGUgPSBwcm9jZWR1cmUuY29kZSgpOworCisgICAgcHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIo
W10gKFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdp
bi5kYXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxP
cGNvZGVPcmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMgbWVhbnMg
d2UgY2Fubm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0
ZXJzKCkgb3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAgLy8gZG9u
J3Qgc3RyaWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCksIHdoaWNo
IHNhdmVzIGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAgICAvLyBP
T1BTOiBEbyB3ZSBuZWVkIHRoaXM/IFNob3VsZCB3ZSBqdXN0IHNldCBpdCBkaXJlY3RseSBvbiBD
b2RlPworICAgIHByb2NlZHVyZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFsc2UpOworICAgIAor
ICAgIHByb2NlZHVyZS5zZXRPcHRMZXZlbChjb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlCisgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRp
b25MZXZlbCgpCisgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25M
ZXZlbCgpKTsKKworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVy
ZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRp
b25Nb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAg
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CisKKworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvcnMoKSkKKyAgICAgICAgICAgIHN1Y2Nlc3Nvci0+YWRkUHJlZGVjZXNz
b3IoYmxvY2spOworICAgIH0KKyAgICAvLyBPT1BTOiBWYWxpZGF0ZSAnY29kZScgaGVyZSEKKyAg
ICAKKyAgICB7CisgICAgICAgIEFpcjo6Z2VuZXJhdGUocHJvYy5jb2RlKCksICpjb21waWxhdGlv
bkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7
CisgICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5j
YWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RG
TW92ZShyZXN1bHQpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9k
T3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0KQoreworICAgIEFTU0VSVChvcGVyYXRpb24gPT0gRGl2IHx8IG9wZXJhdGlv
biA9PSBNb2QgfHwgb3BlcmF0aW9uID09IFVEaXYgfHwgb3BlcmF0aW9uID09IFVNb2QpOworICAg
IGNvbnN0IEIzOjpUeXBlIHR5cGUgPSBsZWZ0LT50eXBlKCk7CisKKyAgICB7CisgICAgICAgIGVt
aXRDaGVjayhbJl0geworICAgICAgICAgICAgS2luZCBvcCA9IGlzNjRCaXRPcChvcGVyYXRpb24p
ID8gQnJhbmNoVGVzdDY0IDogQnJhbmNoVGVzdDMyOworICAgICAgICAgICAgYXBwZW5kKG9wLCBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCByaWdodCwgcmlnaHQpOworICAgICAg
ICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhj
ZXB0aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBp
ZiAob3BlcmF0aW9uID09IERpdikgeworICAgICAgICBpbnQ2NF90IG1pbiA9IHR5cGUgPT0gSW50
MzIgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSA6IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50NjRfdD46Om1pbigpOworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAg
ICAgIC8vIE9PUFM6IFRyeSB0byBlbWl0IG5pY2UgY29tcGFyZSB3LyBpbW1zLgorICAgICAgICAg
ICAgVG1wIG1pblRtcCA9IGdwcigpOworICAgICAgICAgICAgVG1wIG5lZ09uZSA9IGdwcigpOwor
CisgICAgICAgICAgICBLaW5kIG9wID0gaXM2NEJpdE9wKG9wZXJhdGlvbikgPyBDb21wYXJlNjQg
OiBDb21wYXJlMzI7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0obWluKSwg
bWluVG1wKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCksIGxlZnQsIG1pblRtcCwgbWluVG1wKTsKKyAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmltbSgtMSksIG5lZ09uZSk7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdodCwgbmVnT25lLCBuZWdPbmUpOwor
ICAgICAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb3RaZXJvKSwgbWluVG1wLCBuZWdPbmUpOworICAgICAgICB9LAorICAgICAgICBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6SW50ZWdlck92ZXJmbG93KTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCisvLyBPT1BTOiBJ
bXBsZW1lbnQgdGhlc2UgZGl2IG9wcyEhIQordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9u
VHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2
KG9wLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgY29uc3QgQjM6Ok9w
Y29kZSBvcCA9IE1vZDsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0
KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+
KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9
IFVEaXY7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAg
cmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7CisgICAgZW1p
dENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JE
aXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6
T3Bjb2RlIG9wID0gTW9kOworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmln
aHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2
VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9w
ID0gVURpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAgICBl
bWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwg
cmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMyKHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRD
dHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQoQjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291
bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAg
IH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3Vw
cG9ydHNDb3VudFBvcHVsYXRpb24oKSkgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBv
aW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisjZW5kaWYKKworICAgIHVpbnQzMl90ICgqcG9wY291bnQpKGludDMyX3QpID0gW10gKGludDMy
X3QgdmFsdWUpIC0+IHVpbnQzMl90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh2YWx1ZSk7
IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BVKFg4Nl82NCkK
KyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKKyAg
ICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50
NjQpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
ICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGppdC5j
b3VudFBvcHVsYXRpb242NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAg
ICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRfdCAoKnBv
cGNvdW50KShpbnQ2NF90KSA9IFtdIChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7IHJldHVy
biBfX2J1aWx0aW5fcG9wY291bnRsbCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50
LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBpZiAoaXNYODYoKSkKKyAg
ICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQu
Y29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpLCBw
YXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9E
b3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7
CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVz
dWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQor
ICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworI2lmIENQVShYODZfNjQpCisgICAgICAgIGpp
dC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwg
cGFyYW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRv
RmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7
CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVz
dWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RG91Ymxl
KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQg
PSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBhcmFtc1sxXS5mcHIo
KSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRU
cnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQu
cm91bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsK
KyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBv
aW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsK
KyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxv
YXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAg
ICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAg
ICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2
NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1p
bigpKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVy
RXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91
bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBv
dXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7Cisg
ICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91
YmxlVG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGlt
cGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2lu
KCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBHcmVhdGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91
bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3Jp
Z2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUq
IHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hl
Y2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZC
b3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIs
IG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
aml0LnRydW5jYXRlRmxvYXRUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwor
ICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCisK
K3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNV
RjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFT
SCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNv
bnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBUbXAg
bWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKyAg
ICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdp
bigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFu
dChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0
aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50
LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsK
KyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0
cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhp
cyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAgICBUbXAgbWluID0gY29u
c3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0x
LjApKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJU
aGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5k
cywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0
T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRU
aHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAg
IH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0
VG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0
Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBi
b29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBs
ZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0
d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmln
aW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZC
b3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBv
cmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1
ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBD
aGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2
NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5j
VUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JB
U0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29u
c3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAg
IFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2lu
KCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50
KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsK
KyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRp
b24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAg
IFRtcCBzaWduQml0Q29uc3RhbnQ7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2lu
Y2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBv
aW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFy
dCB0aGluZyBpZgorICAgICAgICAvLyB0aGUgbnVtYmVycyBhcmUgd291bGQgYmUgcG9zaXRpdmUg
YW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBj
b25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2Fu
IHBvb2wgdGhlbSBpZiBuZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGNvbnN0YW50
KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
NjRfdD46Om1heCgpKSkpOworICAgIH0KKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2
NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChzaWduQml0Q29uc3RhbnQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRj
aHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFs
aWRGUFJSZWc7CisgICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7CisgICAg
ICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBzY3JhdGNoID0gcGFyYW1zLmZwU2NyYXRj
aCgwKTsKKyAgICAgICAgICAgIGNvbnN0YW50ID0gcGFyYW1zWzJdLmZwcigpOworICAgICAgICB9
CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFy
YW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50Owor
ICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRy
dWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IEltcGxlbWVudCB0aGlz
IQorICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWlu
dDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWlu
dDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+Ojpt
aW4oKSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCks
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRl
ckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJv
dW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwg
b3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVt
aXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwor
ICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7Cisg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZs
b2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGlt
cGxlbWVudCB0aGlzCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50NjRfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcs
IG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91
dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0YW50OworICAgIGlmIChpc1g4Nigp
KSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8g
Y29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0
IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIG51bWJlcnMgd291
bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5v
dCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAg
ICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25z
dGFudCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0
PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsKKyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+
KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNj
cmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlk
RlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBh
cmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIo
KTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sx
XS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKworUGFydGlhbFJlc3VsdCBB
aXJJUkdlbmVyYXRvcjo6YWRkU2hpZnQoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
RXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0oa2luZCwgQXJnOjpUbXAsIEFyZzo6
VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIHZhbHVlLCBzaGlmdCwgcmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgCisgICAgYXBwZW5kKE1vdmUs
IHZhbHVlLCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlLCBzaGlmdCwgbV9lY3gpOworICAgIGFw
cGVuZChraW5kLCBtX2VjeCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0aWFs
UmVzdWx0IEFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3ViKEtpbmQga2luZCwgRXhwcmVzc2lv
blR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0oa2luZCwgQXJnOjpU
bXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIGxocywgcmhz
LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0g
YiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKGtpbmQs
IHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0aWFsUmVzdWx0IEFpcklS
R2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QWJzKEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2lu
ZCA9PSBBYnNGbG9hdCB8fCBraW5kID09IEFic0RvdWJsZSk7CisKKyAgICByZXN1bHQgPSBmcHIo
KTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7Cisg
ICAgICAgIGFwcGVuZChraW5kLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKworICAgIFRtcCBjb25zdGFu
dCA9IGdwcigpOworICAgIGlmIChraW5kID09IEFic0Zsb2F0KSB7CisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmltbSh+KDEgPDwgMzEpKSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoTW92
ZTMyVG9GbG9hdCwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChBbmRGbG9hdCwg
dmFsdWUsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YmlnSW1tKH4oMSA8PCA2MykpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0Rv
dWJsZSwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChBbmREb3VibGUsIHZhbHVl
LCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0aWFsUmVzdWx0IEFp
cklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QmluT3AoS2luZCBraW5kLCBFeHByZXNzaW9u
VHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBBcmc6OlRt
cCwgQXJnOjpUbXAsIEFyZ3M6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIGxocywgcmhz
LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUKGlzWDg2KCkpOworCisgICAgLy8gT3AgYSwgYgorICAgIC8vIG1lYW5zCisgICAgLy8gYiA9
IGIgT3AgYQorICAgIC8vIE9PUFM6IHZlcmlmeQorICAgIGFwcGVuZChNb3ZlRG91YmxlLCBsaHMs
IHJlc3VsdCk7CisgICAgYXBwZW5kKGtpbmQsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
Q2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDZWlsRmxvYXQs
IGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TGU+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhh
bk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEZW1vdGVGNjQ+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydERvdWJsZVRv
RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk1pbj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNF
cXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVxdWFsID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAg
bV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAg
YXBwZW5kKGlzRXF1YWwsIE9yRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5k
KGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9u
KTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vz
c29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAgICBhcHBlbmQoZ3Jl
YXRlclRoYW5PckVxdWFsLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGdy
ZWF0ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjY0THQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMk1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigp
OworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJh
c2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
bGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJh
bmNoRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcw
LCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RF
cXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgQW5kRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3Nv
cnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZUZsb2F0LCBhcmcw
LCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRmxvYXQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RF
cXVhbC0+c2V0U3VjY2Vzc29ycyhsZXNzVGhhbiwgY29udGludWF0aW9uKTsKKworICAgIGFwcGVu
ZChsZXNzVGhhbiwgTW92ZUZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhh
biwgSnVtcCk7CisgICAgbGVzc1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKwor
ICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE11bD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50
QmluT3AoTXVsRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChEaXZGbG9hdCwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMkNsej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb3VudExlYWRpbmdaZXJvczMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdl
IGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFu
ZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcDEgPSBncHIo
KTsKKyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2YWx1ZSA9IGdwcigpOworCisgICAg
Ly8gT09QUzogQ2FuIGZpdCBpbiBJbW0vQml0SW1tIGluc3RlYWQgb2YgQmlnSW1tPworICAgIGFw
cGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YmlnSW1tKDB4ODAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5kMzIsIHRlbXAxLCBzaWdu
LCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVu
ZChBbmQzMiwgdGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3IzMiwgc2lnbiwg
dmFsdWUsIHZhbHVlKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdmFsdWUsIHJlc3VsdCk7
CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBUbXAgdGVtcCA9IHRtcCgpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHRlbXAp
OworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyUmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QW5k
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKEFuZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1
YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHdD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3FydD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NEdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0R3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0
VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcXo+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjREaXY+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiB3aGF0IGFib3V0IGNoaWxsLW5l
c3MgaGVyZS4uLj8KKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKERpdkRvdWJsZSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMkFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChBZGRGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0T3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3I2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyTGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJM
ZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE5lPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NENsej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczY0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJOZWc+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
TmVnYXRlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFuZD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBbmQz
MiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRVPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUz
MiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4gYWRkU2hpZnQoUm90YXRlUmlnaHQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFicz4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0RvdWJsZSwgYXJnMCwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9y
IHRoZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRt
cCB2YWx1ZSA9IGdwcigpOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcxLCB0ZW1w
MSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAwMDAwMDAwMDAwMCksIHNp
Z24pOworICAgIGFwcGVuZChBbmQ2NCwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5k
KE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6Ymln
SW1tKDB4N2ZmZmZmZmZmZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAx
LCB2YWx1ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9yNjQsIHNpZ24sIHZhbHVlLCB2YWx1ZSk7
CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsKKworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVu
ZChDb252ZXJ0SW50NjRUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3Rs
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0
ZUxlZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkx0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
TGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkdl
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJT
aHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFVy
c2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTMyPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSB0bXAoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBh
cmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9GbG9hdCwgdGVtcCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyU2hyUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiBhZGRTaGlmdChSc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkdlVT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChDb21wYXJlMzIsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NENlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ2VpbERv
dWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRG
bG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChGbG9vckRvdWJs
ZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjMyLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRk
RmxvYXRpbmdQb2ludEFicyhBYnNGbG9hdCwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1pbj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayog
aXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVxdWFsID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKwor
ICAgIGFwcGVuZChpc0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBh
cHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcwLCByZXN1bHQp
OworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNl
dFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwpOworCisgICAgYXBw
ZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwgcmVzdWx0KTsKKyAgICBh
cHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwt
PnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29u
dGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxGbG9hdCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJS
ZWludGVycHJldEYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChN
b3ZlRmxvYXRUbzMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBZGQ+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQWRk
MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFN1Yj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTdWJEb3Vi
bGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk9yPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE9yMzIsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0VT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29u
dmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVy
dEludDY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFhvcj4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChY
b3I2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VVPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTXVsNjQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTdWJGbG9hdCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UHJvbW90ZUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RmxvYXRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0QWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0R2VTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRFeHRlbmRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTmU+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFy
ZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UmVpbnRlcnByZXRJNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29yPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEZsb29yRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMkNvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7Cisg
ICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0MzIs
IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFJlaW50ZXJwcmV0RjY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNo
aWZ0KFJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyVT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRTcXJ0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRE
b3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNobD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQ2NCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MldyYXBJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMy
LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZUxlZnQzMiwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRk
U2hpZnQoUm90YXRlUmlnaHQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0VT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
MzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCBhcmcwLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVnPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE5lZ2F0ZURvdWJsZSwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBw
ZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0
U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgQW5k
RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsK
KyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQo
bm90RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFs
LCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1Ro
YW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhsZXNzVGhhbiwg
Y29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChsZXNzVGhhbiwgTW92ZURvdWJsZSwgYXJnMSwg
cmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAgIGxlc3NUaGFuLT5zZXRT
dWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVh
dGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NExlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
QWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKEFkZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MzgsNyArMTgz
OCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnUKICAgICAgICAg
cGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKICAgICB9CiAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOyAvLyBPT1BTOiBUaGlzIGxvb2tzIHN1cGVy
IHdyb25nIGdpdmVuIHdlIGRvbid0IHNheSB3ZSBjbG9iYmVyIHRoaXMhCiAgICAgICAgIEZQUlJl
ZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKICAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52
YWxpZEZQUlJlZzsKICAgICAgICAgaWYgKGlzWDg2KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkocmV2aXNp
b24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMzYgQEAgY29uc3QgV2FzbUNh
bGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZwogICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGlu
Z0NvbnZlbnRpb247CiB9CiAKK2NvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyJiBqc2NDYWxs
aW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxKU0ND
YWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZzsKKyAgICBz
dGQ6OmNhbGxfb25jZShzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAg
ICAgICAgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb24uY29uc3RydWN0KFZlY3RvcjxSZWc+KCks
IFZlY3RvcjxSZWc+KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAg
IH0pOworCisgICAgcmV0dXJuIHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uOworfQorCitjb25z
dCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpCit7
CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXI+
IHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
c3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0
aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnLCBbXSAoKSB7CisgICAgICAgIFZlY3RvcjxSZWc+
IGdwckFyZ3VtZW50UmVnaXN0ZXJzKEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1
bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAgICAgICAgZ3ByQXJndW1lbnRSZWdpc3RlcnNbaV0g
PSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisKKyAgICAgICAgVmVjdG9yPFJlZz4g
ZnByQXJndW1lbnRSZWdpc3RlcnMoRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZkFyZ3Vt
ZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBmcHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9
IEZQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKworICAgICAgICBzdGF0aWNXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uY29uc3RydWN0KFdURk1vdmUoZ3ByQXJndW1lbnRSZWdpc3RlcnMpLCBX
VEZNb3ZlKGZwckFyZ3VtZW50UmVnaXN0ZXJzKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50
aW9uOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
MjcgKzQ0LDI3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLXR5cGVk
ZWYgdW5zaWduZWQgKCpOZXh0T2Zmc2V0KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlw
ZSB0eXBlKTsKK3R5cGVkZWYgdW5zaWduZWQgKCpOZXh0T2Zmc2V0KSh1bnNpZ25lZCBjdXJyZW50
T2Zmc2V0KTsKIAogdGVtcGxhdGU8dW5zaWduZWQgaGVhZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRh
dGVPZmZzZXQ+CiBjbGFzcyBDYWxsaW5nQ29udmVudGlvbiB7CiBwdWJsaWM6CiAgICAgQ2FsbGlu
Z0NvbnZlbnRpb24oVmVjdG9yPFJlZz4mJiBncHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3Ms
IFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lzdGVycykKLSAgICAgICAgOiBtX2dwckFyZ3Mo
Z3ByQXJncykKLSAgICAgICAgLCBtX2ZwckFyZ3MoZnByQXJncykKLSAgICAgICAgLCBtX2NhbGxl
ZVNhdmVSZWdpc3RlcnMoY2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3Mo
V1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkK
KyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0
ZXJzKSkKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFs
bEFyZ3VtZW50SW1wbChWZWN0b3I8UmVnPiByZWdBcmdzLCBCMzo6VHlwZSB0eXBlLCBzaXplX3Qm
IGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAorICAgIEIzOjpWYWx1ZVJlcCBtYXJz
aGFsbEFyZ3VtZW50SW1wbChWZWN0b3I8UmVnPiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXpl
X3QmIHN0YWNrT2Zmc2V0KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGNvdW50IDwgcmVnQXJn
cy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gQjM6OlZhbHVlUmVwOjpyZWcocmVnQXJnc1tj
b3VudCsrXSk7CiAKICAgICAgICAgY291bnQrKzsKICAgICAgICAgQjM6OlZhbHVlUmVwIHJlc3Vs
dCA9IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09mZnNldCk7Ci0gICAgICAgIHN0
YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0LCB0eXBlKTsKKyAgICAgICAgc3Rh
Y2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIApAQCAtNzMsMTAgKzczLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRj
aCAodHlwZSkgewogICAgICAgICBjYXNlIEIzOjpJbnQzMjoKICAgICAgICAgY2FzZSBCMzo6SW50
NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCB0
eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBt
YXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZz
ZXQpOwogICAgICAgICBjYXNlIEIzOjpGbG9hdDoKICAgICAgICAgY2FzZSBCMzo6RG91YmxlOgot
ICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlwZSwg
ZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFyc2hh
bGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsK
ICAgICAgICAgY2FzZSBCMzo6Vm9pZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0xODksMTkgKzE4OSwxNDkgQEAgcHVibGljOgogICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2Fs
bGVyU2F2ZVJlZ2lzdGVyczsKIH07CiAKLWlubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0KHVu
c2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlKQordGVtcGxhdGU8dW5zaWduZWQgaGVhZGVy
U2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CitjbGFzcyBDYWxsaW5nQ29udmVudGlvbkFp
ciB7CitwdWJsaWM6CisgICAgQ2FsbGluZ0NvbnZlbnRpb25BaXIoVmVjdG9yPFJlZz4mJiBncHJB
cmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lz
dGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBt
X2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3Rl
cnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorICAgIEFpcjo6QXJnIG1hcnNoYWxsQXJndW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3Ms
IHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBBaXI6OlRt
cChyZWdBcmdzW2NvdW50KytdKTsKKworICAgICAgICBjb3VudCsrOworICAgICAgICBhdXRvIHJl
c3VsdCA9IEFpcjo6QXJnOjphZGRyKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIHN0
YWNrT2Zmc2V0KTsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZz
ZXQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEFpcjo6QXJnIG1hcnNo
YWxsQXJndW1lbnQoVHlwZSB0eXBlLCBzaXplX3QmIGdwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBm
cEFyZ3VtZW50Q291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjppMzI6CisgICAgICAgIGNhc2Ug
VHlwZTo6aTY0OgorICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3By
QXJncywgdHlwZSwgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgIGNhc2Ug
VHlwZTo6ZjMyOgorICAgICAgICBjYXNlIFR5cGU6OmY2NDoKKyAgICAgICAgICAgIHJldHVybiBt
YXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJndW1lbnRDb3VudCwgc3Rh
Y2tPZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworcHVibGljOgorICAgIHN0YXRpYyB1
bnNpZ25lZCBoZWFkZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KKyAgICB2
b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50
cnlQdHJUYWc+KiBjYWxsZWVNb3ZlTG9jYXRpb24sIEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpP
cmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3Rlcikg
PCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIp
IDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CisKKyAgICAg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBl
bmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OkludDY0LCBvcmlnaW4pOworICAg
ICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVw
OjpTb21lUmVnaXN0ZXI7CisgICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPmVmZmVjdHMgPSBC
Mzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0ID0gcGFyYW1zWzBdLmdwcigpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9jYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKmNhbGxlZU1vdmVMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBCMzo6
VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBC
Mzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOworICAgICAgICBCMzo6VmFsdWUqIG9mZnNldE9mQ2Fs
bGVlID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4sIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBibG9jay0+
YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6OlN0b3JlLCBvcmlnaW4sCisgICAg
ICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KHByb2MsIEIzOjpBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZzZXRP
ZkNhbGxlZSkpOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9y
ZSB6ZXJvIGludG8gdGhlIENvZGVCbG9jayogc3BvdCBpbiB0aGUgY2FsbCBmcmFtZSwKKyAgICAg
ICAgLy8gYnV0IHRoZXJlIGFyZSBwbGFjZXMgdGhhdCBpbnRlcnByZXQgbm9uLW51bGwgQ29kZUJs
b2NrIHNsb3QgdG8gbWVhbiBhIHZhbGlkIENvZGVCbG9jay4KKyAgICAgICAgLy8gV2hlbiBkb2lu
ZyB1bndpbmRpbmcsIHdlJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGVudGlyZSBydW50aW1l
IGlzIE9LIHdpdGggYSBub24tbnVsbAorICAgICAgICAvLyBDb2RlQmxvY2sgbm90IGltcGx5aW5n
IHRoYXQgdGhlIENvZGVCbG9jayBpcyB2YWxpZC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQorICAgICAgICBCMzo6VmFsdWUqIG9mZnNl
dE9mQ29kZUJsb2NrID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3Q2NFZhbHVlPihwcm9jLCBv
cmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikpOworICAg
ICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6OlN0b3JlLCBv
cmlnaW4sCisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHBy
b2MsIG9yaWdpbiwgMCksCisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
cHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ29kZUJsb2NrKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGxvYWRB
cmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIEIzOjpQcm9jZWR1cmUmIHByb2Ms
IEIzOjpCYXNpY0Jsb2NrKiBibG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0g
MDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBz
dGFja09mZnNldCA9IGhlYWRlclNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBmdW5jdG9yKG1h
cnNoYWxsQXJndW1lbnQoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50Q291bnQsIGZw
QXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpLCBpKTsKKyAgICB9CisKKyAgICAvLyBJdCdzIGV4
cGVjdGVkIHRoYXQgdGhlIHBhY2hwb2ludEZ1bmN0b3Igc2V0cyB0aGUgZ2VuZXJhdG9yIGZvciB0
aGUgY2FsbCBvcGVyYXRpb24uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBC
Mzo6VmFsdWUqIHNldHVwQ2FsbChCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayog
YmxvY2ssIEIzOjpPcmlnaW4gb3JpZ2luLCBjb25zdCBWZWN0b3I8QjM6OlZhbHVlKj4mIGFyZ3Vt
ZW50cywgQjM6OlR5cGUgcmV0dXJuVHlwZSwgY29uc3QgRnVuY3RvciYgcGF0Y2hwb2ludEZ1bmN0
b3IpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAg
ICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09m
ZnNldCA9IGhlYWRlclNpemUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAg
VmVjdG9yPEIzOjpDb25zdHJhaW5lZFZhbHVlPiBjb25zdHJhaW5lZEFyZ3VtZW50czsKKyAgICAg
ICAgZm9yIChCMzo6VmFsdWUqIGFyZ3VtZW50IDogYXJndW1lbnRzKSB7CisgICAgICAgICAgICBC
Mzo6VmFsdWVSZXAgcmVwID0gbWFyc2hhbGxBcmd1bWVudChhcmd1bWVudC0+dHlwZSgpLCBncEFy
Z3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAg
Y29uc3RyYWluZWRBcmd1bWVudHMuYXBwZW5kKEIzOjpDb25zdHJhaW5lZFZhbHVlKGFyZ3VtZW50
LCByZXApKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6
ZUluQnl0ZXMoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
c3RhY2tPZmZzZXQpKTsKKworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihwcm9jLCByZXR1cm5UeXBl
LCBvcmlnaW4pOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxh
dGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAgICAgICBw
YXRjaHBvaW50RnVuY3RvcihwYXRjaHBvaW50KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
VmVjdG9yKGNvbnN0cmFpbmVkQXJndW1lbnRzKTsKKworICAgICAgICBzd2l0Y2ggKHJldHVyblR5
cGUpIHsKKyAgICAgICAgY2FzZSBCMzo6Vm9pZDoKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBjYXNlIEIzOjpGbG9hdDoKKyAgICAgICAgY2FzZSBCMzo6RG91YmxlOgorICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVn
KEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEIzOjpJbnQzMjoKKyAgICAgICAgY2FzZSBCMzo6SW50NjQ6CisgICAgICAgICAgICBwYXRj
aHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHBhdGNocG9pbnQ7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9ncHJBcmdz
OworICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZnByQXJnczsKKyAgICBjb25zdCBSZWdpc3RlclNl
dCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJT
YXZlUmVnaXN0ZXJzOworfTsKKworaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWdu
ZWQgY3VycmVudE9mZnNldCkKIHsKICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNpemVvZihS
ZWdpc3Rlcik7CiB9CiAKIGNvbnN0ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0gRXhlY1N0
YXRlOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwotdHlwZWRlZiBD
YWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0NDYWxsaW5n
Q29udmVudGlvbjsKLQotdHlwZWRlZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb247CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uID0gQ2FsbGluZ0NvbnZlbnRp
b248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2FsbGluZ0NvbnZl
bnRpb24gPSBKU0NDYWxsaW5nQ29udmVudGlvbjsKIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9u
JiBqc2NDYWxsaW5nQ29udmVudGlvbigpOwogY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXIg
PSBDYWxsaW5nQ29udmVudGlvbkFpcjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3Vz
aW5nIFdhc21DYWxsaW5nQ29udmVudGlvbkFpciA9IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyOwor
Y29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9uQWlyKCk7
Citjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29udmVudGlvbkFp
cigpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360310</attachid>
            <date>2019-01-27 15:08:47 -0800</date>
            <delta_ts>2019-01-28 02:07:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>147094</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2
b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBh
Ci0gICAgICAgICAgICAgICAgLy8gdm9pZCByZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVy
ZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lkLgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1w
b3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJl
dFZvaWQKKyAgICAgICAgICAgICAgICAvLyBmb3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVk
UmVncyhBaXI6Okluc3QmKSBmaW5hbDsKICAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJl
Z3MoQWlyOjpJbnN0JikgZmluYWw7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBv
dmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUg
bWFueSBzb21lCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJh
dGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBz
dWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgK
ICAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxMTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgor
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZpcnR1YWxS
ZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUg
Ildhc21Db250ZXh0SW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisj
aW5jbHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgi
CisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21PTUdQbGFuLmgiCisjaW5j
bHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK2Ns
YXNzIEFpcklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewor
ICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIFR5cGUg
c2lnbmF0dXJlLCBUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29u
dGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDog
YmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24p
CisgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwgc2lnbmF0dXJl
KHNpZ25hdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChzaWduYXR1cmUgIT0gVHlwZTo6Vm9pZCk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChyZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZSA9PSBUeXBlOjpWb2lkKTsKKyAgICAgICAgfQor
CisgICAgICAgIENvbnRyb2xEYXRhKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6SWY6CisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJJZjogICAgICAgIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6QmxvY2s6CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJCbG9jazogICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6TG9vcDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxv
b3A6ICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxv
Y2tUeXBlOjpUb3BMZXZlbDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAi
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91
dC5wcmludCgiQ29udGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsK
KyAgICAgICAgICAgIGlmIChzcGVjaWFsKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgqc3Bl
Y2lhbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJOb25l
Iik7CisgICAgICAgIH0KKworICAgICAgICBCbG9ja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGJsb2NrVHlwZTsgfQorCisgICAgICAgIFR5cGUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4g
c2lnbmF0dXJlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3Qg
eyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAg
ICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0
SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAs
IDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRG
b3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tU
eXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHNp
Z25hdHVyZTsKKyAgICB9OworCisgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUbXA7CisgICAg
dXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKKyAgICB1c2luZyBFeHByZXNzaW9uTGlz
dCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT47CisgICAgdXNpbmcgUmVzdWx0TGlzdCBDb250
cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBh
cnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gVG1wIHsgfTsKKworICAgIHVzaW5n
IEVycm9yVHlwZSA9IFN0cmluZzsKKyAgICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBl
Y3RlZDxFcnJvclR5cGU+OworICAgIHVzaW5nIFJlc3VsdCA9IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPjsKKyAgICB1c2luZyBQYXJ0aWFsUmVz
dWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5h
bWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNlci5o
LgorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJs
eS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7Cisg
ICAgfQorCisjZGVmaW5lIFdBU01fQ09NUElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7
IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAg
fSB3aGlsZSAoMCkKKworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOworCisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQz
Ml90KTsKKworICAgIC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAv
LyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRP
cFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVp
bnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3Rv
cmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRN
ZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMK
KyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8s
IEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8g
Q29udHJvbCBmbG93CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRvcExl
dmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJl
LCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250
cm9sRGF0YSYpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0
dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVl
cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRy
b2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYg
cmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRT
d2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEq
PiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0
YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVh
Y2hhYmxlKENvbnRyb2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5k
aXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkVW5yZWFjaGFibGUoKTsKKworICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoS2luZCBr
aW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihLaW5kIGtp
bmQsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRBYnMoS2luZCBr
aW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3AoS2luZCBraW5kLCBFeHByZXNzaW9u
VHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisK
KyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywg
Y29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJz
ZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBw
YXJzZXI7IH07CisKKyAgICBUbXAgY29uc3RhbnQoQjM6OlR5cGUsIHVpbnQ2NF90IGJpdHMsIE9w
dGlvbmFsPE9yaWdpbj4gPSBXVEY6Om51bGxvcHQpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChCYXNpY0Jsb2NrKiBibG9j
aywgQWlyOjpLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAg
ICAgIC8vIE9PUFM6IEFkZCBvcmlnaW4KKyAgICAgICAgYmxvY2stPmFwcGVuZChraW5kLCBudWxs
cHRyLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQWlyOjpL
aW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFwcGVu
ZChtX2N1cnJlbnRCbG9jaywga2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRz
KS4uLik7CisgICAgfQorCisgICAgVG1wIHRtcChCYW5rIGJhbmspIHsgcmV0dXJuIG1fY29kZS5u
ZXdUbXAoYmFuayk7IH0KKyAgICBUbXAgZ3ByKCkgeyByZXR1cm4gdG1wKEdQKTsgfQorICAgIFRt
cCBmcHIoKSB7IHJldHVybiB0bXAoRlApOyB9CisgICAgVG1wIHRtcEZvclR5cGUoVHlwZSB0eXBl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMy
OgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAg
ICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAg
ICAgcmV0dXJuIGZwcigpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRt
cCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogYWRkUGF0
Y2hwb2ludChCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGQ8
QjM6OlBhdGNocG9pbnRWYWx1ZT4odHlwZSwgQjM6Ok9yaWdpbigpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEIzOjpQ
YXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAg
eworICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIHJlc3VsdCwg
c3RkOjpmb3J3YXJkPEFyZ3M+KHRoZUFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJh
c2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4u
IHRoZUFyZ3MpCisgICAgeworICAgICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwpCisgICAg
ICAgICAgICBtX3BhdGNocG9pbnRTcGVjaWFsID0gbV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtl
X3VuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkpOworCisgICAgICAgIEluc3QgaW5zdChQ
YXRjaCwgcGF0Y2gsIEFyZzo6c3BlY2lhbChtX3BhdGNocG9pbnRTcGVjaWFsKSk7CisgICAgICAg
IGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChwYXRjaC0+dHlwZSgpICE9IEIzOjpW
b2lkKTsKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYXV0byBhcmdzID0gc3RkOjptYWtlX3R1cGxlKC4uLnRoZUFyZ3Mp
OworICAgICAgICBmb3IgKFRtcCB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBV
Z2gsIHRoaXMgaXMgc3VwZXIgY3JhcHB5IHRvIGp1c3QgdXNlIG51bGxwdHIgZm9yIEIzOjpWYWx1
ZSogaGVyZS4KKyAgICAgICAgICAgIC8vIEkgdGhpbmsgdGhpcyB3aWxsIGp1c3Qgd29yaywgYnV0
IG91ciBhbHRlcm5hdGl2ZSBvcHRpb25zIGlzIHRvIGFic3RyYWN0CisgICAgICAgICAgICAvLyBv
ciByZWludmVudCBwYXJ0IG9mIFBhdGNocG9pbnRTcGVjaWFsLgorICAgICAgICAgICAgcGF0Y2gt
PmFwcGVuZChudWxscHRyLCBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF0Y2gt
PnJlc3VsdENvbnN0cmFpbnQuaXNSZWcoKSkKKyAgICAgICAgICAgIHBhdGNoLT5sYXRlQ2xvYmJl
cmVkKCkuY2xlYXIocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBwYXRjaC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAg
ICAgICAgaW5zdC5hcmdzLmFwcGVuZChncHIoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHBhdGNoLT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAgICBpbnN0LmFy
Z3MuYXBwZW5kKGZwcigpKTsKKworICAgICAgICBiYXNpY0Jsb2NrLT5hcHBlbmQoV1RGTW92ZShp
bnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5jaCwgdHlwZW5hbWUg
R2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYgZW1pdEJyYW5jaCwg
Y29uc3QgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICAvLyBXZSBmYWlsIGFs
b25nIHRoZSAidHJ1dGh5IiBlZGdlIG9mICdicmFuY2gnCisKKyAgICAgICAgQmFzaWNCbG9jayog
Y29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZh
aWxlZCA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgZW1pdEJyYW5jaCgp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGZh
aWxlZCk7CisKKyAgICAgICAgYXV0byogZmFpbGVkUGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQo
QjM6OlZvaWQpOworICAgICAgICBmYWlsZWRQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoZ2VuZXJh
dG9yKTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZmFpbGVkLCBmYWlsZWRQYXRjaHBvaW50LCBU
bXAoKSk7CisgICAgICAgIGFwcGVuZChmYWlsZWQsIE9vcHMpOworCisgICAgICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAu
Li5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKHZvaWQqIGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKKyAgICB7CisgICAgICAgIGVtaXRDQ2FsbChtX2N1cnJlbnRCbG9jaywgZnVuYywg
cmVzdWx0LCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRDQ2FsbChCYXNpY0Jsb2NrKiBibG9j
aywgdm9pZCogZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAg
SW5zdCBpbnN0KEFpcjo6Q0NhbGwsIG51bGxwdHIpOworCisgICAgICAgIFRtcCBjYWxsZWUgPSBn
cHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRhZ0NGdW5jdGlvblB0cjx2
b2lkKj4oZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAgICAgICBpbnN0LmFyZ3Mu
YXBwZW5kKGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGluc3Qu
YXJncy5hcHBlbmQocmVzdWx0KTsKKworICAgICAgICBhdXRvIGFyZ3MgPSBzdGQ6Om1ha2VfdHVw
bGUoLi4udGhlQXJncyk7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IGFyZ3MpCisgICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkpOworCisgICAgICAg
IGJsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgfQorCisgICAgc3RhdGljIE9wY29k
ZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgcmV0dXJuIE1vdmUz
MjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAg
ICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAg
ICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyAKKworICAgIHZvaWQgZW1pdFRocm93RXhj
ZXB0aW9uKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisgICAgdm9pZCBlbWl0VGll
clVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIE9yaWdpbik7CisKKyAgICBFeHByZXNz
aW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBFeHByZXNzaW9uVHlw
ZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisKKyAg
ICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlIHBoaSwgY29uc3QgRXhwcmVzc2lvblR5
cGUgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Np
b25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgc3RhY2spOworCisgICAgdm9p
ZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQpOworCisgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4g
Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKKworICAg
IHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayos
IFRtcCk7CisgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7IE5vLCBZZXMg
fTsKKyAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFRtcCBpbnN0YW5jZSwgUHJvY2Vk
dXJlJiwgQmFzaWNCbG9jayopOworCisgICAgT3JpZ2luIG9yaWdpbigpOyAvLyBPT1BTOiBXZSBu
ZWVkIHRvIG1ha2UgYW4gQWlyOjpPcmlnaW4gc2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgZnJv
bSBCMyBjb2RlLgorCisgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBtX3BhcnNl
ciB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAg
IGNvbnN0IE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsK
KyAgICBjb25zdCBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGUgeyBDb21waWxhdGlv
bk1vZGU6OkJCUU1vZGUgfTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXggeyBV
SU5UX01BWCB9OworICAgIGNvbnN0IFRpZXJVcENvdW50KiBtX3RpZXJVcCB7IG51bGxwdHIgfTsK
KworICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIENvZGUmIG1fY29kZTsKKyAgICBCYXNpY0Js
b2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RC
bG9jayB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFRtcCwgVHlwZT4+IG1fbG9j
YWxzOworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4
IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBHUFJSZWcgbV9t
ZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX21lbW9yeVNpemVH
UFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQ
UiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CisK
KyAgICBUbXAgbV9pbnN0YW5jZVZhbHVlIHsgbnVsbHB0ciB9OyAvLyBBbHdheXMgdXNlIHRoZSBh
Y2Nlc3NvciBiZWxvdyB0byBlbnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXpl
ZCB3aGVuIHVzZWQuCisgICAgYm9vbCBtX3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAg
ICBUbXAgaW5zdGFuY2VWYWx1ZSgpCisgICAgeworICAgICAgICBtX3VzZXNJbnN0YW5jZVZhbHVl
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1faW5zdGFuY2VWYWx1ZTsKKyAgICB9CisKKyAgICB1
aW50MzJfdCBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyB7IDAgfTsKKworICAgIEIzOjpQYXRjaHBv
aW50U3BlY2lhbCogbV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKK307CisKKy8vIE1l
bW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRz
LCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCitpbnQzMl90
IEFpcklSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBw
dHIsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9m
ZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWF4KCkpKSB7CisgICAgICAgIFRtcCBwcmV2aW91c1B0ciA9IHB0cjsKKyAgICAgICAgcHRy
ID0gZ3ByKCk7CisgICAgICAgIFRtcCBjb25zdGFudCA9IGdwcigpOworICAgICAgICBhcHBlbmQo
TW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoQWRk
NjQsIGNvbnN0YW50LCBwcmV2aW91c1B0ciwgcHRyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFRt
cCBhcmcpCit7CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1
ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6
c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVn
aXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShh
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OnN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAg
ICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSBy
ZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGlu
IHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJn
dW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgor
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0Y2hw
b2ludFZhbHVlPihwcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOworICAgIEVmZmVjdHMgZWZmZWN0
cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Cisg
ICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBlZmZlY3RzOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVy
U2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChp
bnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIEdQUlJlZyB3YXNt
Q29udGV4dEluc3RhbmNlR1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdw
cigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICB9KTsKK30KKworQWlySVJHZW5lcmF0
b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUg
bW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbikKKyAgICA6IG1faW5mbyhpbmZvKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBt
X2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCisgICAgLCBtX2Z1bmN0aW9uSW5kZXgo
ZnVuY3Rpb25JbmRleCkKKyAgICAsIG1fdGllclVwKHRpZXJVcCkKKyAgICAsIG1fcHJvYyhwcm9j
ZWR1cmUpCisgICAgLCBtX2NvZGUobV9wcm9jLmNvZGUoKSkKKyAgICAsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCit7CisgICAgbV9jdXJyZW50Qmxv
Y2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9jayA9IG1fY3VycmVudEJsb2Nr
OworCisgICAgLy8gRklYTUUgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGluIHJlZ2lzdGVycyBo
ZXJlIGlmIHRoZXJlJ3Mgbm8gbWVtb3J5LiBJdCBtYWtlcyB3YXNtIC0+IHdhc20gdGh1bmtzIHNp
bXBsZXIgZm9yIG5vdy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NjYyMworICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJl
Z2lzdGVySW5mbzo6Z2V0KCk7CisKKyAgICBtX21lbW9yeUJhc2VHUFIgPSBwaW5uZWRSZWdzLmJh
c2VNZW1vcnlQb2ludGVyOworICAgIG1fY29kZS5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIp
OworCisgICAgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4
dEluc3RhbmNlUG9pbnRlcjsKKyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAg
ICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisKKyAgICBp
ZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgIG1fbWVtb3J5U2l6
ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7CisgICAgICAg
IGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Mu
c2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihyZWdJbmZvLnNp
emVSZWdpc3Rlcik7CisgICAgfQorCisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICAg
ICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhj
ZXB0aW9uKTsKKworICAgIGlmIChpbmZvLm1lbW9yeSkgeworICAgICAgICBtX3Byb2Muc2V0V2Fz
bUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5u
ZWRHUFIpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgICAg
ICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQocGlubmVkR1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlubmVkR1BSKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5n
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBJbnZhbGlkR1BSUmVn
ID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpP
dXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAo
bV9tb2RlKSB7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAg
ICAgICAgICAvLyBNb3N0IG1lbW9yeSBhY2Nlc3NlcyBpbiBzaWduYWxpbmcgbW9kZSBkb24ndCBk
byBhbiBleHBsaWNpdAorICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2UgdGhl
eSBjYW4gcmVseSBvbiBmYXVsdCBoYW5kbGluZyB0byBkZXRlY3QKKyAgICAgICAgICAgIC8vIG91
dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEZhdWx0U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVk
cyB0aGUKKyAgICAgICAgICAgIC8vIHRodW5rIHRvIGV4aXN0IHNvIHRoYXQgaXQgY2FuIGp1bXAg
dG8gdGhhdCB0aHVuay4KKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0
b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQorICAgICAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21w
aWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBtX3Byb2MsIE9yaWdpbigpLCBtX2N1cnJlbnRC
bG9jayk7CisKKyAgICB7CisgICAgICAgIEIzOjpUbXAgZnJhbWVQb2ludGVyID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRlciwgT3Jp
Z2luKCkpOworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93Q2hlY2sg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
cG9pbnRlclR5cGUoKSwgT3JpZ2luKCkpOworICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBzdGFj
a092ZXJmbG93Q2hlY2s7CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+YXBwZW5kU29tZVJl
Z2lzdGVyKGZyYW1lUG9pbnRlcik7CisgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+Y2xvYmJl
cihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAoIUNv
bnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEJlY2F1c2UgV2Fz
bVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRv
ZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNp
ZGUuCisgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRS
ZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAgICAg
ICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IGZhbHNlOwor
ICAgICAgICAgICAgc3RhY2tPdmVyZmxvd0NoZWNrLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHN0YWNrT3ZlcmZsb3dDaGVjay0+cmVzdWx0Q29uc3RyYWludCA9IFZh
bHVlUmVwOjpyZWcobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGFja092ZXJmbG93Q2hlY2stPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDI7CisgICAgICAg
IHN0YWNrT3ZlcmZsb3dDaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAg
ICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3YXNtRnJhbWVTaXplID0gcGFyYW1zLnByb2MoKS5m
cmFtZVNpemUoKTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1QYXJlbnRDaGVj
a1NpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCAx
MDI0KTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhRnJhbWVTaXplID0gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RkOjptYXg8dWludDMy
X3Q+KAorICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNo
ZWNrcyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIHRlcm1pbmFsIG5vZGVzIGluIHRoZSBjYWxsCisg
ICAgICAgICAgICAgICAgLy8gdHJlZSwgKGUuZyB0aGV5IGRvbid0IG1ha2UgYW55IGNhbGxzKSBh
bmQgaGF2ZSBhIHNtYWxsIGVub3VnaCBmcmFtZSBzaXplLiBUaGlzIHdvcmtzIGJ5CisgICAgICAg
ICAgICAgICAgLy8gaGF2aW5nIGFueSBzdWNoIHRlcm1pbmFsIG5vZGUgaGF2ZSBpdHMgcGFyZW50
IGNhbGxlciBpbmNsdWRlIHNvbWUgZXh0cmEgc2l6ZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAv
LyBvd24gY2hlY2sgZm9yIGl0LiBUaGUgZ29hbCBoZXJlIGlzIHR3b2ZvbGQ6CisgICAgICAgICAg
ICAgICAgLy8gMS4gRW1pdCBsZXNzIGNvZGUuCisgICAgICAgICAgICAgICAgLy8gMi4gVHJ5IHRv
IHNwZWVkIHRoaW5ncyB1cCBieSBza2lwcGluZyBzdGFjayBjaGVja3MuCisgICAgICAgICAgICAg
ICAgbWluaW11bVBhcmVudENoZWNrU2l6ZSwKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93
cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgaW4gdGhlIFdhc20gLT4gRW1iZWRkZXIgY2FsbCBJ
QyBzdHViLiBTaW5jZSB0aGVzZSB3aWxsCisgICAgICAgICAgICAgICAgLy8gc3BpbGwgYWxsIGFy
Z3VtZW50cyB0byB0aGUgc3RhY2ssIHdlIGVuc3VyZSB0aGF0IGEgc3RhY2sgY2hlY2sgaGVyZSBj
b3ZlcnMgdGhlCisgICAgICAgICAgICAgICAgLy8gc3RhY2sgdGhhdCBzdWNoIGEgc3R1YiB3b3Vs
ZCB1c2UuCisgICAgICAgICAgICAgICAgKENoZWNrZWQ8dWludDMyX3Q+KG1fbWF4TnVtSlNDYWxs
QXJndW1lbnRzKSAqIHNpemVvZihSZWdpc3RlcikgKyBqc2NDYWxsaW5nQ29udmVudGlvbigpLmhl
YWRlclNpemVJbkJ5dGVzKCkpLnVuc2FmZUdldCgpCisgICAgICAgICAgICApKTsKKyAgICAgICAg
ICAgIGNvbnN0IGludDMyX3QgY2hlY2tTaXplID0gbV9tYWtlc0NhbGxzID8gKHdhc21GcmFtZVNp
emUgKyBleHRyYUZyYW1lU2l6ZSkudW5zYWZlR2V0KCkgOiB3YXNtRnJhbWVTaXplLnVuc2FmZUdl
dCgpOworICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKKyAgICAg
ICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFt
ZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CisK
KyAgICAgICAgICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250ZXh0Ojp1c2VGYXN0VExT
KCkgPyBwYXJhbXNbMF0uZ3ByKCkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisKKyAgICAg
ICAgICAgIC8vIFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVj
a3MgaWYgdGhlaXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4KKyAgICAgICAgICAgIC8vIGNlcnRhaW4g
bGltaXRzIHNpbmNlIHRoZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hl
Y2suCisgICAgICAgICAgICBpZiAobmVlZHNPdmVyZmxvd0NoZWNrKSB7CisgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICAgICAgICAgIEdQUlJlZyBmcCA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKworICAgICAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBm
cCwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBv
dmVyZmxvdzsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobmVlZFVuZGVyZmxvd0NoZWNr
KSkKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaDEsIGZwKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZs
b3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDEsIHNj
cmF0Y2gyKSk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpz
aW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmICht
X3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAg
ICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2
YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29ycmVjdC4KKyAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6
OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNl
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdk
IHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBp
c24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9pbnQgY29uc2VydmF0aXZlbHkgc2FpZCBpdCBoYWQg
ZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNoZWNrKSB3aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0
dGluZyByZW1vdmVkLgorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBl
bWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6OmZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSwgT3Jp
Z2luKCkpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9i
YWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwg
Y29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVG1wIGluc3RhbmNlLCBQcm9jZWR1cmUm
IHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJlc3RvcmVXYXNtQ29udGV4dEluc3Rh
bmNlKHByb2MsIGJsb2NrLCBpbnN0YW5jZSk7CisKKyAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQgPT0gUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgeworICAgICAgICAvLyBUaGUg
SW5zdGFuY2UgY2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRz
IGNhbm9uaWNhbCBsb2NhdGlvbiBpcy4KKyAgICAgICAgVG1wIHBvaW50ZXJUb0FjdHVhbFN0YWNr
TGltaXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGlu
dDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOwor
ICAgICAgICBUbXAgYWN0dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50
ZXJUb0FjdHVhbFN0YWNrTGltaXQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1pdCwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNo
ZWRTdGFja0xpbWl0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAg
Y29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCk7CisgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJzOworICAgICAgICBjbG9iYmVy
cy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOworICAgICAgICBmb3IgKGF1dG8g
aW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnMpCisgICAgICAgICAgICBjbG9iYmVycy5z
ZXQoaW5mby5zaXplUmVnaXN0ZXIpOworCisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIz
OjpWb2lkLCBvcmlnaW4oKSk7CisgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKKyAgICAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICBlZmZl
Y3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBlZmZlY3RzOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJzKTsK
KworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2UsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOworCisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcGlubmVkUmVnc10g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFz
ZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5l
ZFJlZ3MtPnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgp
ID49IDEpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8g
VGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMg
c3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0u
Z3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1z
aXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVn
c1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgQWlySVJH
ZW5lcmF0b3I6OmVtaXRUaHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9u
VHlwZSB0eXBlKQoreworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAg
YXV0byBqdW1wVG9FeGNlcHRpb25TdHViID0gaml0Lmp1bXAoKTsKKworICAgIGppdC5hZGRMaW5r
VGFzayhbanVtcFRvRXhjZXB0aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICB9KTsKK30KKworCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRv
dGFsQnl0ZXNDaGVja2VkID0gY291bnQ7CisgICAgdG90YWxCeXRlc0NoZWNrZWQgKz0gbV9sb2Nh
bHMuc2l6ZSgpOworICAgIHVpbnQzMl90IHRvdGFsQnl0ZXM7CisgICAgV0FTTV9DT01QSUxFX0ZB
SUxfSUYoKHRvdGFsQnl0ZXNDaGVja2VkLnNhZmVHZXQodG90YWxCeXRlcykgPT0gQ2hlY2tlZFN0
YXRlOjpEaWRPdmVyZmxvdykgfHwgIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eSh0b3RhbEJ5
dGVzKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgdG90YWxCeXRlcywgIiBsb2NhbHMi
KTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBU
eXBlOjpJNjQ6IHsKKyAgICAgICAgICAgIFRtcCBsb2NhbCA9IGdwcigpOworICAgICAgICAgICAg
bV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHsgbG9jYWwsIHR5cGUgfSk7CisgICAgICAgICAgICBh
cHBlbmQoWG9yNjQsIGxvY2FsLCBsb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6IHsKKyAg
ICAgICAgICAgIFRtcCBsb2NhbCA9IGZwcigpOworICAgICAgICAgICAgbV9sb2NhbHMudW5jaGVj
a2VkQXBwZW5kKHsgbG9jYWwsIHR5cGUgfSk7CisgICAgICAgICAgICBUbXAgdGVtcCA9IGdwcigp
OworICAgICAgICAgICAgLy8gSUVFRSA3NTQgIjAiIGlzIGp1c3QgaW50MzIvNjQgemVyby4KKyAg
ICAgICAgICAgIGFwcGVuZChYb3I2NCwgdGVtcCwgdGVtcCk7CisgICAgICAgICAgICBhcHBlbmQo
dHlwZSA9PSBUeXBlOjpmMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9Eb3VibGUsIHRlbXAs
IGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTOiBJcyB0
aGlzIGNvcnJlY3Q/CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOworICAg
IFdBU01fQ09NUElMRV9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisKKyAgICBtX2xvY2Fscy5ncm93
KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0eXBlID0g
c2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgbV9s
b2NhbHNbaV0gPSB7IGdwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgbV9s
b2NhbHNbaV0gPSB7IGZwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fY29kZSk7CisK
KyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZSwg
bV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgT3JpZ2luKCksCisgICAgICAgIFs9XSAoY29uc3QgQWly
OjpBcmcmIGFyZywgdW5zaWduZWQgaSkgeworICAgICAgICAgICAgaWYgKGFyZy5pc1RtcCgpKSB7
CisgICAgICAgICAgICAgICAgSW5zdCBpbnN0OworICAgICAgICAgICAgICAgIHN3aXRjaCAoc2ln
bmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBUeXBlOjpJMzI6Cisg
ICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KE1vdmUzMiwgbnVsbHB0ciwgYXJnLCBtX2xv
Y2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdChNb3Zl
LCBudWxscHRyLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICAgICAg
ICAgIGluc3QgPSBJbnN0KE1vdmVGbG9hdCwgbnVsbHB0ciwgYXJnLCBtX2xvY2Fsc1tpXS5maXJz
dCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVHlw
ZTo6RjY0OgorICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdChNb3ZlRG91YmxlLCBudWxs
cHRyLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoMCwgV1RGTW92ZShpbnN0KSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChhcmcuaXNBZGRyKCkpOworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIGFyZywg
bV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUs
IGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
KE1vdmVGbG9hdCwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgICAg
ICAgICBhcHBlbmQoTW92ZURvdWJsZSwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgIC8vIE9PUFM6IE5lZWQgdG8gY29u
c2lkZXIgaWYgdGhlc2UgTW92ZXMgZG9uJ3QgZ2V0IHJlZyBhbGxvY2VkLCB3ZSBtYXkgYmUgc3Rh
Y2sgb3ZlcmZsb3dpbmcKKyAgICAvLyB3LyB0aGUgc3RhY2sgbG9hZC9zdG9yZS4uLgorICAgIC8v
IE1heWJlIHdlIHNob3VsZCBqdXN0IGZvcmdldCBhZGRBcmd1bWVudHMgYW5kIGRvIHRoaXMgaW4g
b3VyIHByb2xvZ3VlIGFmdGVyIHN0YWNrIGNoZWNrIQorICAgIGluc2VydGlvblNldC5leGVjdXRl
KG1fcm9vdEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XS5maXJzdCk7CisgICAg
cmVzdWx0ID0gbV9sb2NhbHNbaW5kZXhdLmZpcnN0OworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVucmVhY2hhYmxlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7
CisgICAgdW5yZWFjaGFibGUtPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5l
bWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpVbnJlYWNoYWJsZSk7CisgICAg
fSk7CisgICAgdW5yZWFjaGFibGUtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworICAgIHJldHVy
biB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lv
blR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkgPSBb
XSAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGludDMyX3QgZGVsdGEpIC0+
IGludDMyX3QgeworICAgICAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1l
KTsKKworICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisg
ICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5KCktPmdyb3coUGFnZUNvdW50KGRl
bHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24u
ZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZh
bGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFs
aWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291
bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29u
OjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CisgICAgfTsKKworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRDQ2FsbChncm93TWVtb3J5LCByZXN1bHQsIG1fZnJh
bWVQb2ludGVyLCBpbnN0YW5jZVZhbHVlKCksIGRlbHRhKTsKKyAgICByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6Tm8sIG1faW5mby5tZW1vcnks
IGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRyKS0+c2l6ZSgpKSkgPT0g
c2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOworCisgICAg
VG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisKKyAgICBSRUxFQVNF
X0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnlTaXplKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0
YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHRlbXAx
KTsKKyAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OworICAgIHN0YXRpY19h
c3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAxdWxsIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11
c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKKyAgICBhcHBlbmQo
TW92ZTMyLCBBcmc6OmltbSgxNiksIHRlbXAyKTsKKyAgICBhZGRTaGlmdChVcnNoaWZ0NjQsIHRl
bXAxLCB0ZW1wMiwgcmVzdWx0KTsKKyAgICBhZGQoTW92ZTMyLCByZXN1bHQsIHJlc3VsdCk7CisK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdLmZpcnN0KTsKKyAgICBhcHBlbmQobW92ZU9wRm9yVmFs
dWVUeXBlKG1fbG9jYWxzW2luZGV4XS5maXJzdCksIHZhbHVlLCBtX2xvY2Fsc1tpbmRleF0uZmly
c3QpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmdldEdsb2Jh
bCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOworCisgICAg
cmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZH
bG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0
YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSksIHRlbXApOworCisgICAg
aW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3Rl
cikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5
cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0
eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAg
ICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
b2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1w
KTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRl
bXApLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIHRlbXAgPSBncHIoKTsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSwg
QjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUo
KSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwgdGVtcCk7CisKKyAgICBUeXBlIHR5cGUg
PSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKworICAgIGludDMyX3Qgb2Zmc2V0ID0gc2Fm
ZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBpZiAoQXJnOjpp
c1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkp
CisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIHZhbHVlLCBBcmc6OmFk
ZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCB0ZW1wMiA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIpOworICAg
ICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1v
dmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1wKSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENo
ZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zm
c2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFz
ZUdQUik7CisKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmc6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
T09QUyEKKworICAgICAgICAvLyBXZSdyZSBub3QgdXNpbmcgc2lnbmFsIGhhbmRsaW5nIGF0IGFs
bCwgd2UgbXVzdCB0aGVyZWZvcmUgY2hlY2sgdGhhdCBubyBtZW1vcnkgYWNjZXNzIGV4Y2VlZHMg
dGhlIGN1cnJlbnQgbWVtb3J5IHNpemUuCisgICAgICAgIC8vQVNTRVJUKG1fbWVtb3J5U2l6ZUdQ
Uik7CisgICAgICAgIC8vQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7
CisgICAgICAgIC8vbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgbV9tZW1vcnlTaXplR1BSLCBwb2ludGVyLCBzaXplT2ZPcGVy
YXRpb24gKyBvZmZzZXQgLSAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBN
ZW1vcnlNb2RlOjpTaWduYWxpbmc6IHsKKyAgICAgICAgLy8gV2UndmUgdmlydHVhbGx5IG1hcHBl
ZCA0R2lCK3JlZHpvbmUgZm9yIHRoaXMgbWVtb3J5LiBPbmx5IHRoZSB1c2VyLWFsbG9jYXRlZCBw
YWdlcyBhcmUgYWRkcmVzc2FibGUsIGNvbnRpZ3VvdXNseSBpbiByYW5nZSBbMCwgY3VycmVudF0s
CisgICAgICAgIC8vIGFuZCBldmVyeXRoaW5nIGFib3ZlIGlzIG1hcHBlZCBQUk9UX05PTkUuIFdl
IGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgZXhwbGljaXQgYm91bmRzIGNoZWNrIGluIHRoZSA0
R2lCIHJhbmdlIGJlY2F1c2UgV2ViQXNzZW1ibHkgcmVnaXN0ZXIKKyAgICAgICAgLy8gbWVtb3J5
IGFjY2Vzc2VzIGFyZSAzMi1iaXQuIEhvd2V2ZXIgV2ViQXNzZW1ibHkgcmVnaXN0ZXIgKyBvZmZz
ZXQgYWNjZXNzZXMgcGVyZm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNoIGNhbiBwdXNo
IGFuIGFjY2VzcyBhYm92ZQorICAgICAgICAvLyB0aGUgMzItYml0IGxpbWl0ICh0aGUgb2Zmc2V0
IGlzIHVuc2lnbmVkIDMyLWJpdCkuIFRoZSByZWR6b25lIHdpbGwgY2F0Y2ggbW9zdCBzbWFsbCBv
ZmZzZXRzLCBhbmQgd2UnbGwgZXhwbGljaXRseSBib3VuZHMgY2hlY2sgYW55CisgICAgICAgIC8v
IHJlZ2lzdGVyICsgbGFyZ2Ugb2Zmc2V0IGFjY2Vzcy4gV2UgZG9uJ3QgdGhpbmsgdGhpcyB3aWxs
IGJlIGdlbmVyYXRlZCBmcmVxdWVudGx5LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3Vs
ZCBjaGVjayB0aGF0IHJlZ2lzdGVyICsgbGFyZ2Ugb2Zmc2V0IGRvZXNuJ3QgZXhjZWVkIDRHaUIr
cmVkem9uZSBzaW5jZSB0aGF0J3MgdGVjaG5pY2FsbHkgdGhlIGxpbWl0IHdlIG5lZWQgdG8gYXZv
aWQgb3ZlcmZsb3dpbmcgdGhlCisgICAgICAgIC8vIFBST1RfTk9ORSByZWdpb24sIGJ1dCBpdCdz
IGJldHRlciBpZiB3ZSB1c2UgYSBzbWFsbGVyIGltbWVkaWF0ZSBiZWNhdXNlIGl0IGNhbiBjb2Rl
Z2VucyBiZXR0ZXIuIFdlIGtub3cgdGhhdCBhbnl0aGluZyBlcXVhbCB0byBvciBncmVhdGVyCisg
ICAgICAgIC8vIHRoYW4gdGhlIGRlY2xhcmVkICdtYXhpbXVtJyB3aWxsIHRyYXAsIHNvIHdlIGNh
biBjb21wYXJlIGFnYWluc3QgdGhhdCBudW1iZXIuIElmIHRoZXJlIHdhcyBubyBkZWNsYXJlZCAn
bWF4aW11bScgdGhlbiB3ZSBzdGlsbCBrbm93IHRoYXQKKyAgICAgICAgLy8gYW55IGFjY2VzcyBl
cXVhbCB0byBvciBncmVhdGVyIHRoYW4gNEdpQiB3aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRkIHRo
ZSByZWR6b25lLgorICAgICAgICBpZiAob2Zmc2V0ID49IE1lbW9yeTo6ZmFzdE1hcHBlZFJlZHpv
bmVCeXRlcygpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBPT1BTIQorICAgICAgICAgICAgLy9zaXplX3QgbWF4aW11bSA9IG1faW5mby5tZW1vcnkubWF4
aW11bSgpID8gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkuYnl0ZXMoKSA6IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAgICAgIC8vbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlciwg
c2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbWF4aW11bSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIHBvaW50ZXIpOworICAg
IHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21BZGRyZXNzVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHBvaW50ZXIsIG1fbWVtb3J5QmFzZUdQUik7Cit9CisKK2lubGluZSB1aW50
MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7Cisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJM
b2FkOFU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOFU6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgY2FzZSBM
b2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToK
KyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQz
MlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOgorICAgICAgICByZXR1cm4gNDsKKyAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2Fk
OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworaW5saW5lIFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BU
eXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAg
IGludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0
KTsKKworICAgIFRtcCBpbW1UbXA7CisgICAgVG1wIG5ld1B0cjsKKyAgICBUbXAgcmVzdWx0Owor
CisgICAgYXV0byBsb2FkQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFk
ZHJGb3JtKG9mZnNldCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mTG9hZE9wKG9wKSkpKQorICAg
ICAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBpbW1U
bXAgPSBncHIoKTsKKyAgICAgICAgbmV3UHRyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmJpZ0ltbShvZmZzZXQpLCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIGlt
bVRtcCwgcG9pbnRlciwgbmV3UHRyKTsKKyAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihuZXdQdHIp
OworICAgIH07CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJM
b2FkOFM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOFNp
Z25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6IHsKKyAgICAgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwg
cmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDhVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDgsIGxv
YWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkOFU6IHsKKyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVkIGFub3RoZXIg
emV4dCBoZXJlPworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDE2UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAg
ICAgYXBwZW5kKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOiB7
CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDE2U2lnbmVkRXh0
ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2lnbkV4dGVuZDMy
VG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAg
ICAgICBhcHBlbmQoTG9hZDE2LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VTogeworICAgICAgICAvLyBP
T1BTOiBEbyBJIG5lZWQgYW5vdGhlciB6ZXh0IGhlcmU/CisgICAgICAgIHJlc3VsdCA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTG9hZDE2LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAg
IGFwcGVuZChNb3ZlMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOiB7CisgICAgICAgIHJlc3VsdCA9
IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZTMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAg
ICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKKyAgICAgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBsb2FkQXJnKCksIHJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDog
eworICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgbG9h
ZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRP
cFR5cGU6OkY2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAgIGFwcGVu
ZChNb3ZlRG91YmxlLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjps
b2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VS
VChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJm
bG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSkpIHsKKyAgICAgICAgLy8g
RklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBu
b3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAv
LyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byog
cGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgcGF0Y2gtPnNldEdlbmVy
YXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwg
RXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAg
ICAgICAgZW1pdFBhdGNocG9pbnQocGF0Y2gsIFRtcCgpKTsKKworICAgICAgICAvLyBXZSB3b24n
dCByZWFjaCBoZXJlLCBzbyB3ZSBqdXN0IHBpY2sgYSByYW5kb20gcmVnLgorICAgICAgICBzd2l0
Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOgorICAgICAgICBj
YXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQ4VToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2Fk
OFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMy
VToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToK
KyAgICAgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0gZWxzZQorICAgICAgICByZXN1
bHQgPSBlbWl0TG9hZE9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBv
ZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KworaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCit7CisgICAg
c3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoK
KyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJT
dG9yZToKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIHJldHVybiA4OworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2lubGluZSB2b2lk
IEFpcklSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCit7Cisg
ICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZz
ZXQpOworCisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgYXV0byBzdG9y
ZUFyZyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQs
IEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZlN0b3JlT3Aob3ApKSkpCisgICAgICAgICAgICByZXR1
cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIGltbVRtcCA9IGdwcigpOwor
ICAgICAgICBuZXdQdHIgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1t
KG9mZnNldCksIGltbVRtcCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVy
LCBuZXdQdHIpOworICAgICAgICByZXR1cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAgfTsKKwor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4LCB2YWx1
ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6
Okk2NFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICAgICAg
YXBwZW5kKFN0b3JlMTYsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
MzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICAgICAg
YXBwZW5kKE1vdmUsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHZh
bHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6RjY0U3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgc3RvcmVBcmco
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9m
ZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0g
SW50MzIpOworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0
LCBzaXplT2ZTdG9yZU9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0
aGlzIGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJv
ciwgc28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2Vw
dGlvbi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIGF1dG8qIHRocm93RXhjZXB0aW9uID0gYWRk
UGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0
b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4
Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIGVtaXRQYXRjaHBvaW50KHRocm93RXhjZXB0aW9uLCBUbXAoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGVtaXRTdG9yZU9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVy
LCBvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3ApKSwgdmFsdWUsIG9mZnNldCk7CisKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJv
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gT09Q
UzogU2FtZSBjb21tZW50IHJlZ2FyZGluZyBUeXBlZFRtcCBhbmQgYnJhbmNoIHR5cGUgb24gY29u
ZGl0aW9uIQorCisgICAgQVNTRVJUKG5vblplcm8uaXNHUCgpID09IHplcm8uaXNHUCgpKTsKKyAg
ICByZXN1bHQgPSBub25aZXJvLmlzR1AoKSA/IGdwcigpIDogZnByKCk7CisgICAgaWYgKG5vblpl
cm8uaXNHUCgpKQorICAgICAgICBhcHBlbmQoTW92ZSwgbm9uWmVybywgcmVzdWx0KTsKKyAgICBl
bHNlCisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBub25aZXJvLCByZXN1bHQpOworCisgICAg
QmFzaWNCbG9jayogaXNaZXJvID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
Y29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQoQnJhbmNoNjQs
IEFyZzo6cmVzQ29uZChaZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzWmVybywgY29udGludWF0aW9uKTsKKworICAgIGlmICh6
ZXJvLmlzR1AoKSkKKyAgICAgICAgYXBwZW5kKGlzWmVybywgTW92ZSwgemVybywgcmVzdWx0KTsK
KyAgICBlbHNlCisgICAgICAgIGFwcGVuZChpc1plcm8sIE1vdmVEb3VibGUsIHplcm8sIHJlc3Vs
dCk7CisgICAgYXBwZW5kKGlzWmVybywgSnVtcCk7CisgICAgaXNaZXJvLT5zZXRTdWNjZXNzb3Jz
KGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVj
ayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgT3JpZ2luIG9yaWdpbikKK3sKKyAgICBpZiAoIW1f
dGllclVwKQorICAgICAgICByZXR1cm47CisKKyAgICBUbXAgY291bnRkb3duUHRyID0gZ3ByKCk7
CisgICAgVG1wIG9sZENvdW50ZG93biA9IGdwcigpOworICAgIFRtcCBuZXdDb3VudGRvd24gPSBn
cHIoKTsKKworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShyZWludGVycHJldF9jYXN0PHVp
bnQ2NF90PihtX3RpZXJVcCkpLCBjb3VudGRvd25QdHIpOworICAgIGFwcGVuZChNb3ZlMzIsIEFy
Zzo6YWRkcihjb3VudGRvd25QdHIpLCBvbGRDb3VudGRvd24pOworCisgICAgUkVMRUFTRV9BU1NF
UlQoQXJnOjppc1ZhbGlkSW1tRm9ybShkZWNyZW1lbnRDb3VudCkpOworICAgIGFwcGVuZChNb3Zl
MzIsIG9sZENvdW50ZG93biwgbmV3Q291bnRkb3duKTsKKyAgICBhcHBlbmQoU3ViMzIsIEFyZzo6
aW1tKGRlY3JlbWVudENvdW50KSwgbmV3Q291bnRkb3duKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBu
ZXdDb3VudGRvd24sIEFyZzo6YWRkcihjb3VudGRvd25QdHIpKTsKKworICAgIGF1dG8qIHBhdGNo
ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0
czo6bm9uZSgpOworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAg
ICBlZmZlY3RzLndyaXRlcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIHBhdGNoLT5lZmZl
Y3RzID0gZWZmZWN0czsKKworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdGllclVwID0gaml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZSwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CisKKyAgICAg
ICAgcGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgIHRpZXJVcC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRy
YVBhZGRpbmdCeXRlcyA9IDA7CisgICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1Nw
aWxsID0geyB9OworICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbC5hZGQoR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRG
b3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFk
ZGluZ0J5dGVzKTsKKworICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihtX2Z1bmN0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAg
ICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVyT2ZT
dGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRlcyk7
CisgICAgICAgICAgICBqaXQuanVtcCh0aWVyVXBSZXN1bWUpOworCisgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxOb1B0clRhZz4oY2FsbCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFn
PihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisg
ICAgZW1pdFBhdGNocG9pbnQocGF0Y2gsIFRtcCgpLCBuZXdDb3VudGRvd24sIG9sZENvdW50ZG93
bik7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRk
TG9vcChUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3Nv
cnMoYm9keSk7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7CisgICAgZW1pdFRpZXJVcENo
ZWNrKFRpZXJVcENvdW50Ojpsb29wRGVjcmVtZW50KCksIG9yaWdpbigpKTsKKworICAgIHJldHVy
biBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2ln
bmF0dXJlKSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworfQorCitBaXJJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKFR5cGUg
c2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YShtX3Byb2MsIE9yaWdpbigpLCBz
aWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9w
cm9jLmFkZEJsb2NrKCkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJH
ZW5lcmF0b3I6OmFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9s
RGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwg
QmxvY2tUeXBlOjpCbG9jaywgbV9wcm9jLmFkZEJsb2NrKCkpOworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBD
b250cm9sVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQmFzaWNCbG9jayog
dGFrZW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIAorICAgIC8vIE9PUFM6IFRoaXMgc29ydCBvZiBjYWxscyBmb3IgYSBU
eXBlZFRtcC4gQmVjYXVzZSBpZiB3ZSBhbGxvdyBhIDMyLWJpdAorICAgIC8vIHZhbHVlIHRvIGhh
dmUgYW55IHVwcGVyIGJpdHMsIHRoZW4gQnJhbmNoVGVzdDY0IGFpbnQgcmlnaHQuLi4uCisgICAg
YXBwZW5kKEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RaZXJv
KSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNz
b3JzKHRha2VuLCBub3RUYWtlbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IHRha2VuOworICAg
IHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9y
VHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRy
b2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgY3VycmVudFN0YWNrKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRh
LnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNj
ZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFi
bGUoZGF0YSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxl
KENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKGRhdGEu
dHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5zcGVj
aWFsOworICAgIGRhdGEuY29udmVydElmVG9CbG9jaygpOworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYgZGF0YSwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6ZSgpIDw9IDEpOworICAgIGlmIChyZXR1cm5WYWx1
ZXMuc2l6ZSgpKSB7CisgICAgICAgIFRtcCByZXR1cm5WYWx1ZUdQUiA9IFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIFRtcCByZXR1cm5WYWx1ZUZQUiA9IFRtcChGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIHN3aXRjaCAoZGF0YS5zaWduYXR1cmUoKSkgewor
ICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIHJldHVy
blZhbHVlc1swXSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldDMyLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJ
NjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0NjQsIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIGFwcGVu
ZChNb3ZlRmxvYXQsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAg
ICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwg
cmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0
RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIGFwcGVuZChSZXRWb2lkKTsKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVl
cywgZGF0YS5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBk
YXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAg
ICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6QnJhbmNoLCBvcmln
aW4oKSwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
RnJlcXVlbnRlZEJsb2NrKHRhcmdldCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsK
KyAgICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihtX2N1cnJlbnRCbG9jayk7CisgICAgICAg
IGNvbnRpbnVhdGlvbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOworICAgICAgICBt
X2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCks
IEZyZXF1ZW50ZWRCbG9jayh0YXJnZXQpKTsKKyAgICAgICAgdGFyZ2V0LT5hZGRQcmVkZWNlc3Nv
cihtX2N1cnJlbnRCbG9jayk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3Qg
VmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQorICAg
ICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNbaV0tPnJl
c3VsdEZvckJyYW5jaCgpKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3Rh
Y2ssIGRlZmF1bHRUYXJnZXQucmVzdWx0Rm9yQnJhbmNoKCkpOworCisgICAgU3dpdGNoVmFsdWUq
IHN3aXRjaFZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxTd2l0Y2hWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgY29uZGl0aW9uKTsKKyAgICBzd2l0Y2hWYWx1ZS0+c2V0RmFsbFRocm91
Z2goRnJlcXVlbnRlZEJsb2NrKGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAg
ICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2UoU3dpdGNoQ2FzZShpLCBGcmVxdWVudGVkQmxvY2so
dGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKSkpKTsKKworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnks
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworCisgICAgdW5pZnlWYWx1
ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1
bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9u
KTsKKworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5KTsKK30KKworCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRy
b2xEYXRhOworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247CisKKyAgICBp
ZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgeworICAgICAgICBhcHBlbmQoZGF0YS5z
cGVjaWFsLCBKdW1wKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKG1fY3Vy
cmVudEJsb2NrKTsKKyAgICB9CisKKyAgICBmb3IgKFRtcCByZXN1bHQgOiBkYXRhLnJlc3VsdCkK
KyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisK
KyAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2Ug
bmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgorICAgIGlmIChkYXRhLnR5
cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQorICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGRh
dGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQo
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2Vz
Q2FsbHMgPSB0cnVlOworCisgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5
cGUoKTsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisKKyAgICBpZiAobV9pbmZv
LmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkp
IHsKKyAgICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpT
Q2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAg
ICAgICAgLy8gRklYTUUgaW1wb3J0cyBjYW4gYmUgbGlua2VkIGhlcmUsIGluc3RlYWQgb2YgZ2Vu
ZXJhdGluZyBhIHBhdGNocG9pbnQsIGJlY2F1c2UgYWxsIGltcG9ydCBzdHVicyBhcmUgZ2VuZXJh
dGVkIGJlZm9yZSBCMyBjb21waWxhdGlvbiBzdGFydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKKyAgICAgICAgVG1wIHRhcmdldEluc3RhbmNlID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0
YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAgICAv
LyBUaGUgdGFyZ2V0IGluc3RhbmNlIGlzIDAgdW5sZXNzIHRoZSBjYWxsIGlzIHdhc20tPndhc20u
CisgICAgICAgIFRtcCBpc1dhc21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIHRhcmdldEluc3RhbmNlLCBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpOworCisg
ICAgICAgIEJhc2ljQmxvY2sqIGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFu
Y2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBG
cmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2NrKSk7CisKKyAgICAgICAgVG1wIHdhc21DYWxs
UmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNt
QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAg
IFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ug
d2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgLy8gV2Ug
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0
aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
KSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFi
bGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRh
Zz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIFVwc2lsb25WYWx1ZSog
d2FzbUNhbGxSZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlz
V2FzbUJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNt
Q2FsbFJlc3VsdCk7CisgICAgICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
bV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKKworICAgICAgICAvLyBGSVhN
RTogTGV0J3MgcmVtb3ZlIHRoaXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5k
bHkgSUMKKyAgICAgICAgLy8gZm9yIGNhbGxzIG91dCB0byB0aGUgZW1iZWRkZXIuIFRoaXMgc2hv
dWxkbid0IGJlIHRoYXQgaGFyZCB0byBkby4gV2UgY291bGQgcHJvYmFibHkKKyAgICAgICAgLy8g
aW1wbGVtZW50IHRoZSBJQyB0byBiZSBvdmVyIENvbnRleHQqLgorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMzc1CisgICAgICAgIFRtcCBqdW1w
RGVzdGluYXRpb24gPSBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLAorICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNl
VmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRk
ZXJTdHViKGZ1bmN0aW9uSW5kZXgpKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25p
bmcoKSkKKyAgICAgICAgICAgIGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdFhvciwgb3JpZ2luKCksIGp1bXBEZXN0aW5hdGlvbiwg
aXNFbWJlZGRlckJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBnX0pJVENvZGVQb2lzb24pKTsKKworICAgICAgICBUbXAgZW1iZWRkZXJDYWxsUmVzdWx0ID0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2Nr
LCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgICAgICBbPV0g
KFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoanVtcERlc3RpbmF0aW9uLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQg
cmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAg
ICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGlu
ZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50
LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2Rl
OjpCb3VuZHNDaGVja2luZykpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAg
ICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBX
YXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIFVwc2lsb25WYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5
cGUgPT0gVm9pZCA/IG51bGxwdHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9u
VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlz
RW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2lu
KCksIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b247CisKKyAgICAgICAgaWYgKHJldHVyblR5cGUgPT0gVm9pZCkKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG51bGxwdHI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gY29udGlu
dWF0aW9uLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgUGhpLCB0b0IzVHlwZShyZXR1cm5UeXBl
KSwgb3JpZ2luKCkpOworICAgICAgICAgICAgd2FzbUNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGko
cmVzdWx0KTsKKyAgICAgICAgICAgIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShy
ZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVu
IHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9k
aWZpZWQgb3VyIE1lbW9yeS4KKyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUo
UmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1
ZSgpLCBtX3Byb2MsIGNvbnRpbnVhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0
ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50Qmxv
Y2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAgIFs9
XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25J
bmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxs
LCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXgg
fSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0
KCk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkp
OworCisgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGluZGlyZWN0
IGNhbiBjYWxsIGVpdGhlciBXZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLiBCZWNhdXNlCisgICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gaXMg
bGlrZSBjYWxsaW5nIGludG8gdGhlIGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUg
YWxsIGNhbGwgaW5kaXJlY3RzCisgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3Vy
IHN0YWNrIGNoZWNrIGNhbGN1bGF0aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0g
c3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihh
cmdzLnNpemUoKSkpOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
cjsKKyAgICBFeHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXI7CisgICAgRXhwcmVzc2lvblR5
cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aDsKKyAgICBFeHByZXNzaW9uVHlwZSBtYXNr
OworICAgIHsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLAorICAgICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0
YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSk7CisgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMy
X3Q+KFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CisgICAgICAgIGluc3RhbmNlc0J1ZmZl
ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50
MzJfdD4oVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpKTsKKyAgICAgICAgY2FsbGFibGVGdW5j
dGlvbkJ1ZmZlckxlbmd0aCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVD
YXN0PGludDMyX3Q+KFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgICAgIG1hc2sgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCks
CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICB0YWJsZSwgc2FmZUNh
c3Q8aW50MzJfdD4oVGFibGU6Om9mZnNldE9mTWFzaygpKSkpOworICAgIH0KKworICAgIC8vIENo
ZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCisgICAgeworICAgICAg
ICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIG9yaWdpbigpLCBjYWxsZWVJbmRl
eCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCkpOworCisgICAgICAgIGNoZWNrLT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzQ2FsbEluZGlyZWN0KTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgY2FsbGVlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KTsKKworICAgIGlmIChPcHRp
b25zOjplbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSkKKyAgICAgICAgY2FsbGVlSW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCks
IG1hc2ssIGNhbGxlZUluZGV4KTsKKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rp
b247CisgICAgeworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGlu
ZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgRXhwcmVzc2lvblR5cGUgb2Zm
c2V0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdp
bigpLAorICAgICAgICAgICAgY2FsbGVlSW5kZXgsIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNp
emVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSkpOworICAgICAgICBjYWxsYWJsZUZ1
bmN0aW9uID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9y
aWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOworCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgdGhlIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQu
IFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0
ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUg
dHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWdu
YXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3MjEwCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAi
TG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTY0Iik7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxl
ZVNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBJbnQ2NCwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0
PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJl
SW5kZXgoKSkpOworICAgICAgICB7CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgb3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVy
ZUluZGV4LAorICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpKSk7
CisKKyAgICAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVF
bnRyeSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRo
ZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0LgorICAgICAgICB7CisgICAg
ICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7CisgICAgICAgICAgICBDaGVja1ZhbHVlKiBj
aGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVj
aywgb3JpZ2luKCksCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBl
eHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7CisKKyAgICAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBF
eGNlcHRpb25UeXBlOjpCYWRTaWduYXR1cmUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBEbyBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7Cisg
ICAgICAgIFRtcCBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIE11bCwgb3JpZ2luKCksCisgICAgICAgICAgICBjYWxsZWVJbmRleCwgY29uc3RhbnQocG9p
bnRlclR5cGUoKSwgc2l6ZW9mKEluc3RhbmNlKikpKTsKKyAgICAgICAgVG1wIG5ld0NvbnRleHRJ
bnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGluc3RhbmNlc0J1ZmZl
ciwgb2Zmc2V0KSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9j
LmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1fcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIFRtcCBpc1NhbWVDb250ZXh0SW5zdGFuY2UgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKKyAg
ICAgICAgICAgIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gs
IG9yaWdpbigpLAorICAgICAgICAgICAgaXNTYW1lQ29udGV4dEluc3RhbmNlLCBGcmVxdWVudGVk
QmxvY2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOwor
CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4dFN3aXRjaC0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAg
IC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhpbmcgd2l0
aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29udGV4dEluc3RhbmNlLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwg
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFu
Y2UgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3Rh
bmNlID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJ
bmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAg
IGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAg
ICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwor
ICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHRJbnN0YW5jZSAhPSBiYXNlTWVtb3J5KTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5z
dGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkp
OworICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRk
cmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGlt
aXQoKSkpOworICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250
ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
ciAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9y
dCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyCisgICAgICAgICAgICAvLyAgIHNl
ZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgorICAgICAg
ICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAv
LyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgp
KSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9pZCouCisgICAgICAgIH0pOworICAgICAgICBk
b0NvbnRleHRTd2l0Y2gtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdp
bigpLCBjb250aW51YXRpb24pOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworICAgIH0KKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9u
LAorICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CisgICAgaWYgKE9wdGlv
bnM6OnVzZVBvaXNvbmluZygpKQorICAgICAgICBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRYb3IsIG9yaWdpbigpLCBjYWxsZWVDb2RlLCBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
Z19KSVRDb2RlUG9pc29uKSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0
dXJuVHlwZSgpOworICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2Fs
bChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJu
VHlwZSksCisgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2lu
Y2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBw
ZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0
IGlzIGJvdW5kcyBjaGVja2luZyBzbworICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2FzbS0+
d2FzbSB0aHVuayB1bmNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lzdGVycy4K
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0
IHRoZSB3YXNtLT53YXNtIHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAgICAgICAgIC8vIHVzZSBh
bGwgdGhlIHBpbm5lZCByZWdpc3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcpKTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChw
YXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgLy8gVGhlIGNhbGwgY291bGQg
aGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxk
IGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxT
dGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5j
ZVZhbHVlKCksIG1fcHJvYywgbV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30K
Kwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgcGhpLCBj
b25zdCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCit7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHNvdXJjZSwgcGhpKTsKK30KKwor
dm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNT
RVJUKHJlc3VsdC5zaXplKCkgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRb
cmVzdWx0LnNpemUoKSAtIDEgLSBpXSwgcmVzdWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0g
MSAtIGldKTsKK30KKworc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21t
YVByaW50ZXImIGNvbW1hLCBjb25zdCBBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3QmIGV4
cHJlc3Npb25TdGFjaykKK3sKKyAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIp
OworICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKKyAg
ICAgICAgZGF0YUxvZyhjb21tYSwgKmV4cHJlc3Npb24pOworfQorCit2b2lkIEFpcklSR2VuZXJh
dG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0
IEV4cHJlc3Npb25MaXN0KiBleHByZXNzaW9uU3RhY2spCit7CisgICAgLy8gT09QUyEKKyAgICAv
KgorICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fY29k
ZSk7CisgICAgZGF0YUxvZ0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2Nr
KTsKKyAgICBkYXRhTG9nTG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgQVNTRVJUKGNvbnRyb2xT
dGFjay5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgIGRhdGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRh
LCAiOiAiKTsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAg
ZHVtcEV4cHJlc3Npb25TdGFjayhjb21tYSwgKmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGV4
cHJlc3Npb25TdGFjayA9ICZjb250cm9sU3RhY2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7
CisgICAgICAgIGRhdGFMb2dMbigpOworICAgIH0KKyAgICBkYXRhTG9nTG4oKTsKKyAgICAqLwor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KK3sKKyAgICBPcGNv
ZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJy
ZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CisgICAgQVNTRVJUKGlzVmFsaWRPcFR5cGUoc3Rh
dGljX2Nhc3Q8dWludDhfdD4ob3JpZ2luLm9wY29kZSgpKSkpOworICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8T3JpZ2luPihvcmlnaW4pOworfQorCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4
dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXpl
X3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29t
cGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVw
LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAgIGF1dG8gcmVz
dWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworCisgICAgY29tcGls
YXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0Nh
bGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9
IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworCisgICAgQjM6OlByb2NlZHVyZSBw
cm9jZWR1cmU7CisgICAgQ29kZSYgY29kZSA9IHByb2NlZHVyZS5jb2RlKCk7CisKKyAgICBwcm9j
ZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwgT3JpZ2luIG9yaWdp
bikgeworICAgICAgICBpZiAob3JpZ2luLmRhdGEoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgi
V2FzbTogIiwgYml0d2lzZV9jYXN0PE9wY29kZU9yaWdpbj4ob3JpZ2luKSk7CisgICAgfSk7Cisg
ICAgCisgICAgLy8gVGhpcyBtZWFucyB3ZSBjYW5ub3QgdXNlIGVpdGhlciBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXM6OnVzZWRSZWdpc3RlcnMoKSBvcgorICAgIC8vIFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtczo6dW5hdmFpbGFibGVSZWdpc3RlcnMoKS4gSW4gZXhjaGFuZ2UgZm9yIHRoaXMgY29u
Y2Vzc2lvbiwgd2UKKyAgICAvLyBkb24ndCBzdHJpY3RseSBuZWVkIHRvIHJ1biBBaXI6OnJlcG9y
dFVzZWRSZWdpc3RlcnMoKSwgd2hpY2ggc2F2ZXMgYSBiaXQgb2YgQ1BVIHRpbWUgYXQKKyAgICAv
LyBvcHRMZXZlbD0xLgorICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgdGhpcz8gU2hvdWxkIHdlIGp1
c3Qgc2V0IGl0IGRpcmVjdGx5IG9uIENvZGU/CisgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJl
Z2lzdGVycyhmYWxzZSk7CisgICAgCisgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0
aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3
ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsKCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJB
c3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkpOworCisgICAgQWlySVJHZW5lcmF0b3IgaXJH
ZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhy
b3dXYXNtRXhjZXB0aW9uKTsKKyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFy
c2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJl
LCBpbmZvKTsKKyAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsK
KworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAg
c3VjY2Vzc29yLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CisgICAgfQorICAgIC8vIE9PUFM6IFZh
bGlkYXRlICdjb2RlJyBoZXJlIQorICAgIAorICAgIHsKKyAgICAgICAgQWlyOjpnZW5lcmF0ZShw
cm9jLmNvZGUoKSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisgICAg
ICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1
cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwor
ICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3ZvaWQgQWlySVJHZW5l
cmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpCit7CisgICAgQVNTRVJUKG9wZXJh
dGlvbiA9PSBEaXYgfHwgb3BlcmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24gPT0gVURpdiB8fCBv
cGVyYXRpb24gPT0gVU1vZCk7CisgICAgY29uc3QgQjM6OlR5cGUgdHlwZSA9IGxlZnQtPnR5cGUo
KTsKKworICAgIHsKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBLaW5kIG9w
ID0gaXM2NEJpdE9wKG9wZXJhdGlvbikgPyBCcmFuY2hUZXN0NjQgOiBCcmFuY2hUZXN0MzI7Cisg
ICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyks
IHJpZ2h0LCByaWdodCk7CisgICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0
VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIGlmIChvcGVyYXRpb24gPT0gRGl2KSB7CisgICAgICAgIGlu
dDY0X3QgbWluID0gdHlwZSA9PSBJbnQzMiA/IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1pbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCk7CisgICAgICAgIGVt
aXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8gT09QUzogVHJ5IHRvIGVtaXQgbmljZSBjb21w
YXJlIHcvIGltbXMuCisgICAgICAgICAgICBUbXAgbWluVG1wID0gZ3ByKCk7CisgICAgICAgICAg
ICBUbXAgbmVnT25lID0gZ3ByKCk7CisKKyAgICAgICAgICAgIEtpbmQgb3AgPSBpczY0Qml0T3Ao
b3BlcmF0aW9uKSA/IENvbXBhcmU2NCA6IENvbXBhcmUzMjsKKyAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbShtaW4pLCBtaW5UbXApOworICAgICAgICAgICAgYXBwZW5kKG9wLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgbGVmdCwgbWluVG1wLCBtaW5UbXAp
OworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKC0xKSwgbmVnT25lKTsKKyAgICAg
ICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIHJp
Z2h0LCBuZWdPbmUsIG5lZ09uZSk7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdFplcm8pLCBtaW5UbXAsIG5lZ09uZSk7Cisg
ICAgICAgIH0sCisgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNl
cHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpJbnRlZ2VyT3ZlcmZsb3cpOworICAgICAgICB9KTsK
KyAgICB9Cit9CisKKy8vIE9PUFM6IEltcGxlbWVudCB0aGVzZSBkaXYgb3BzISEhCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Np
b25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgY29uc3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAg
ICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhw
cmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIGVtaXRDaGVja3NGb3JN
b2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYo
b3AsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyUmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bj
b2RlIG9wID0gVU1vZDsKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0
KTsKKyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2Owor
ICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBF
eHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7CisgICAgZW1pdENoZWNrc0Zv
ck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9u
VHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGNvbnN0IEIzOjpPcGNvZGUgb3AgPSBVRGl2OworICAgIGVtaXRDaGVja3NGb3JNb2RPckRp
dihvcCwgbGVmdCwgcmlnaHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGNvbnN0IEIzOjpP
cGNvZGUgb3AgPSBVTW9kOworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmln
aHQpOworICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
Yywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6Oklu
dDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGlu
Z1plcm9zMzIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1p
dFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9w
Y250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAg
aWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQ
b3B1bGF0aW9uMzIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9
KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgorCisgICAgdWludDMyX3QgKCpwb3Bjb3Vu
dCkoaW50MzJfdCkgPSBbXSAoaW50MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19i
dWlsdGluX3BvcGNvdW50KHZhbHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3Vs
dCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHND
b3VudFBvcHVsYXRpb24oKSkgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBh
dGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5k
aWYKKworICAgIHVpbnQ2NF90ICgqcG9wY291bnQpKGludDY0X3QpID0gW10gKGludDY0X3QgdmFs
dWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsgfTsK
KyAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2
ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2lu
dChCMzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OworICAgIGlmIChpc1g4NigpKQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdp
c3RlcnMgPSAxOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworI2lmIENQ
VShYODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdw
cigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAg
ICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5m
cHIoKSk7CisjZW5kaWYKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0
Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0
VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJl
Z2lzdGVycyA9IDE7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisjaWYg
Q1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAg
ICAgIGppdC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5m
cHIoKSk7CisjZW5kaWYKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0
Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50
KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3Vu
ZFRvd2FyZE5lYXJlc3RJbnREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkp
OworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNo
cG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsK
KyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0
SW50RmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZw
cigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRk
UGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC5yb3VuZFRvd2FyZFplcm9GbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIo
KSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BT
OiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJs
ZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91
YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFu
LCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBl
OjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9j
LCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1z
WzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAg
ICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBt
YXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91
dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRB
bmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFy
ZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMy
LCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0
cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0
LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFd
LmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLwor
ICAgIHJldHVybiB7IH07Cit9CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7Cisg
ICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisg
ICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCks
IGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJh
cCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
b3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3Jp
Z2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQu
dHJ1bmNhdGVEb3VibGVUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAg
ICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7
IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3Rh
bnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4w
KSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90
PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4s
IG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91
dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNr
VmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJv
YywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
SW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRU
cnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAg
IENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4
ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwg
YXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50
MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAg
IHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hw
b2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFyYW1z
WzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAq
LworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOwor
ICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKyAg
ICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4o
KSkgKiAtMi4wKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0
PHVpbnQ2NF90PigtMS4wKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwg
YXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFw
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBv
cmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
IHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
VHJ1bmMpOworICAgIH0pOworCisgICAgVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNY
ODYoKSkgeworICAgICAgICAvLyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9u
IHRvIGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBs
ZWFzdCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJz
IGFyZSB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ug
d2UgY2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBp
dAorICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2ln
bkJpdENvbnN0YW50ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0
YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hw
b2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKHNpZ25CaXRDb25zdGFudCwgVmFsdWVSZXA6OlNvbWVS
ZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7
CisgICAgfQorICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAg
IEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50
ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNj
cmF0Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJh
bXNbMl0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50
NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsK
KyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsg
Ly8gT09QUzogSW1wbGVtZW50IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQo
RmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQo
RmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhh
biwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAg
IG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBF
cXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENo
ZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1f
cHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1z
WzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAg
ICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMKKyAgICAvKgorICAgIFRtcCBtYXgg
PSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8
dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOworICAgIFRtcCBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmln
aW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBM
ZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7
CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7Cisg
ICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29u
c3RhbnQ7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3Qg
aGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25l
ZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAg
ICAgICAvLyB0aGUgbnVtYmVycyB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQg
aW50ZWdlci4gU2luY2Ugd2UgY2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMg
d2UgaGF2ZSBiMyBkbyBpdAorICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRl
ZC4KKyAgICAgICAgc2lnbkJpdENvbnN0YW50ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0
X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworICAg
IH0KKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBh
dGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGlmIChp
c1g4NigpKSB7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChzaWduQml0Q29uc3RhbnQsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hS
ZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOworICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIEZQ
UlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIGlmIChpc1g4NigpKSB7Cisg
ICAgICAgICAgICBzY3JhdGNoID0gcGFyYW1zLmZwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgIGNv
bnN0YW50ID0gcGFyYW1zWzJdLmZwcigpOworICAgICAgICB9CisgICAgICAgIGppdC50cnVuY2F0
ZUZsb2F0VG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gs
IGNvbnN0YW50KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9
OworfQorCitQYXJ0aWFsUmVzdWx0IEFpcklSR2VuZXJhdG9yOjphZGRTaGlmdChLaW5kIGtpbmQs
IEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9y
bShraW5kLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQo
a2luZCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KyAgICAKKyAgICBhcHBlbmQoTW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUs
IHNoaWZ0LCBtX2VjeCk7CisgICAgYXBwZW5kKGtpbmQsIG1fZWN4LCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK1BhcnRpYWxSZXN1bHQgQWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJT
dWIoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAgIGlmIChp
c1ZhbGlkRm9ybShraW5kLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAg
ICBhcHBlbmQoa2luZCwgbGhzLCByaHMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisgICAgLy8gU3ViIGEsIGIKKyAg
ICAvLyBtZWFucworICAgIC8vIGIgPSBiIFN1YiBhCisgICAgYXBwZW5kKE1vdmUsIGxocywgcmVz
dWx0KTsKKyAgICBhcHBlbmQoa2luZCwgcmhzLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK1BhcnRpYWxSZXN1bHQgQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMoS2lu
ZCBraW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IEFic0Zsb2F0IHx8IGtpbmQgPT0gQWJzRG91Ymxl
KTsKKworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKGtpbmQsIEFy
Zzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIHZhbHVlLCByZXN1bHQp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2
KCkpOworCisgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAgaWYgKGtpbmQgPT0gQWJzRmxv
YXQpIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKH4oMSA8PCAzMSkpLCBjb25zdGFu
dCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0KTsKKyAg
ICAgICAgYXBwZW5kKEFuZEZsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ofigxIDw8IDYzKSksIGNvbnN0YW50KTsKKyAg
ICAgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAgICAg
YXBwZW5kKEFuZERvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07
Cit9CisKK1BhcnRpYWxSZXN1bHQgQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5P
cChLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlz
VmFsaWRGb3JtKGtpbmQsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnczo6VG1wKSkgeworICAgICAg
ICBhcHBlbmQoa2luZCwgbGhzLCByaHMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisKKyAgICAvLyBPcCBhLCBiCisg
ICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBPcCBhCisgICAgLy8gT09QUzogdmVyaWZ5CisgICAg
YXBwZW5kKE1vdmVEb3VibGUsIGxocywgcmVzdWx0KTsKKyAgICBhcHBlbmQoa2luZCwgcmhzLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDZWlsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7
CisgICAgYXBwZW5kKENlaWxGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTXVs
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKE11bDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTdWI+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWIz
MiwgYXJnMCwgYXJnMSk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGNjRMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMkRlbW90ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IGFwcGVuZChDb252ZXJ0RG91YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyTWluPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBn
cmVhdGVyVGhhbk9yRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRC
bG9jaywgQnJhbmNoRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1
YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0Vx
dWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0
U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxv
YXQsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOwor
ICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVx
dWFsKTsKKworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwg
cmVzdWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVh
dGVyVGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMdD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91Ymxl
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBw
ZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRT
dWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRG
bG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7Cisg
ICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5v
dEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBC
cmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiks
IGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250
aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3Vs
dCk7CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vz
c29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247
CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChNdWxEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJEaXY+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRp
bmdQb2ludEJpbk9wKERpdkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgLy8gT09QUzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBmb3Ig
dGhlIGltbXMgYW5kIHR3byBvcGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9IGZwcigp
OworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7CisgICAgVG1w
IHZhbHVlID0gZ3ByKCk7CisKKyAgICAvLyBPT1BTOiBDYW4gZml0IGluIEltbS9CaXRJbW0gaW5z
dGVhZCBvZiBCaWdJbW0/CisgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsK
KyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFw
cGVuZChBbmQzMiwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVU
bzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZm
ZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDMyLCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKwor
ICAgIGFwcGVuZChPcjMyLCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJU
b0Zsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wID0gdG1wKCk7CisgICAgYXBw
ZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91Ymxl
LCB0ZW1wLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJSZWludGVycHJldEkzMj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQW5kNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMk5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NEd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJTcXJ0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9h
dCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NEVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NERpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9P
UFM6IHdoYXQgYWJvdXQgY2hpbGwtbmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGlu
Z1BvaW50QmluT3AoRGl2RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZs
b2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9z
NjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGFwcGVuZChOZWdhdGVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyQW5kPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKEFuZDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJMdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90cj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVSaWdodDY0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0QWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9p
bnRBYnMoQWJzRG91YmxlLCBhcmcwLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvcHlzaWdu
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gT09QUzogV2UgY2FuIGhhdmUg
YmV0dGVyIGNvZGVnZW4gaGVyZSBmb3IgdGhlIGltbXMgYW5kIHR3byBvcGVyYW5kIGZvcm1zIG9u
IHg4NgorICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRt
cCBzaWduID0gZ3ByKCk7CisgICAgVG1wIHZhbHVlID0gZ3ByKCk7CisKKyAgICBhcHBlbmQoTW92
ZURvdWJsZVRvNjQsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
MHg4MDAwMDAwMDAwMDAwMDAwKSwgc2lnbik7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgc2ln
biwgc2lnbik7CisKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAxKTsKKyAg
ICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg3ZmZmZmZmZmZmZmZmZmZmKSwgdmFsdWUpOwor
ICAgIGFwcGVuZChBbmQ2NCwgdGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3I2
NCwgc2lnbiwgdmFsdWUsIHZhbHVlKTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIHZhbHVl
LCByZXN1bHQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRTSTY0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQsIGFyZzAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFJvdGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4gYWRkU2hpZnQoUm90YXRlTGVmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTHQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NU
aGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9Eb3Vi
bGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyR2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXR1cm4gYWRkU2hpZnQoVXJzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVy
dFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcCA9IHRtcCgp
OworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50
NjRUb0Zsb2F0LCB0ZW1wLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJTPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJzaGlmdDMyLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyR2VVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZFNoaWZ0KENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGFwcGVuZChDZWlsRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJHZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0
ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNobD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQz
MiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NEZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKEZsb29yRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJY
b3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoWG9yMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0Zsb2F0LCBhcmcwLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0TWluPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBncmVhdGVyVGhhbk9yRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJl
bnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
aXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIE9yRG91YmxlLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFs
LT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1v
dmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hEb3Vi
bGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBh
cmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJU
aGFuT3JFcXVhbCk7CisKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBNb3ZlRG91Ymxl
LCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIEp1bXApOwor
ICAgIGdyZWF0ZXJUaGFuT3JFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisg
ICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBw
ZW5kKE11bEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTdWI+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWI2
NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlaW50ZXJwcmV0RjMyPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChBZGQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgYXBwZW5kKFN1YkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyT3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoT3IzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
THRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0Uz4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0WG9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE11bD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChNdWw2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3ViPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5k
KFN1YkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRQcm9tb3RlRjMy
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRGbG9hdFRv
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBZGQ+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQWRkRG91Ymxl
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVM+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFVJMzI+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJOZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRSZWludGVycHJl
dEk2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNb3ZlNjRUb0Rv
dWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRXE+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyRmxvb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoRmxvb3JG
bG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJMzI+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9GbG9hdCwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRXF6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJv
KSwgYXJnMCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVpbnRlcnByZXRGNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRT
aHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFVy
c2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFNxcnQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBhcHBlbmQoU3FydERvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0U2hsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0
KExzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJv
dGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUm90
YXRlTGVmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVSaWdodDMyLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyR3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFNJMzI+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIs
IGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjROZWc+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBh
cHBlbmQoTmVnYXRlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJh
c2ljQmxvY2sqIGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBu
b3RFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKwor
ICAgIGFwcGVuZChpc0VxdWFsLCBBbmREb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
YXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGlu
dWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0
KTsKKyAgICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5z
ZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NU
aGFuLCBNb3ZlRG91YmxlLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhhbiwgSnVt
cCk7CisgICAgbGVzc1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1f
Y3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlVT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVTPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQWRkNjQsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgzOCw3ICsxODM4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydQogICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMg
PSAxOwogICAgIH0KICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7IC8v
IE9PUFM6IFRoaXMgbG9va3Mgc3VwZXIgd3JvbmcgZ2l2ZW4gd2UgZG9uJ3Qgc2F5IHdlIGNsb2Ji
ZXIgdGhpcyEKICAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOwogICAgICAg
ICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOwogICAgICAgICBpZiAoaXNYODYoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uY3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2
ICs2MiwzNiBAQCBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5nCiAgICAg
cmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKIH0KIAorY29uc3QgSlNDQ2FsbGlu
Z0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyPiBzdGF0aWNKU0NDYWxs
aW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGlu
Z0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252
ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5j
b25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9yPFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGlu
Z0NvbnZlbnRpb247Cit9CisKK2NvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbkFpciYgd2FzbUNh
bGxpbmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFdh
c21DYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnOwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgp
IHsKKyAgICAgICAgVmVjdG9yPFJlZz4gZ3ByQXJndW1lbnRSZWdpc3RlcnMoR1BSSW5mbzo6bnVt
YmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBn
cHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsK
KworICAgICAgICBWZWN0b3I8UmVnPiBmcHJBcmd1bWVudFJlZ2lzdGVycyhGUFJJbmZvOjpudW1i
ZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgICAgIGZw
ckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOwor
CisgICAgICAgIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoV1RGTW92ZShn
cHJBcmd1bWVudFJlZ2lzdGVycyksIFdURk1vdmUoZnByQXJndW1lbnRSZWdpc3RlcnMpLCBSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9KTsKKworICAgIHJldHVybiBz
dGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDI0MDQ3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCwyNyArNDQsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVk
IGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5cGUpOwordHlwZWRlZiB1bnNpZ25lZCAoKk5leHRP
ZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQpOwogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFk
ZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KIGNsYXNzIENhbGxpbmdDb252ZW50aW9u
IHsKIHB1YmxpYzoKICAgICBDYWxsaW5nQ29udmVudGlvbihWZWN0b3I8UmVnPiYmIGdwckFyZ3Ms
IFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJz
KQotICAgICAgICA6IG1fZ3ByQXJncyhncHJBcmdzKQotICAgICAgICAsIG1fZnByQXJncyhmcHJB
cmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhjYWxsZWVTYXZlUmVnaXN0ZXJz
KQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZNb3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnBy
QXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhX
VEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMpKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJndW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3Ms
IEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0
CisgICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJndW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0Fy
Z3MsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBCMzo6
VmFsdWVSZXA6OnJlZyhyZWdBcmdzW2NvdW50KytdKTsKIAogICAgICAgICBjb3VudCsrOwogICAg
ICAgICBCMzo6VmFsdWVSZXAgcmVzdWx0ID0gQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0
YWNrT2Zmc2V0KTsKLSAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZz
ZXQsIHR5cGUpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNl
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC03MywxMCArNzMsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgQjM6OkludDMy
OgogICAgICAgICBjYXNlIEIzOjpJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFy
Z3VtZW50SW1wbChtX2dwckFyZ3MsIHR5cGUsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgZ3BB
cmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CiAgICAgICAgIGNhc2UgQjM6OkZsb2F0OgogICAg
ICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVu
dEltcGwobV9mcHJBcmdzLCB0eXBlLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAg
ICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIGZwQXJndW1l
bnRDb3VudCwgc3RhY2tPZmZzZXQpOwogICAgICAgICBjYXNlIEIzOjpWb2lkOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE4OSwxOSArMTg5LDE0OSBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJzOwogfTsKIAotaW5saW5lIHVu
c2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUpCit0
ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KK2Ns
YXNzIENhbGxpbmdDb252ZW50aW9uQWlyIHsKK3B1YmxpYzoKKyAgICBDYWxsaW5nQ29udmVudGlv
bkFpcihWZWN0b3I8UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0
ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZNb3Zl
KGdwckFyZ3MpKQorICAgICAgICAsIG1fZnByQXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAgICAg
ICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMpKQor
ICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWlyOjpBcmcgbWFyc2hhbGxBcmd1bWVudElt
cGwoVmVjdG9yPFJlZz4gcmVnQXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIEFpcjo6VG1wKHJlZ0FyZ3NbY291bnQrK10pOworCisgICAgICAgIGNv
dW50Kys7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gQWlyOjpBcmc6OmFkZHIoVG1wKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKSwgc3RhY2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNldCA9
IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgQWlyOjpBcmcgbWFyc2hhbGxBcmd1bWVudChUeXBlIHR5cGUsIHNpemVfdCYgZ3BB
cmd1bWVudENvdW50LCBzaXplX3QmIGZwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBzdGFja09mZnNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5
cGU6OmkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjppNjQ6CisgICAgICAgICAgICByZXR1cm4gbWFy
c2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNr
T2Zmc2V0KTsKKyAgICAgICAgY2FzZSBUeXBlOjpmMzI6CisgICAgICAgIGNhc2UgVHlwZTo6ZjY0
OgorICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlw
ZSwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQor
CitwdWJsaWM6CisgICAgc3RhdGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1
cm4gaGVhZGVyU2l6ZTsgfQorICAgIHZvaWQgc2V0dXBGcmFtZUluUHJvbG9ndWUoQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6
OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9uIHRoaXMgaGVy
ZSBmb3Igbm93LiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhl
cmUgZm9yIG5vdy4iKTsKKworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBnZXRDYWxsZWVQ
YXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBC
Mzo6SW50NjQsIG9yaWdpbik7CisgICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnJlc3VsdENv
bnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjsKKyAgICAgICAgZ2V0Q2FsbGVl
UGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIGdldENh
bGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQu
bW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlv
biwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21F
bnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7CisgICAgICAg
IEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0
VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lz
dGVyKSk7CisgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBC
Mzo6U3RvcmUsIG9yaWdpbiwKKyAgICAgICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQsCisgICAg
ICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2lu
LCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ2FsbGVlKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIHplcm8gaW50byB0aGUgQ29kZUJsb2NrKiBzcG90IGlu
IHRoZSBjYWxsIGZyYW1lLAorICAgICAgICAvLyBidXQgdGhlcmUgYXJlIHBsYWNlcyB0aGF0IGlu
dGVycHJldCBub24tbnVsbCBDb2RlQmxvY2sgc2xvdCB0byBtZWFuIGEgdmFsaWQgQ29kZUJsb2Nr
LgorICAgICAgICAvLyBXaGVuIGRvaW5nIHVud2luZGluZywgd2UnbGwgbmVlZCB0byB2ZXJpZnkg
dGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUgaXMgT0sgd2l0aCBhIG5vbi1udWxsCisgICAgICAgIC8v
IENvZGVCbG9jayBub3QgaW1wbHlpbmcgdGhhdCB0aGUgQ29kZUJsb2NrIGlzIHZhbGlkLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisg
ICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDb2RlQmxvY2sgPSBibG9jay0+YXBwZW5kTmV3PEIz
OjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICog
c2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZh
bHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKKyAgICAgICAgICAgIGJsb2NrLT5hcHBlbmRO
ZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCAwKSwKKyAgICAgICAgICAgIGJsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6QWRkLCBvcmlnaW4sIGZyYW1lUG9pbnRl
ciwgb2Zmc2V0T2ZDb2RlQmxvY2spKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgbG9hZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6OkJhc2ljQmxvY2sqIGJsb2NrLCBCMzo6T3JpZ2lu
IG9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNp
emVfdCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50
ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkK
KyAgICAgICAgICAgIGZ1bmN0b3IobWFyc2hhbGxBcmd1bWVudChzaWduYXR1cmUuYXJndW1lbnQo
aSksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCksIGkpOwor
ICAgIH0KKworICAgIC8vIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3RvciBz
ZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIEIzOjpWYWx1ZSogc2V0dXBDYWxsKEIzOjpQcm9jZWR1cmUm
IHByb2MsIEIzOjpCYXNpY0Jsb2NrKiBibG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4sIGNvbnN0IFZl
Y3RvcjxCMzo6VmFsdWUqPiYgYXJndW1lbnRzLCBCMzo6VHlwZSByZXR1cm5UeXBlLCBjb25zdCBG
dW5jdG9yJiBwYXRjaHBvaW50RnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBn
cEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsK
KyAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKTsKKworICAgICAgICBWZWN0b3I8QjM6OkNvbnN0cmFpbmVkVmFsdWU+IGNvbnN0
cmFpbmVkQXJndW1lbnRzOworICAgICAgICBmb3IgKEIzOjpWYWx1ZSogYXJndW1lbnQgOiBhcmd1
bWVudHMpIHsKKyAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXAgPSBtYXJzaGFsbEFyZ3VtZW50
KGFyZ3VtZW50LT50eXBlKCksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFj
a09mZnNldCk7CisgICAgICAgICAgICBjb25zdHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQoQjM6OkNv
bnN0cmFpbmVkVmFsdWUoYXJndW1lbnQsIHJlcCkpOworICAgICAgICB9CisKKyAgICAgICAgcHJv
Yy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOworCisgICAgICAgIEIzOjpQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50
VmFsdWU+KHByb2MsIHJldHVyblR5cGUsIG9yaWdpbik7CisgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAg
ICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNG
b3JKU0NhbGwoKSk7CisgICAgICAgIHBhdGNocG9pbnRGdW5jdG9yKHBhdGNocG9pbnQpOworICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3IoY29uc3RyYWluZWRBcmd1bWVudHMpOworCisg
ICAgICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgICAgICBjYXNlIEIzOjpWb2lkOgorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGNhc2UgQjM6OkZsb2F0OgorICAgICAg
ICBjYXNlIEIzOjpEb3VibGU6CisgICAgICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJh
aW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQjM6OkludDMyOgorICAgICAgICBjYXNlIEIzOjpJ
bnQ2NDoKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFs
dWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKKyAgICB9CisKKyAgICBjb25z
dCBWZWN0b3I8UmVnPiBtX2dwckFyZ3M7CisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9mcHJBcmdz
OworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBjb25z
dCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7Cit9OworCitpbmxpbmUgdW5zaWdu
ZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KQogewogICAgIHJldHVybiBj
dXJyZW50T2Zmc2V0ICsgc2l6ZW9mKFJlZ2lzdGVyKTsKIH0KIAogY29uc3RleHByIHVuc2lnbmVk
IGpzY0hlYWRlclNpemUgPSBFeGVjU3RhdGU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVv
ZihSZWdpc3Rlcik7Ci10eXBlZGVmIENhbGxpbmdDb252ZW50aW9uPGpzY0hlYWRlclNpemUsIG5l
eHRKU0NPZmZzZXQ+IEpTQ0NhbGxpbmdDb252ZW50aW9uOwotCi10eXBlZGVmIEpTQ0NhbGxpbmdD
b252ZW50aW9uIFdhc21DYWxsaW5nQ29udmVudGlvbjsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZl
bnRpb24gPSBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsK
K3VzaW5nIFdhc21DYWxsaW5nQ29udmVudGlvbiA9IEpTQ0NhbGxpbmdDb252ZW50aW9uOwogY29u
c3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxpbmdDb252ZW50aW9uKCk7CiBjb25zdCBX
YXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogCit1c2luZyBK
U0NDYWxsaW5nQ29udmVudGlvbkFpciA9IENhbGxpbmdDb252ZW50aW9uQWlyPGpzY0hlYWRlclNp
emUsIG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyID0gSlND
Q2FsbGluZ0NvbnZlbnRpb25BaXI7Citjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbkFpciYganNj
Q2FsbGluZ0NvbnZlbnRpb25BaXIoKTsKK2NvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbkFpciYg
d2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360328</attachid>
            <date>2019-01-28 02:07:46 -0800</date>
            <delta_ts>2019-01-28 14:17:30 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>149928</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2
b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBh
Ci0gICAgICAgICAgICAgICAgLy8gdm9pZCByZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVy
ZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lkLgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1w
b3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJl
dFZvaWQKKyAgICAgICAgICAgICAgICAvLyBmb3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVk
UmVncyhBaXI6Okluc3QmKSBmaW5hbDsKICAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJl
Z3MoQWlyOjpJbnN0JikgZmluYWw7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBv
dmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUg
bWFueSBzb21lCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJh
dGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBz
dWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgK
ICAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJl
dmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDExIEBAIENvZGU6On5Db2RlKCkKIHsKIH0K
IAordm9pZCBDb2RlOjplbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYgaml0KQorewor
ICAgIGRlZmF1bHRQcm9sb2d1ZUdlbmVyYXRvcihqaXQsICp0aGlzKTsKK30KKwogdm9pZCBDb2Rl
OjpzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKEJhbmsgYmFuaywgY29uc3QgVmVjdG9yPFJlZz4mIHJl
Z3MpCiB7CiAgICAgcmVnc0luUHJpb3JpdHlPcmRlckltcGwoYmFuaykgPSByZWdzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzUsNiArMzM1LDggQEAgcHVibGljOgogICAgIFJlZ2lzdGVyU2V0IHBpbm5lZFJlZ2lzdGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVkUmVnczsgfQogICAgIAogICAgIFdlYWtSYW5kb20m
IHdlYWtSYW5kb20oKSB7IHJldHVybiBtX3dlYWtSYW5kb207IH0KKworICAgIHZvaWQgZW1pdERl
ZmF1bHRQcm9sb2d1ZShDQ2FsbEhlbHBlcnMmKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIDo6SlNDOjpCMzo6UHJvY2VkdXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21BaXJJUkdl
bmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKKyNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorI2lu
Y2x1ZGUgIldhc21JbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRl
ICJXYXNtT01HUGxhbi5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKKyNpbmNsdWRl
ICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit1c2lu
ZyBuYW1lc3BhY2UgQjM6OkFpcjsKKworc3RydWN0IENvbnN0cmFpbmVkVG1wIHsKKyAgICBDb25z
dHJhaW5lZFRtcChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwID0gQjM6OlZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpCisgICAgICAgIDogdG1wKHRtcCkKKyAgICAgICAgLCByZXAocmVwKQorICAgIHsg
fQorCisgICAgVG1wIHRtcDsKKyAgICBCMzo6VmFsdWVSZXAgcmVwOworfTsKKworY2xhc3MgQWly
SVJHZW5lcmF0b3IgeworcHVibGljOgorICAgIHN0cnVjdCBDb250cm9sRGF0YSB7CisgICAgICAg
IENvbnRyb2xEYXRhKE9yaWdpbiBvcmlnaW4sIFR5cGUgc2lnbmF0dXJlLCBUbXAgcmVzdWx0VG1w
LCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBz
cGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAg
ICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwo
c3BlY2lhbCkKKyAgICAgICAgICAgICwgc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChzaWdu
YXR1cmUgIT0gVHlwZTo6Vm9pZCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXN1
bHRUbXApOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKHNpZ25h
dHVyZSA9PSBUeXBlOjpWb2lkKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbnRyb2xEYXRhKCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEJsb2NrVHlwZTo6SWY6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJJ
ZjogICAgICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJs
b2NrVHlwZTo6QmxvY2s6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJCbG9jazogICAgIik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6TG9v
cDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxvb3A6ICAgICAiKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUb3BMZXZlbDoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiQ29udGludWF0aW9uOiAi
LCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFs
KQorICAgICAgICAgICAgICAgIG91dC5wcmludCgqc3BlY2lhbCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJOb25lIik7CisgICAgICAgIH0KKworICAgICAg
ICBCbG9ja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJsb2NrVHlwZTsgfQorCisgICAgICAg
IFR5cGUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gc2lnbmF0dXJlOyB9CisKKyAgICAgICAg
Ym9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gcmVzdWx0LnNpemUoKTsg
fQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrRm9yQnJhbmNoKCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0SWZUb0Jsb2NrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgICAg
IGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7CisgICAgICAgICAgICBzcGVjaWFsID0gbnVs
bHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IFdoYXQgaXMgdGhpcz8KKyAgICAg
ICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAsIDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEg
UGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRGb3JCcmFuY2goKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFpcklSR2Vu
ZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tUeXBlOworICAgICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7CisgICAgICAgIFJl
c3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHNpZ25hdHVyZTsKKyAgICB9OworCisgICAg
dXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUbXA7CisgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250
cm9sRGF0YTsKKyAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlw
ZSwgMT47CisgICAgdXNpbmcgUmVzdWx0TGlzdCBDb250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAg
ICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNv
bnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlF
eHByZXNzaW9uID0gVG1wIHsgfTsKKworICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmluZzsKKyAg
ICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBlY3RlZDxFcnJvclR5cGU+OworICAgIHVz
aW5nIFJlc3VsdCA9IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
RXJyb3JUeXBlPjsKKyAgICB1c2luZyBQYXJ0aWFsUmVzdWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJy
b3JUeXBlPjsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lO
TElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJn
cykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAv
LyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNlci5oLgorICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGlu
ZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CisgICAgfQorCisjZGVmaW5lIFdBU01fQ09N
UElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZ
KGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhaWwo
X19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworICAgIEFpcklS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxG
dW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENv
bXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJv
d1dhc21FeGNlcHRpb24pOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKKworICAgIC8vIExvY2Fscwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUp
OworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVz
c2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93CisgICAgQ29udHJv
bERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAg
ICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUp
OworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0
dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRh
JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOworCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEm
IGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50
cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwor
CisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
YWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKwor
ICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIGxocywg
RXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFs
UmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRBYnMoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGlu
Z1BvaW50QmluT3AoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBl
IHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4
cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJH
ZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CisKKyAgICBUbXAgY29u
c3RhbnQoQjM6OlR5cGUsIHVpbnQ2NF90IGJpdHMsIE9wdGlvbmFsPE9yaWdpbj4gPSBXVEY6Om51
bGxvcHQpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICB2b2lkIGFwcGVuZChCYXNpY0Jsb2NrKiBibG9jaywgQWlyOjpLaW5kIGtpbmQsIEFyZ3Vt
ZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8vIE9PUFM6IEFkZCBvcmlnaW4K
KyAgICAgICAgYmxvY2stPmFwcGVuZChraW5kLCBudWxscHRyLCBzdGQ6OmZvcndhcmQ8QXJndW1l
bnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQWlyOjpLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywga2luZCwg
c3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgVG1w
IHRtcChCYW5rIGJhbmspIHsgcmV0dXJuIG1fY29kZS5uZXdUbXAoYmFuayk7IH0KKyAgICBUbXAg
Z3ByKCkgeyByZXR1cm4gdG1wKEdQKTsgfQorICAgIFRtcCBmcHIoKSB7IHJldHVybiB0bXAoRlAp
OyB9CisgICAgVG1wIHRtcEZvclR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2
NDoKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6Cisg
ICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0dXJuIGZwcigpOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRtcCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogYWRkUGF0Y2hwb2ludChCMzo6VHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGQ8QjM6OlBhdGNocG9pbnRWYWx1ZT4odHlw
ZSwgQjM6Ok9yaWdpbigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJn
cz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBU
bXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2lu
dChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KHRoZUFy
Z3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2
b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50
VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAg
ICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwpCisgICAgICAgICAgICBtX3BhdGNocG9pbnRTcGVj
aWFsID0gbV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6UGF0Y2hwb2ludFNw
ZWNpYWw+KCkpOworCisgICAgICAgIEluc3QgaW5zdChQYXRjaCwgcGF0Y2gsIEFyZzo6c3BlY2lh
bChtX3BhdGNocG9pbnRTcGVjaWFsKSk7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChwYXRjaC0+dHlwZSgpICE9IEIzOjpWb2lkKTsKKyAgICAgICAgICAgIGluc3Qu
YXJncy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlQo
cGF0Y2gtPnR5cGUoKSA9PSBCMzo6Vm9pZCk7CisgICAgICAgIAorICAgICAgICBhdXRvIGFyZ3Mg
PSBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIDg+Ojpmcm9tKHRoZUFyZ3MuLi4pOworICAgICAgICBm
b3IgKENvbnN0cmFpbmVkVG1wJiB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBV
Z2gsIHRoaXMgaXMgc3VwZXIgY3JhcHB5IHRvIGp1c3QgdXNlIG51bGxwdHIgZm9yIEIzOjpWYWx1
ZSogaGVyZS4KKyAgICAgICAgICAgIC8vIEkgdGhpbmsgdGhpcyB3aWxsIGp1c3Qgd29yaywgYnV0
IG91ciBhbHRlcm5hdGl2ZSBvcHRpb25zIGlzIHRvIGFic3RyYWN0CisgICAgICAgICAgICAvLyBv
ciByZWludmVudCBwYXJ0IG9mIFBhdGNocG9pbnRTcGVjaWFsLgorICAgICAgICAgICAgcGF0Y2gt
PmFwcGVuZChudWxscHRyLCB0bXAucmVwKTsKKyAgICAgICAgICAgIHN3aXRjaCAodG1wLnJlcC5r
aW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Cisg
ICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAudG1wKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAg
ICAgICAgICAgICAvLyBPT1BTOiBJIHRoaW5rIHdlIHdhbnQgdHlwZSBoZXJlIHRvIGRpc3Rpbmd1
aXNoIGkzMi9pNjMgYW5kIGYzMi9mNjQKKyAgICAgICAgICAgICAgICBhcHBlbmQoYmFzaWNCbG9j
aywgdG1wLnRtcC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgdG1wLnRtcCwgdG1wLnJlcC5y
ZWcoKSk7CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAodG1wLnJlcC5yZWco
KSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVS
ZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2FudCB0
eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2MyBhbmQgZjMyL2Y2NAorICAgICAgICAgICAg
ICAgIGF1dG8gYXJnID0gQXJnOjpjYWxsQXJnKCkKKyAgICAgICAgICAgICAgICBhcHBlbmQoYmFz
aWNCbG9jaywgdG1wLnRtcC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgdG1wLnRtcCwgYXJn
KTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQuaXNSZWcoKSkKKyAgICAgICAgICAgIHBhdGNo
LT5sYXRlQ2xvYmJlcmVkKCkuY2xlYXIocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRjaC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBp
LS07KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChncHIoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHBhdGNoLT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKGZwcigpKTsKKworICAgICAgICBiYXNpY0Jsb2NrLT5hcHBl
bmQoV1RGTW92ZShpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5j
aCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYg
ZW1pdEJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICAv
LyBXZSBmYWlsIGFsb25nIHRoZSAidHJ1dGh5IiBlZGdlIG9mICdicmFuY2gnCisKKyAgICAgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJh
c2ljQmxvY2sqIGZhaWxlZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAg
ZW1pdEJyYW5jaCgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWls
ZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgYXV0byogZmFpbGVkUGF0Y2hwb2ludCA9IGFk
ZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBmYWlsZWRQYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZmFpbGVkLCBmYWlsZWRQ
YXRjaHBvaW50LCBUbXAoKSk7CisgICAgICAgIGFwcGVuZChmYWlsZWQsIE9vcHMpOworCisgICAg
ICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKHZvaWQqIGZ1bmMsIFRtcCBy
ZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICB7CisgICAgICAgIGVtaXRDQ2FsbChtX2N1cnJlbnRC
bG9jaywgZnVuYywgcmVzdWx0LCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0K
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRDQ2FsbChCYXNp
Y0Jsb2NrKiBibG9jaywgdm9pZCogZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAg
IHsKKyAgICAgICAgSW5zdCBpbnN0KEFpcjo6Q0NhbGwsIG51bGxwdHIpOworCisgICAgICAgIFRt
cCBjYWxsZWUgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRhZ0NG
dW5jdGlvblB0cjx2b2lkKj4oZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKworICAgICAgICBhdXRvIGFyZ3MgPSBz
dGQ6Om1ha2VfdHVwbGUodGhlQXJncy4uLik7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IGFyZ3Mp
CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChpKSkp
OworCisgICAgICAgIGJsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgfQorCisgICAg
c3RhdGljIE9wY29kZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAg
cmV0dXJuIE1vdmUzMjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICByZXR1
cm4gTW92ZTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICByZXR1cm4gTW92
ZUZsb2F0OworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBNb3Zl
RG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZW1pdFRocm93RXhjZXB0
aW9uKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisgICAgdm9pZCBlbWl0VGllclVw
Q2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4pOworCisgICAgRXhwcmVz
c2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CisgICAgRXhwcmVzc2lvblR5
cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJf
dCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworCisg
ICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Npb25U
eXBlIHNvdXJjZSk7CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKworICAgIHZv
aWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxlZnQs
IEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKworICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJO
IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CisKKyAg
ICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sqLCBUbXApOworICAg
IGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVzIH07CisgICAgdm9p
ZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwg
Y29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBUbXAgaW5zdGFuY2UsIEJhc2ljQmxvY2sqKTsKKwor
ICAgIE9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzogV2UgbmVlZCB0byBtYWtlIGFuIEFpcjo6T3Jp
Z2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGZyb20gQjMgY29kZS4KKworICAgIEZ1bmN0
aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CisgICAgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9k
ZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgY29uc3QgQ29tcGlsYXRpb25N
b2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CisgICAg
Y29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKKyAgICBjb25zdCBU
aWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CisKKyAgICBQcm9jZWR1cmUmIG1fcHJv
YzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBu
dWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sgeyBudWxscHRyIH07CisgICAg
VmVjdG9yPHN0ZDo6cGFpcjxUbXAsIFR5cGU+PiBtX2xvY2FsczsKKyAgICBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFj
aCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3Vs
ZCBiZSBwYXRjaGVkIHdpdGguCisgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisgICAgVG1wIG1faW5zdGFuY2VWYWx1
ZTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5j
ZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgorICAgIGJvb2wgbV91c2VzSW5zdGFu
Y2VWYWx1ZSB7IGZhbHNlIH07CisgICAgVG1wIGluc3RhbmNlVmFsdWUoKQorICAgIHsKKyAgICAg
ICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7CisgICAgICAgIHJldHVybiBtX2luc3RhbmNl
VmFsdWU7CisgICAgfQorCisgICAgdWludDMyX3QgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgeyAw
IH07CisKKyAgICBCMzo6UGF0Y2hwb2ludFNwZWNpYWwqIG1fcGF0Y2hwb2ludFNwZWNpYWwgeyBu
dWxscHRyIH07Cit9OworCisvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2ZSB1
bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJpdCBv
ZmZzZXRzIGluIEIzLgoraW50MzJfdCBBaXJJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09m
ZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzZXQpCit7CisgICAgaWYgKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgeworICAgICAgICBUbXAgcHJldmlvdXNQ
dHIgPSBwdHI7CisgICAgICAgIHB0ciA9IGdwcigpOworICAgICAgICBUbXAgY29uc3RhbnQgPSBn
cHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGNvbnN0YW50
KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjb25zdGFudCwgcHJldmlvdXNQdHIsIHB0cik7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIEFp
cklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBibG9j
aywgVG1wIGluc3RhbmNlKQoreworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAg
ICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAg
ICBpZiAoQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2Ny
YXRjaFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5z
dGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgaml0LnN0b3Jl
V2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAg
ICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJl
cnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwg
d2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBUaGlzIHBy
ZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11
dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpWb2lkKTsKKyAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Cisg
ICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6
SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKKyAg
ICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFIpKTsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUjsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgeworICAg
ICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7Cisg
ICAgfSk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsK
K30KKworQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGls
YXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwg
dW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCisg
ICAgOiBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9jb21waWxhdGlv
bk1vZGUoY29tcGlsYXRpb25Nb2RlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5k
ZXgpCisgICAgLCBtX3RpZXJVcCh0aWVyVXApCisgICAgLCBtX3Byb2MocHJvY2VkdXJlKQorICAg
ICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCisgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
KHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQoreworICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgbV9yb290QmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKworICAgIC8v
IEZJWE1FIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0aGVy
ZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMgd2FzbSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZvciBu
b3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKKyAgICBj
b25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86
OmdldCgpOworCisgICAgbV9tZW1vcnlCYXNlR1BSID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9p
bnRlcjsKKyAgICBtX2NvZGUucGluUmVnaXN0ZXIobV9tZW1vcnlCYXNlR1BSKTsKKworICAgIG1f
d2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBv
aW50ZXI7CisgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIG1fY29kZS5w
aW5SZWdpc3RlcihtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOworCisgICAgaWYgKG1vZGUgIT0g
TWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOworICAgICAgICBmb3IgKGNvbnN0
IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3Rl
cnMpCisgICAgICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIp
OworICAgIH0KKworICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5rczo6
c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisK
KyAgICBpZiAoaW5mby5tZW1vcnkpIHsKKyAgICAgICAgbV9jb2RlLnNldFdhc21Cb3VuZHNDaGVj
a0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7Cisg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgICAgICAgICAgY2FzZSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBp
bm5lZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgSW52YWxpZEdQUlJlZyA9PSBwaW5uZWRH
UFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNN
ZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgewor
ICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAgICAgLy8g
TW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8gYW4gZXhwbGlj
aXQKKyAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJlbHkg
b24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0CisgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRz
IGFjY2Vzc2VzLiBGYXVsdFNpZ25hbEhhbmRsZXIgbm9uZXRoZWxlc3MgbmVlZHMgdGhlCisgICAg
ICAgICAgICAvLyB0aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRvIHRoYXQgdGh1
bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2Nv
ZGUuc2V0TnVtRW50cnlwb2ludHMoMSk7CisKKyAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0g
Q29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9n
dWVTY3JhdGNoKDIpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworCisgICAgUmVmPEIzOjpB
aXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRh
c2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQ
cm9sb2d1ZShqaXQsIGNvZGUpOworCisgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKS5zY3JhdGNoR1BSKDApOworICAgICAgICBhdXRvIG1vdmVMb2Nh
dGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NvbXBpbGF0aW9u
LCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBj
b21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdh
c21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Cisg
ICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IENoZWNrZWQ8aW50MzJf
dD4gd2FzbUZyYW1lU2l6ZSA9IG1fY29kZS5mcmFtZVNpemUoKTsKKyAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIG1pbmltdW1QYXJlbnRDaGVja1NpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCAxMDI0KTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGV4dHJhRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgc3RkOjptYXg8dWludDMyX3Q+KAorICAgICAgICAgICAgICAgIC8vIFRoaXMg
YWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIHRl
cm1pbmFsIG5vZGVzIGluIHRoZSBjYWxsCisgICAgICAgICAgICAgICAgLy8gdHJlZSwgKGUuZyB0
aGV5IGRvbid0IG1ha2UgYW55IGNhbGxzKSBhbmQgaGF2ZSBhIHNtYWxsIGVub3VnaCBmcmFtZSBz
aXplLiBUaGlzIHdvcmtzIGJ5CisgICAgICAgICAgICAgICAgLy8gaGF2aW5nIGFueSBzdWNoIHRl
cm1pbmFsIG5vZGUgaGF2ZSBpdHMgcGFyZW50IGNhbGxlciBpbmNsdWRlIHNvbWUgZXh0cmEgc2l6
ZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAvLyBvd24gY2hlY2sgZm9yIGl0LiBUaGUgZ29hbCBo
ZXJlIGlzIHR3b2ZvbGQ6CisgICAgICAgICAgICAgICAgLy8gMS4gRW1pdCBsZXNzIGNvZGUuCisg
ICAgICAgICAgICAgICAgLy8gMi4gVHJ5IHRvIHNwZWVkIHRoaW5ncyB1cCBieSBza2lwcGluZyBz
dGFjayBjaGVja3MuCisgICAgICAgICAgICAgICAgbWluaW11bVBhcmVudENoZWNrU2l6ZSwKKyAg
ICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgaW4g
dGhlIFdhc20gLT4gRW1iZWRkZXIgY2FsbCBJQyBzdHViLiBTaW5jZSB0aGVzZSB3aWxsCisgICAg
ICAgICAgICAgICAgLy8gc3BpbGwgYWxsIGFyZ3VtZW50cyB0byB0aGUgc3RhY2ssIHdlIGVuc3Vy
ZSB0aGF0IGEgc3RhY2sgY2hlY2sgaGVyZSBjb3ZlcnMgdGhlCisgICAgICAgICAgICAgICAgLy8g
c3RhY2sgdGhhdCBzdWNoIGEgc3R1YiB3b3VsZCB1c2UuCisgICAgICAgICAgICAgICAgKENoZWNr
ZWQ8dWludDMyX3Q+KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzKSAqIHNpemVvZihSZWdpc3Rlcikg
KyBqc2NDYWxsaW5nQ29udmVudGlvbigpLmhlYWRlclNpemVJbkJ5dGVzKCkpLnVuc2FmZUdldCgp
CisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGNvbnN0IGludDMyX3QgY2hlY2tTaXplID0g
bV9tYWtlc0NhbGxzID8gKHdhc21GcmFtZVNpemUgKyBleHRyYUZyYW1lU2l6ZSkudW5zYWZlR2V0
KCkgOiB3YXNtRnJhbWVTaXplLnVuc2FmZUdldCgpOworICAgICAgICAgICAgYm9vbCBuZWVkVW5k
ZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6
OnJlc2VydmVkWm9uZVNpemUoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNr
ID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6
ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CisKKyAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGxl
YWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6ZSBp
cyB3aXRoaW4KKyAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNhbGxl
ciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCisgICAgICAgICAgICBpZiAobmVl
ZHNPdmVyZmxvd0NoZWNrKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIo
KS5wcm9sb2d1ZVNjcmF0Y2goMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNl
RmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFu
Y2UoY29udGV4dEluc3RhbmNlKTsKKworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBvdmVyZmxvdzsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobmVlZFVuZGVyZmxv
d0NoZWNrKSkKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaDEsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tP
dmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNr
IGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29y
cmVjdC4KKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBh
bGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVl
ZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0
IGFjdHVhbGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9p
bnQgY29uc2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNo
ZWNrKSB3aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7CisKKyAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBv
aW50KFdURk1vdmUocHJvbG9ndWVHZW5lcmF0b3IpKTsKKworICAgIGlmIChDb250ZXh0Ojp1c2VG
YXN0VExTKCkpIHsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZ3ByKCk7CisgICAgICAgIC8v
IE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gb25seSBkbyB0aGlzIGlmIHdlIHVzZSBpbnN0YW5jZSB2
YWx1ZS4KKyAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChjb250ZXh0SW5zdGFuY2UpLCBtX2luc3Rh
bmNlVmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBUbXAoY29u
dGV4dEluc3RhbmNlKTsKKworICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKKyAgICBtX2xv
Y2Fscy5ncm93KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVHlw
ZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAg
ICAgICAgbV9sb2NhbHNbaV0gPSB7IGdwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAg
ICAgICAgbV9sb2NhbHNbaV0gPSB7IGZwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5s
b2FkQXJndW1lbnRzKHNpZ25hdHVyZSwgWyZdIChjb25zdCBBaXI6OkFyZyYgYXJnLCB1bnNpZ25l
ZCBpKSB7CisgICAgICAgIGlmIChhcmcuaXNUbXAoKSkgeworICAgICAgICAgICAgSW5zdCBpbnN0
OworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KE1vdmUzMiwg
bnVsbHB0ciwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgICAgICBpbnN0ID0gSW5z
dChNb3ZlLCBudWxscHRyLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgICAgIGlu
c3QgPSBJbnN0KE1vdmVGbG9hdCwgbnVsbHB0ciwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgICAgICBpbnN0ID0gSW5zdChNb3ZlRG91YmxlLCBudWxscHRyLCBhcmcsIG1fbG9jYWxz
W2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0KDAsIFdURk1vdmUoaW5z
dCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGFyZy5pc0FkZHIoKSk7
CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICAg
ICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgYXJnLCBt
X2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgYXJnLCBtX2xvY2Fs
c1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5
cGU6OkYzMjoKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCBhcmcsIG1fbG9jYWxz
W2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZTo6RjY0OgorICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBhcmcsIG1fbG9jYWxz
W2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgZW1pdFRpZXJVcENoZWNrKFRpZXJVcENv
dW50OjpmdW5jdGlvbkVudHJ5RGVjcmVtZW50KCksIEIzOjpPcmlnaW4oKSk7Cit9CisKK3ZvaWQg
QWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNo
ZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1h
dGlvbiYgbWVtb3J5LCBUbXAgaW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmxvY2ssIGluc3RhbmNl
KTsKKworICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdDo6WWVzKSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNr
IGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxXYXNtSW5z
dGFuY2UqPihudWxscHRyKS0+Y2FjaGVkU3RhY2tMaW1pdCgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90
KSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFu
Y2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRTdGFja0xpbWl0KCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFRtcCB0ZW1w
ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgQXJnOjphZGRyKGluc3RhbmNl
VmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSwg
dGVtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgQXJnOjphZGRyKHRlbXApLCB0ZW1w
KTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCB0ZW1wLCBBcmc6OmFkZHIoaW5zdGFuY2VW
YWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICB9CisK
KyAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBw
aW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgIFJlZ2lzdGVy
U2V0IGNsb2JiZXJzOworICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9y
eVBvaW50ZXIpOworICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdp
c3RlcnMpCisgICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOworCisg
ICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAg
ICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBlZmZlY3RzLndy
aXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdl
Ojp0b3AoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgICAg
IHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlcnMpOworCisgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNl
TWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBjb25z
dCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CisgICAgICAgICAg
ICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAgICAgICAgQVNTRVJUKCFzaXpl
UmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3Rh
cnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2
ZSB0byAwLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBh
cmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3Nb
MF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9KTsK
KworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOwor
ICAgIH0KK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFRocm93RXhjZXB0aW9uKENDYWxs
SGVscGVycyYgaml0LCBFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvblN0dWIgPSBqaXQuanVt
cCgpOworCisgICAgaml0LmFkZExpbmtUYXNrKFtqdW1wVG9FeGNlcHRpb25TdHViXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0
aW9uU3R1YiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xl
dG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkp
OworICAgIH0pOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUs
IHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ2hlY2tlZDx1aW50MzJf
dCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gY291bnQ7CisgICAgdG90YWxC
eXRlc0NoZWNrZWQgKz0gbV9sb2NhbHMuc2l6ZSgpOworICAgIHVpbnQzMl90IHRvdGFsQnl0ZXM7
CisgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoKHRvdGFsQnl0ZXNDaGVja2VkLnNhZmVHZXQodG90
YWxCeXRlcykgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgfHwgIW1fbG9jYWxzLnRyeVJl
c2VydmVDYXBhY2l0eSh0b3RhbEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwg
dG90YWxCeXRlcywgIiBsb2NhbHMiKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6
OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6IHsKKyAgICAgICAgICAgIFRtcCBsb2NhbCA9
IGdwcigpOworICAgICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHsgbG9jYWwsIHR5
cGUgfSk7CisgICAgICAgICAgICBhcHBlbmQoWG9yNjQsIGxvY2FsLCBsb2NhbCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAg
Y2FzZSBUeXBlOjpGNjQ6IHsKKyAgICAgICAgICAgIFRtcCBsb2NhbCA9IGZwcigpOworICAgICAg
ICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHsgbG9jYWwsIHR5cGUgfSk7CisgICAgICAg
ICAgICBUbXAgdGVtcCA9IGdwcigpOworICAgICAgICAgICAgLy8gSUVFRSA3NTQgIjAiIGlzIGp1
c3QgaW50MzIvNjQgemVyby4KKyAgICAgICAgICAgIGFwcGVuZChYb3I2NCwgdGVtcCwgdGVtcCk7
CisgICAgICAgICAgICBhcHBlbmQodHlwZSA9PSBUeXBlOjpmMzIgPyBNb3ZlMzJUb0Zsb2F0IDog
TW92ZTY0VG9Eb3VibGUsIHRlbXAsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyAvLyBPT1BTOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9sb2NhbHMuc2l6ZSgpID09IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOyAvLyBX
ZSBoYW5kbGUgYXJndW1lbnRzIGluIHRoZSBwcm9sb2d1ZQorICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2lu
ZGV4XS5maXJzdCk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZh
bHVlVHlwZShtX2xvY2Fsc1tpbmRleF0uc2Vjb25kKSwgbV9sb2NhbHNbaW5kZXhdLmZpcnN0LCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFVu
cmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHVucmVhY2hhYmxlID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgdW5yZWFjaGFibGUt
PnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpVbnJlYWNoYWJsZSk7CisgICAgfSk7CisgICAgdW5yZWFjaGFi
bGUtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jv
d01lbW9yeSkodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAodm9pZCogY2FsbEZyYW1l
LCBJbnN0YW5jZSogaW5zdGFuY2UsIGludDMyX3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAg
ICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgICAgICBpZiAo
ZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGF1dG8gZ3Jvd24g
PSBpbnN0YW5jZS0+bWVtb3J5KCktPmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlm
ICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAg
ICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAg
ICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAg
ICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgor
ICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdy
b3duLnZhbHVlKCkucGFnZUNvdW50KCk7CisgICAgfTsKKworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGVtaXRDQ2FsbChncm93TWVtb3J5LCByZXN1bHQsIG1fZnJhbWVQb2ludGVyLCBpbnN0YW5j
ZVZhbHVlKCksIGRlbHRhKTsKKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0
b3JlQ2FjaGVkU3RhY2tMaW1pdDo6Tm8sIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwg
bV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8
TWVtb3J5Kj4obnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2Vu
IHJlbGllcyBvbiB0aGlzIHNpemUiKTsKKworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRt
cCB0ZW1wMiA9IGdwcigpOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZv
cm0oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpLCBCMzo6V2lkdGg2NCkpOwor
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCB0ZW1wMSk7CisgICAgY29uc3RleHByIHVpbnQzMl90
IHNoaWZ0VmFsdWUgPSAxNjsKKyAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUg
PT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93
IHRvIGJlIGNvcnJlY3QuIik7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKDE2KSwgdGVtcDIp
OworICAgIGFkZFNoaWZ0KFVyc2hpZnQ2NCwgdGVtcDEsIHRlbXAyLCByZXN1bHQpOworICAgIGFk
ZChNb3ZlMzIsIHJlc3VsdCwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmly
c3QpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLmZpcnN0
KSwgdmFsdWUsIG1fbG9jYWxzW2luZGV4XS5maXJzdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVHlwZSB0eXBlID0gbV9pbmZv
Lmdsb2JhbHNbaW5kZXhdLnR5cGU7CisKKyAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOwor
CisgICAgVG1wIHRlbXAgPSBncHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxp
ZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAg
ICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNl
dE9mR2xvYmFscygpKSwgdGVtcCk7CisKKyAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVDYXN0PGlu
dDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgaWYgKEFyZzo6aXNWYWxpZEFk
ZHJGb3JtKG9mZnNldCwgQjM6OndpZHRoRm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQorICAgICAg
ICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0
KSwgcmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCB0ZW1wMik7CisgICAgICAgIGFw
cGVuZChBZGQ2NCwgdGVtcDIsIHRlbXAsIHRlbXApOworICAgICAgICBhcHBlbmQobW92ZU9wRm9y
VmFsdWVUeXBlKHR5cGUpLCBBcmc6OmFkZHIodGVtcCksIHJlc3VsdCk7CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAg
dGVtcCA9IGdwcigpOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0o
SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxz
KCkpLCB0ZW1wKTsKKworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBl
OworCisgICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVv
ZihSZWdpc3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3
aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZh
bHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmJpZ0ltbShvZmZzZXQpLCB0ZW1wMik7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgdGVtcDIsIHRl
bXAsIHRlbXApOworICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCB2YWx1
ZSwgQXJnOjphZGRyKHRlbXApKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCitpbmxp
bmUgRXhwcmVzc2lvblR5cGUgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2lu
dGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6
ZU9mT3BlcmF0aW9uKQoreworICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOworCisgICAgc3dp
dGNoIChtX21vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMhCisKKyAgICAgICAg
Ly8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3QgdGhlcmVm
b3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50IG1lbW9y
eSBzaXplLgorICAgICAgICAvL0FTU0VSVChtX21lbW9yeVNpemVHUFIpOworICAgICAgICAvL0FT
U0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOworICAgICAgICAvL21fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIG1fbWVtb3J5U2l6ZUdQUiwgcG9pbnRlciwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0g
MSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFs
aW5nOiB7CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQgNEdpQityZWR6b25lIGZv
ciB0aGlzIG1lbW9yeS4gT25seSB0aGUgdXNlci1hbGxvY2F0ZWQgcGFnZXMgYXJlIGFkZHJlc3Nh
YmxlLCBjb250aWd1b3VzbHkgaW4gcmFuZ2UgWzAsIGN1cnJlbnRdLAorICAgICAgICAvLyBhbmQg
ZXZlcnl0aGluZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05FLiBXZSBkb24ndCBuZWVkIHRvIHBl
cmZvcm0gYW55IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0aGUgNEdpQiByYW5nZSBiZWNhdXNl
IFdlYkFzc2VtYmx5IHJlZ2lzdGVyCisgICAgICAgIC8vIG1lbW9yeSBhY2Nlc3NlcyBhcmUgMzIt
Yml0LiBIb3dldmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyICsgb2Zmc2V0IGFjY2Vzc2VzIHBlcmZv
cm0gdGhlIGFkZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nlc3MgYWJvdmUK
KyAgICAgICAgLy8gdGhlIDMyLWJpdCBsaW1pdCAodGhlIG9mZnNldCBpcyB1bnNpZ25lZCAzMi1i
aXQpLiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgb2Zmc2V0cywgYW5kIHdlJ2xs
IGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueQorICAgICAgICAvLyByZWdpc3RlciArIGxhcmdl
IG9mZnNldCBhY2Nlc3MuIFdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBiZSBnZW5lcmF0ZWQgZnJl
cXVlbnRseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgdGhhdCByZWdp
c3RlciArIGxhcmdlIG9mZnNldCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3JlZHpvbmUgc2luY2UgdGhh
dCdzIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lkIG92ZXJmbG93aW5nIHRo
ZQorICAgICAgICAvLyBQUk9UX05PTkUgcmVnaW9uLCBidXQgaXQncyBiZXR0ZXIgaWYgd2UgdXNl
IGEgc21hbGxlciBpbW1lZGlhdGUgYmVjYXVzZSBpdCBjYW4gY29kZWdlbnMgYmV0dGVyLiBXZSBr
bm93IHRoYXQgYW55dGhpbmcgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICAvLyB0aGFuIHRo
ZSBkZWNsYXJlZCAnbWF4aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0
IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQgJ21heGltdW0nIHRoZW4gd2Ug
c3RpbGwga25vdyB0aGF0CisgICAgICAgIC8vIGFueSBhY2Nlc3MgZXF1YWwgdG8gb3IgZ3JlYXRl
ciB0aGFuIDRHaUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUgcmVkem9uZS4KKyAgICAg
ICAgaWYgKG9mZnNldCA+PSBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKSkgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUyEKKyAgICAgICAg
ICAgIC8vc2l6ZV90IG1heGltdW0gPSBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSA/IG1faW5mby5t
ZW1vcnkubWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCk7CisgICAgICAgICAgICAvL21fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5k
c0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIHNpemVPZk9wZXJhdGlvbiAr
IG9mZnNldCAtIDEsIG1heGltdW0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICB9CisKKyAgICBUbXAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcG9p
bnRlciwgcmVzdWx0KTsKKyAgICBhcHBlbmQoQWRkNjQsIFRtcChtX21lbW9yeUJhc2VHUFIpLCBy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZM
b2FkT3AoTG9hZE9wVHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2Fk
OFU6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoK
KyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
MzJMb2FkMTZVOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgcmV0
dXJuIDI7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDMyUzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpGMzJMb2FkOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICBy
ZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
aW5saW5lIFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIGludDMyX3Qgb2Zm
c2V0ID0gZml4dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIFRt
cCBpbW1UbXA7CisgICAgVG1wIG5ld1B0cjsKKyAgICBUbXAgcmVzdWx0OworCisgICAgYXV0byBs
b2FkQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNl
dCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mTG9hZE9wKG9wKSkpKQorICAgICAgICAgICAgcmV0
dXJuIEFyZzo6YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBpbW1UbXAgPSBncHIoKTsK
KyAgICAgICAgbmV3UHRyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0lt
bShvZmZzZXQpLCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIGltbVRtcCwgcG9pbnRl
ciwgbmV3UHRyKTsKKyAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihuZXdQdHIpOworICAgIH07CisK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRv
MzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
ICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAg
ICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3VsdCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOiB7CisgICAg
ICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDgsIGxvYWRBcmcoKSwgcmVz
dWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkOFU6IHsKKyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVkIGFub3RoZXIgemV4dCBoZXJlPwor
ICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4LCBsb2FkQXJnKCks
IHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDE2UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExv
YWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOiB7CisgICAgICAgIHJl
c3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbG9h
ZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHJlc3Vs
dCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkMTZVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQo
TG9hZDE2LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VTogeworICAgICAgICAvLyBPT1BTOiBEbyBJIG5l
ZWQgYW5vdGhlciB6ZXh0IGhlcmU/CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBh
cHBlbmQoTG9hZDE2LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQzMlU6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3Zl
MzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAg
ICAgICBhcHBlbmQoTW92ZTMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChT
aWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDogeworICAgICAgICBy
ZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgbG9hZEFyZygpLCByZXN1
bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExv
YWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRG91Ymxl
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5
cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVp
bnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLT50
eXBlKCkgPT0gSW50MzIpOworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJf
dD4ob2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4g
dGhvdWdoIHRoaXMgaXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0
aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRp
bWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogcGF0Y2ggPSBhZGRQ
YXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpc10g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBh
dGNocG9pbnQocGF0Y2gsIFRtcCgpKTsKKworICAgICAgICAvLyBXZSB3b24ndCByZWFjaCBoZXJl
LCBzbyB3ZSBqdXN0IHBpY2sgYSByYW5kb20gcmVnLgorICAgICAgICBzd2l0Y2ggKG9wKSB7Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQ4VToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAg
IHJlc3VsdCA9IGdwcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6RjMyTG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQgPSBlbWl0TG9h
ZE9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVP
ZkxvYWRPcChvcCkpLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIHVp
bnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkg
eworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBl
OjpJNjRTdG9yZTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okkz
MlN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgcmV0
dXJuIDI7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9w
VHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAg
ICAgcmV0dXJuIDQ7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2lubGluZSB2b2lkIEFpcklSR2VuZXJh
dG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCit7CisgICAgaW50MzJfdCBv
ZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOworCisgICAg
VG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgYXV0byBzdG9yZUFyZyA9IFsmXSAo
KSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZv
ckJ5dGVzKHNpemVPZlN0b3JlT3Aob3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRy
KHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIGltbVRtcCA9IGdwcigpOworICAgICAgICBuZXdQ
dHIgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGlt
bVRtcCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQdHIpOwor
ICAgICAgICByZXR1cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9w
VHlwZTo6STMyU3RvcmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4LCB2YWx1ZSwgc3RvcmVBcmco
KSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICAgICAgYXBwZW5kKFN0b3Jl
MTYsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKKyAg
ICAgICAgYXBwZW5kKE1vdmUzMiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUs
IHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9w
VHlwZTo6RjMyU3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHZhbHVlLCBzdG9yZUFy
ZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6
CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOworCisg
ICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZTdG9y
ZU9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlzIHByb3Zh
Ymx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28gd2UgaGF2
ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gSG93ZXZl
ciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY2NDM1CisgICAgICAgIGF1dG8qIHRocm93RXhjZXB0aW9uID0gYWRkUGF0Y2hwb2ludChC
Mzo6Vm9pZCk7CisgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
KyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6
Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRj
aHBvaW50KHRocm93RXhjZXB0aW9uLCBUbXAoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRT
dG9yZU9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNp
emVPZlN0b3JlT3Aob3ApKSwgdmFsdWUsIG9mZnNldCk7CisKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG5vblplcm8uaXNH
UCgpID09IHplcm8uaXNHUCgpKTsKKyAgICByZXN1bHQgPSBub25aZXJvLmlzR1AoKSA/IGdwcigp
IDogZnByKCk7CisgICAgaWYgKG5vblplcm8uaXNHUCgpKQorICAgICAgICBhcHBlbmQoTW92ZSwg
bm9uWmVybywgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBu
b25aZXJvLCByZXN1bHQpOworCisgICAgQmFzaWNCbG9jayogaXNaZXJvID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisKKyAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoWmVybyksIGNvbmRpdGlv
biwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1plcm8s
IGNvbnRpbnVhdGlvbik7CisKKyAgICBpZiAoemVyby5pc0dQKCkpCisgICAgICAgIGFwcGVuZChp
c1plcm8sIE1vdmUsIHplcm8sIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQoaXNa
ZXJvLCBNb3ZlRG91YmxlLCB6ZXJvLCByZXN1bHQpOworICAgIGFwcGVuZChpc1plcm8sIEp1bXAp
OworICAgIGlzWmVyby0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJy
ZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFp
cklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIz
OjpPcmlnaW4gb3JpZ2luKQoreworICAgIGlmICghbV90aWVyVXApCisgICAgICAgIHJldHVybjsK
KworICAgIFRtcCBjb3VudGRvd25QdHIgPSBncHIoKTsKKyAgICBUbXAgb2xkQ291bnRkb3duID0g
Z3ByKCk7CisgICAgVG1wIG5ld0NvdW50ZG93biA9IGdwcigpOworCisgICAgYXBwZW5kKE1vdmUs
IEFyZzo6YmlnSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVwKSksIGNvdW50
ZG93blB0cik7CisgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNvdW50ZG93blB0ciksIG9s
ZENvdW50ZG93bik7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRJbW1Gb3JtKGRl
Y3JlbWVudENvdW50KSk7CisgICAgYXBwZW5kKE1vdmUzMiwgb2xkQ291bnRkb3duLCBuZXdDb3Vu
dGRvd24pOworICAgIGFwcGVuZChTdWIzMiwgQXJnOjppbW0oZGVjcmVtZW50Q291bnQpLCBuZXdD
b3VudGRvd24pOworICAgIGFwcGVuZChNb3ZlMzIsIG5ld0NvdW50ZG93biwgQXJnOjphZGRyKGNv
dW50ZG93blB0cikpOworCisgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lk
KTsKKyAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgZWZmZWN0cy5y
ZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIGVmZmVjdHMud3JpdGVzID0gQjM6Okhl
YXBSYW5nZTo6dG9wKCk7CisgICAgcGF0Y2gtPmVmZmVjdHMgPSBlZmZlY3RzOworCisgICAgcGF0
Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0
aWVyVXAgPSBqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBwYXJhbXNbMF0uZ3By
KCksIHBhcmFtc1sxXS5ncHIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0aWVy
VXBSZXN1bWUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgdGllclVwLmxpbmsoJmppdCk7CisK
KyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhUGFkZGluZ0J5dGVzID0gMDsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvU3BpbGwgPSB7IH07CisgICAgICAgICAgICBy
ZWdpc3RlcnNUb1NwaWxsLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0g
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFQYWRkaW5nQnl0ZXMpOworCisgICAgICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fZnVuY3Rpb25JbmRleCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNU
b1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQ
cmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGppdC5qdW1wKHRp
ZXJVcFJlc3VtZSk7CisKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aE5lYXJDYWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPE5vUHRyVGFnPihjYWxsKSwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1
Yih0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworCisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwg
VG1wKCksIG5ld0NvdW50ZG93biwgb2xkQ291bnRkb3duKTsKK30KKworQWlySVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQorewor
ICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChKdW1wKTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhib2R5KTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gYm9keTsKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6Omxvb3BEZWNy
ZW1lbnQoKSwgb3JpZ2luKCkpOworCisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBz
aWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51
YXRpb24sIGJvZHkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5l
cmF0b3I6OmFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9s
RGF0YShPcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlw
ZTo6VG9wTGV2ZWwsIG1fcHJvYy5hZGRCbG9jaygpKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNv
bnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAg
ICByZXR1cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWdu
YXR1cmUpLCBCbG9ja1R5cGU6OkJsb2NrLCBtX3Byb2MuYWRkQmxvY2soKSk7Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWdu
YXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCYXNp
Y0Jsb2NrKiB0YWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRh
a2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisgICAgCisgICAgLy8gV2FzbSBib29scyBhcmUgaTMyLgorICAg
IGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90WmVy
byksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyh0YWtlbiwgbm90VGFrZW4pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKKyAg
ICByZXN1bHQgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNp
Z25hdHVyZSksIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4pOworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEm
IGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0
KTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
ZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRh
KTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJv
bERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkg
PT0gQmxvY2tUeXBlOjpJZik7CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7Cisg
ICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNT
RVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXpl
KCkpIHsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlR1BSID0gVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVy
blZhbHVlRlBSKTsKKyAgICAgICAgc3dpdGNoIChkYXRhLnNpZ25hdHVyZSgpKSB7CisgICAgICAg
IGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgcmV0dXJuVmFsdWVz
WzBdLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0MzIsIHJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAg
ICAgICAgICAgIGFwcGVuZChNb3ZlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGFwcGVuZChSZXQ2NCwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVG
bG9hdCwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBhcHBl
bmQoUmV0RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCByZXR1cm5W
YWx1ZXNbMF0sIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwg
cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgYXBwZW5kKFJldFZvaWQpOworICAgIHJldHVybiB7IH07Cit9CisKKy8vIE5P
VEU6IEFsbCBicmFuY2hlcyBpbiBXYXNtIGFyZSBvbiAzMi1iaXQgaW50cworCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5yZXN1
bHRGb3JCcmFuY2goKSk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJs
b2NrRm9yQnJhbmNoKCk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgYXBwZW5kKEJyYW5j
aFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RaZXJvKSwgY29uZGl0aW9u
LCBjb25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJn
ZXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9u
OworICAgIH0gZWxzZSB7CisgICAgICAgIGFwcGVuZChKdW1wKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRl
ZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFy
Z2V0c1tpXS0+cmVzdWx0Rm9yQnJhbmNoKCkpOworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4
cHJlc3Npb25TdGFjaywgZGVmYXVsdFRhcmdldC5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQmFz
aWNCbG9jayogdGFyZ2V0ID0gdGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAg
ICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
ICAgIGlmIChBcmc6OmlzVmFsaWRJbW1Gb3JtKGkpKQorICAgICAgICAgICAgYXBwZW5kKEJyYW5j
aDMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgQXJnOjppbW0oaSksIGNv
bmRpdGlvbik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3By
KCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oaSksIGNvbnN0YW50KTsK
KyAgICAgICAgICAgIGFwcGVuZChCcmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCksIGNvbnN0YW50LCBjb25kaXRpb24pOworICAgICAgICB9CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9uKTsKKworICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBhcHBlbmQoSnVt
cCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGVmYXVsdFRhcmdldC50YXJn
ZXRCbG9ja0ZvckJyYW5jaCgpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBl
eHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0
YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworCisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVz
c2lvblN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKworICAgIHJldHVybiBh
ZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5KTsKK30KKworCithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworICAgIG1fY3Vy
cmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247CisKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0g
QmxvY2tUeXBlOjpJZikgeworICAgICAgICBhcHBlbmQoZGF0YS5zcGVjaWFsLCBKdW1wKTsKKyAg
ICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKG1fY3VycmVudEJsb2NrKTsKKyAgICB9
CisKKyAgICBmb3IgKFRtcCByZXN1bHQgOiBkYXRhLnJlc3VsdCkKKyAgICAgICAgZW50cnkuZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAvLyBUb3BMZXZlbCBk
b2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUg
d2UgZW1pdCBhIHJldHVybiBoZXJlLgorICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6
OlRvcExldmVsKQorICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisg
ICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisKKyAgICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlv
bkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgbV9tYXhO
dW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICAgICAgLy8gRklYTUUgaW1w
b3J0cyBjYW4gYmUgbGlua2VkIGhlcmUsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9p
bnQsIGJlY2F1c2UgYWxsIGltcG9ydCBzdHVicyBhcmUgZ2VuZXJhdGVkIGJlZm9yZSBCMyBjb21w
aWxhdGlvbiBzdGFydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY0NjIKKyAgICAgICAgVG1wIHRhcmdldEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJn
ZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSkpOworICAgICAgICAvLyBUaGUgdGFyZ2V0IGluc3Rh
bmNlIGlzIDAgdW5sZXNzIHRoZSBjYWxsIGlzIHdhc20tPndhc20uCisgICAgICAgIFRtcCBpc1dh
c21DYWxsID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVh
bCwgb3JpZ2luKCksIHRhcmdldEluc3RhbmNlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgMCkpOworCisgICAgICAgIEJhc2ljQmxvY2sq
IGlzV2FzbUJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlz
RW1iZWRkZXJCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dh
c21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNF
bWJlZGRlckJsb2NrKSk7CisKKyAgICAgICAgVG1wIHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBh
cmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKKyAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53
cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMu
cmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJl
ciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmlu
ZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZy4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8g
dGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVu
Y3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9u
SW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIFVwc2lsb25WYWx1ZSogd2FzbUNhbGxSZXN1bHRVcHNp
bG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzV2FzbUJsb2NrLT5hcHBlbmRO
ZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB3YXNtQ2FsbFJlc3VsdCk7CisgICAg
ICAgIGlzV2FzbUJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmln
aW4oKSwgY29udGludWF0aW9uKTsKKworICAgICAgICAvLyBGSVhNRTogTGV0J3MgcmVtb3ZlIHRo
aXMgaW5kaXJlY3Rpb24gYnkgY3JlYXRpbmcgYSBQSUMgZnJpZW5kbHkgSUMKKyAgICAgICAgLy8g
Zm9yIGNhbGxzIG91dCB0byB0aGUgZW1iZWRkZXIuIFRoaXMgc2hvdWxkbid0IGJlIHRoYXQgaGFy
ZCB0byBkby4gV2UgY291bGQgcHJvYmFibHkKKyAgICAgICAgLy8gaW1wbGVtZW50IHRoZSBJQyB0
byBiZSBvdmVyIENvbnRleHQqLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwMzc1CisgICAgICAgIFRtcCBqdW1wRGVzdGluYXRpb24gPSBpc0Vt
YmVkZGVyQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAorICAgICAgICAgICAg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5k
ZXgpKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25pbmcoKSkKKyAgICAgICAgICAg
IGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEJpdFhvciwgb3JpZ2luKCksIGp1bXBEZXN0aW5hdGlvbiwgaXNFbWJlZGRlckJsb2NrLT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENvZGVQb2lzb24p
KTsKKworICAgICAgICBUbXAgZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4oKSwgYXJncywg
dG9CM1R5cGUocmV0dXJuVHlwZSksCisgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCkgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanVtcERl
c3RpbmF0aW9uLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdl
IG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAgICAgICAgICAgIC8vIFdlIHBl
c3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzIxODEKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJh
bXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIFVwc2lsb25WYWx1
ZSogZW1iZWRkZXJDYWxsUmVzdWx0VXBzaWxvbiA9IHJldHVyblR5cGUgPT0gVm9pZCA/IG51bGxw
dHIgOiBpc0VtYmVkZGVyQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIGVtYmVkZGVyQ2FsbFJlc3VsdCk7CisgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICAgICAgaWYg
KHJldHVyblR5cGUgPT0gVm9pZCkKKyAgICAgICAgICAgIHJlc3VsdCA9IG51bGxwdHI7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gY29udGludWF0aW9uLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgUGhpLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwgb3JpZ2luKCkpOworICAg
ICAgICAgICAgd2FzbUNhbGxSZXN1bHRVcHNpbG9uLT5zZXRQaGkocmVzdWx0KTsKKyAgICAgICAg
ICAgIGVtYmVkZGVyQ2FsbFJlc3VsdFVwc2lsb24tPnNldFBoaShyZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNz
ZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4K
KyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBjb250aW51YXRpb24p
OworICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigp
LnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5
cGUocmV0dXJuVHlwZSksCisgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCkgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVk
ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZl
UGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50
cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOworICAgIEFTU0VSVChzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKworICAgIG1fbWFrZXNDYWxscyA9IHRy
dWU7CisgICAgLy8gTm90ZTogY2FsbCBpbmRpcmVjdCBjYW4gY2FsbCBlaXRoZXIgV2ViQXNzZW1i
bHlGdW5jdGlvbiBvciBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi4gQmVjYXVzZQorICAgIC8v
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIGlzIGxpa2UgY2FsbGluZyBpbnRvIHRoZSBlbWJl
ZGRlciwgd2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIGFsbCBjYWxsIGluZGlyZWN0cworICAgIC8v
IGNhbiBiZSB0byB0aGUgZW1iZWRkZXIgZm9yIG91ciBzdGFjayBjaGVjayBjYWxjdWxhdGlvbi4K
KyAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJn
dW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKKworICAgIEV4cHJl
c3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBncHIoKTsKKyAgICBFeHByZXNzaW9u
VHlwZSBpbnN0YW5jZXNCdWZmZXIgPSBncHIoKTsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoID0gZ3ByKCk7CisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpLCBCMzo6
V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShU
YWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCks
IEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJG
b3JtKFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpLCBCMzo6V2lkdGg2NCkpOworCisgICAgICAgIGFw
cGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZU
YWJsZSgpKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNl
dE9mRnVuY3Rpb25zKCkpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyKTsKKyAgICAgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zm
c2V0T2ZJbnN0YW5jZXMoKSksIGluc3RhbmNlc0J1ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3Zl
MzIsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0
T2ZMZW5ndGgoKSksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgpOworICAgIH0KKworICAg
IGFwcGVuZChNb3ZlMzIsIGNhbGxlZUluZGV4LCBjYWxsZWVJbmRleCk7CisKKyAgICAvLyBDaGVj
ayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZhbGlkLgorICAgIGVtaXRDaGVjayhb
Jl0geworICAgICAgICBhcHBlbmQoQnJhbmNoMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsKSwgY2FsbGVlSW5kZXgsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5n
dGgpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzQ2FsbEluZGlyZWN0KTsKKyAgICB9KTsKKworICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBncHIoKTsKKyAgICB7CisgICAgICAgIEV4cHJl
c3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0gZ3ByKCk7CisgICAgICAgIC8vIENvbXB1
dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9y
LgorICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW0oc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24pKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBhcHBlbmQoTXVs
NjQsIGNhbGxlZUluZGV4LCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIGFwcGVuZChB
ZGQ2NCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAg
ICAgICAKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRl
eCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExv
Y2F0aW9uKCkpLCBjYWxsZWVDb2RlKTsgLy8gUG9pbnRlciB0byBjYWxsZWUgY29kZS4KKworICAg
ICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGlu
aXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5k
ZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgorICAgICAgICAvLyBGSVhNRTogd2hl
biB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJl
Y2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVp
bnQ2NF90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVzIGk2NCIpOworICAgICAgICAvLyBPT1BTOiBU
aGlzIHNlZW1zIGR1bWIgdG8gZG8gdHdvIGNoZWNrcyBqdXN0IGZvciBhIG5pY2VyIGVycm9yIGhl
cmUuLi4KKworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUlu
ZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVyZUluZGV4
KCkpLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KFNpZ25hdHVyZTo6aW52YWxpZEluZGV4ID09IDApOwor
ICAgICAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpaZXJvKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsK
KyAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6Ok51bGxUYWJsZUVudHJ5KTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNp
Z25hdHVyZUluZGV4ID0gZ3ByKCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0oU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmUpKSwgZXhwZWN0ZWRTaWduYXR1
cmVJbmRleCk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KFNpZ25hdHVyZTo6aW52YWxpZElu
ZGV4ID09IDApOworICAgICAgICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVkU2ln
bmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRo
cm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6QmFkU2lnbmF0dXJlKTsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgLy8gRG8gYSBjb250ZXh0IHN3aXRjaCBpZiBuZWVkZWQuCisgICAg
eworICAgICAgICBUbXAgbmV3Q29udGV4dEluc3RhbmNlID0gZ3ByKCk7CisgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmluZGV4KGluc3RhbmNlc0J1ZmZlciwgY2FsbGVlSW5kZXgsIDgsIDApLCBu
ZXdDb250ZXh0SW5zdGFuY2UpOworCisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2gg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgICAgICBhcHBlbmQoQnJhbmNoNjQsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNl
VmFsdWUoKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVh
dGlvbiwgZG9Db250ZXh0U3dpdGNoKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkg
YXNzdW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdpdGggQm91bmRzQ2hlY2tpbmcgbWVtb3J5
LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJ
bnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0
SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdp
c3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgICAg
ICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7Cisg
ICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50
ZXI7CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRl
eHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1l
bW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKG5l
d0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8v
ICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCisg
ICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOworICAg
ICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
cik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZW1pdFBhdGNocG9pbnQoZG9Db250ZXh0U3dpdGNoLCBwYXRjaHBvaW50LCBUbXAoKSwg
bmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAgICBhcHBlbmQoZG9D
b250ZXh0U3dpdGNoLCBKdW1wKTsKKyAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5zZXRTdWNjZXNz
b3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b247CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVDb2RlKSwgY2Fs
bGVlQ29kZSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgp
OworICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCisg
ICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWln
aHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3Rp
Y2FsbHkgYXNzdW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5k
cyBjaGVja2luZyBzbworICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgd2FzbS0+d2FzbSB0aHVu
ayB1bmNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lzdGVycy4KKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNt
LT53YXNtIHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAgICAgICAgIC8vIHVzZSBhbGwgdGhlIHBp
bm5lZCByZWdpc3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcp
KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0
dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVu
IHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9k
aWZpZWQgb3VyIE1lbW9yeS4KKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0
b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCks
IG1fY3VycmVudEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgQWlySVJHZW5l
cmF0b3I6OnVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlJiBkc3QsIGNvbnN0IEV4cHJlc3Npb25U
eXBlJiBzb3VyY2UpCit7CisgICAgLy8gT09QUzogV2Uga2luZGEgd2FudCB0eXBlcyBoZXJlIHRv
IGRpc3Rpbmd1aXNoIGkzMi9pNjQvZjMyL2Y2NCEKKyAgICBBU1NFUlQoZHN0LmlzR1AoKSA9PSBz
b3VyY2UuaXNHUCgpKTsKKyAgICBhcHBlbmQoZHN0LmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91Ymxl
LCBzb3VyY2UsIGRzdCk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHNvdXJjZSwgcGhpKTsKK30KKwordm9pZCBBaXJJUkdlbmVy
YXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0
YWNrLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXpl
KCkgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAt
IDEgLSBpXSwgcmVzdWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsKK30KKwor
c3RhdGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1h
LCBjb25zdCBBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykK
K3sKKyAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOworICAgIGZvciAoY29u
c3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgZGF0YUxvZyhj
b21tYSwgKmV4cHJlc3Npb24pOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0
IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0
KiBleHByZXNzaW9uU3RhY2spCit7CisgICAgLy8gT09QUyEKKyAgICAvKgorICAgIGRhdGFMb2dM
bigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgZGF0YUxv
Z0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsKKyAgICBkYXRhTG9n
TG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGRhdGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKKyAgICAg
ICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAgZHVtcEV4cHJlc3Npb25T
dGFjayhjb21tYSwgKmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGV4cHJlc3Npb25TdGFjayA9
ICZjb250cm9sU3RhY2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGRhdGFM
b2dMbigpOworICAgIH0KKyAgICBkYXRhTG9nTG4oKTsKKyAgICAqLworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KK3sKKyAgICByZXR1cm4gQjM6Ok9yaWdpbigp
OworICAgIC8vT3Bjb2RlT3JpZ2luIG9yaWdpbihtX3BhcnNlci0+Y3VycmVudE9wY29kZSgpLCBt
X3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpOworICAgIC8vQVNTRVJUKGlz
VmFsaWRPcFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4ob3JpZ2luLm9wY29kZSgpKSkpOworICAg
IC8vcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdpbik7Cit9CisKK0V4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUo
Q29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1
bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENv
bXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRp
ZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
Cit7CisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+
KCk7CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50SklUID0gc3Rk
OjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisgICAgY29tcGlsYXRpb25Db250ZXh0Lndh
c21FbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisKKyAg
ICBCMzo6UHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBDb2RlJiBjb2RlID0gcHJvY2VkdXJlLmNv
ZGUoKTsKKworICAgIHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYg
b3V0LCBPcmlnaW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCJXYXNtOiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2luPihvcmln
aW4pKTsKKyAgICB9KTsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1c2UgZWl0
aGVyIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCisgICAgLy8g
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1bmF2YWlsYWJsZVJlZ2lzdGVycygpLiBJbiBleGNo
YW5nZSBmb3IgdGhpcyBjb25jZXNzaW9uLCB3ZQorICAgIC8vIGRvbid0IHN0cmljdGx5IG5lZWQg
dG8gcnVuIEFpcjo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLCB3aGljaCBzYXZlcyBhIGJpdCBvZiBD
UFUgdGltZSBhdAorICAgIC8vIG9wdExldmVsPTEuCisgICAgLy8gT09QUzogRG8gd2UgbmVlZCB0
aGlzPyBTaG91bGQgd2UganVzdCBzZXQgaXQgZGlyZWN0bHkgb24gQ29kZT8KKyAgICBwcm9jZWR1
cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKKyAgICAKKyAgICBwcm9jZWR1cmUuc2V0
T3B0TGV2ZWwoY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZQorICAg
ICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQorICAgICAg
ICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CisKKyAgICBB
aXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25J
bmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgRnVuY3Rp
b25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CisKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2st
PnN1Y2Nlc3NvcnMoKSkKKyAgICAgICAgICAgIHN1Y2Nlc3Nvci0+YWRkUHJlZGVjZXNzb3IoYmxv
Y2spOworICAgIH0KKyAgICAvLyBPT1BTOiBWYWxpZGF0ZSAnY29kZScgaGVyZSEKKyAgICAKKyAg
ICB7CisgICAgICAgIEFpcjo6Z2VuZXJhdGUocHJvYy5jb2RlKCksICpjb21waWxhdGlvbkNvbnRl
eHQud2FzbUVudHJ5cG9pbnRKSVQpOworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVu
dHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAg
ICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShy
ZXN1bHQpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYo
QjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0KQoreworICAgIEFTU0VSVChvcGVyYXRpb24gPT0gRGl2IHx8IG9wZXJhdGlvbiA9PSBN
b2QgfHwgb3BlcmF0aW9uID09IFVEaXYgfHwgb3BlcmF0aW9uID09IFVNb2QpOworICAgIGNvbnN0
IEIzOjpUeXBlIHR5cGUgPSBsZWZ0LT50eXBlKCk7CisKKyAgICB7CisgICAgICAgIGVtaXRDaGVj
ayhbJl0geworICAgICAgICAgICAgS2luZCBvcCA9IGlzNjRCaXRPcChvcGVyYXRpb24pID8gQnJh
bmNoVGVzdDY0IDogQnJhbmNoVGVzdDMyOworICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJl
c0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCByaWdodCwgcmlnaHQpOworICAgICAgICB9LCBb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAob3Bl
cmF0aW9uID09IERpdikgeworICAgICAgICBpbnQ2NF90IG1pbiA9IHR5cGUgPT0gSW50MzIgPyBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50NjRfdD46Om1pbigpOworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IFRyeSB0byBlbWl0IG5pY2UgY29tcGFyZSB3LyBpbW1zLgorICAgICAgICAgICAgVG1w
IG1pblRtcCA9IGdwcigpOworICAgICAgICAgICAgVG1wIG5lZ09uZSA9IGdwcigpOworCisgICAg
ICAgICAgICBLaW5kIG9wID0gaXM2NEJpdE9wKG9wZXJhdGlvbikgPyBDb21wYXJlNjQgOiBDb21w
YXJlMzI7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0obWluKSwgbWluVG1w
KTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCksIGxlZnQsIG1pblRtcCwgbWluVG1wKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmltbSgtMSksIG5lZ09uZSk7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdodCwgbmVnT25lLCBuZWdPbmUpOworICAgICAg
ICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpO
b3RaZXJvKSwgbWluVG1wLCBuZWdPbmUpOworICAgICAgICB9LAorICAgICAgICBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6SW50
ZWdlck92ZXJmbG93KTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCisvLyBPT1BTOiBJbXBsZW1l
bnQgdGhlc2UgZGl2IG9wcyEhIQordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJv
b2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BB
UkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJl
c3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2OworICAgIC8vZW1pdENoZWNr
c0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOworICAgIFVOVVNF
RF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJB
TShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAgICAvL2VtaXRD
aGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBF
eHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7
CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAg
VU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsK
KyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JB
U0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsK
KyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBV
TW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAg
Ly9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAg
ICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmln
aHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBv
cCA9IERpdjsKKyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOwor
ICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBv
cCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Np
b25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFN
KHJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNv
ZGUgb3AgPSBNb2Q7CisgICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0
KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2
VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAg
IGlmIChiKQorICAgICAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBV
TlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vY29u
c3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3As
IGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7
CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwor
ICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAg
Ly9jb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsKKyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRp
dihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRk
UGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC5jb3VudFRyYWlsaW5nWmVyb3MzMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIo
KSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczY0
KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYg
Q1BVKFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0
aW9uKCkpIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludChCMzo6SW50MzIpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgICAgIGppdC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5n
cHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBy
ZXN1bHQsIGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1
aW50MzJfdCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1aW50
MzJfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OworICAgIGVtaXRDQ2Fs
bChwb3Bjb3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNz
ZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uNjQo
cGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKyNlbmRpZgorCisgICAgdWludDY0X3QgKCpwb3Bjb3VudCkoaW50NjRfdCkg
PSBbXSAoaW50NjRfdCB2YWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNv
dW50bGwodmFsdWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0LCBhcmcpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHBhdGNocG9pbnQt
Pm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Rv
dWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgw
KSk7CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2lu
dC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRv
RmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFtcy5ncFNjcmF0Y2go
MCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1p
dFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVh
cmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5y
b3VuZFRvd2FyZE5lYXJlc3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIo
KSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7
CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0Rv
dWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0Zsb2F0KHBhcmFtc1sxXS5mcHIo
KSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJU
cnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAg
IENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4
ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwg
YXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50
MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAg
IHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hw
b2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1z
WzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAq
LworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOwor
ICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKwor
ICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4o
KSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVx
dWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5k
cywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0
T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRU
aHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAg
IH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0
VG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRj
aHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKworCit0ZW1wbGF0ZTw+CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
Ym9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1w
bGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkgKiAtMi4wKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERv
dWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CisgICAgVG1wIG91dE9mQm91bmRz
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdp
bigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExl
c3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsK
KyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAg
ICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFs
dWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZm
ZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikK
KyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAvKgorICAg
IFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNf
Y2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3
aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOworICAgIFRtcCBv
dXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0
QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFy
ZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMy
LCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0
cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0
LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sx
XS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8K
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAg
ICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAg
ICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRf
dD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCkpKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2
NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1p
bigpKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVy
RXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91
bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBv
dXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7Cisg
ICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91
YmxlVG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBw
YXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+KEV4cHJlc3Npb25U
eXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGlt
cGxlbWVudCB0aGlzIQorICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0
d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50NjRfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91
YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2lu
KCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVz
c1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOwor
ICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAg
IENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+
KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0
YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhh
dmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQg
aW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAg
ICAgLy8gdGhlIG51bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25l
ZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBy
cyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVl
ZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsK
KyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3Jh
dGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAg
ICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkg
eworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAg
ICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1
bmNhdGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2Ny
YXRjaCwgY29uc3RhbnQpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQor
ICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBJbXBsZW1lbnQgdGhpcyEKKyAgICAvKgorICAgIFRt
cCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAgIFRt
cCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2Fz
dDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1w
IG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
aXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCks
IGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KElu
dDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAg
ICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFw
cGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50NjQocGFyYW1z
WzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAq
LworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOwor
ICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcworICAg
IC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkg
KiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRmxv
YXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7Cisg
ICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmln
aW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3Rh
bnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMp
OworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2Vw
dGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisg
ICAgVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAvLyBT
aW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRvIGNvbnZlcnQgZmxvYXRpbmcg
cG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFzdCB0cnkgdG8gZG8gdGhlIHNt
YXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJzIHdvdWxkIGJlIHBvc2l0aXZlIGFu
eXdheSBhcyBhIHNpZ25lZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29u
c3RhbnRzIGludG8gZnBycyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBw
b29sIHRoZW0gaWYgbmVlZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChG
bG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1l
cmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWF4KCkpKSk7CisgICAgfQorICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBv
cmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKHNp
Z25CaXRDb25zdGFudCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9p
bnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgfQorICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQ
UlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAg
aWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDAp
OworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAgICAgIH0KKyAg
ICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1sw
XS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAq
LworICAgIHJldHVybiB7IH07Cit9CisKK1BhcnRpYWxSZXN1bHQgQWlySVJHZW5lcmF0b3I6OmFk
ZFNoaWZ0KEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNo
aWZ0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IGdwcigpOworCisg
ICAgaWYgKGlzVmFsaWRGb3JtKGtpbmQsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7
CisgICAgICAgIGFwcGVuZChraW5kLCB2YWx1ZSwgc2hpZnQsIHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorICAgIAorICAgIGFwcGVuZChNb3ZlLCB2YWx1ZSwgcmVzdWx0KTsK
KyAgICBhcHBlbmQoTW92ZSwgc2hpZnQsIG1fZWN4KTsKKyAgICBhcHBlbmQoa2luZCwgbV9lY3gs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworUGFydGlhbFJlc3VsdCBBaXJJUkdlbmVy
YXRvcjo6YWRkSW50ZWdlclN1YihLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVz
c2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IGdw
cigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKGtpbmQsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJn
OjpUbXApKSB7CisgICAgICAgIGFwcGVuZChraW5kLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKyAg
ICAvLyBTdWIgYSwgYgorICAgIC8vIG1lYW5zCisgICAgLy8gYiA9IGIgU3ViIGEKKyAgICBhcHBl
bmQoTW92ZSwgbGhzLCByZXN1bHQpOworICAgIGFwcGVuZChraW5kLCByaHMsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKworUGFydGlhbFJlc3VsdCBBaXJJUkdlbmVyYXRvcjo6YWRkRmxv
YXRpbmdQb2ludEFicyhLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQWJzRmxvYXQgfHwg
a2luZCA9PSBBYnNEb3VibGUpOworCisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNW
YWxpZEZvcm0oa2luZCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQoa2lu
ZCwgdmFsdWUsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlQoaXNYODYoKSk7CisKKyAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICBp
ZiAoa2luZCA9PSBBYnNGbG9hdCkgeworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW0ofigx
IDw8IDMxKSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIGNvbnN0
YW50LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoQW5kRmxvYXQsIHZhbHVlLCByZXN1bHQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSh+KDEgPDwgNjMp
KSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGNvbnN0YW50LCBy
ZXN1bHQpOworICAgICAgICBhcHBlbmQoQW5kRG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9
CisgICAgcmV0dXJuIHsgfTsKK30KKworUGFydGlhbFJlc3VsdCBBaXJJUkdlbmVyYXRvcjo6YWRk
RmxvYXRpbmdQb2ludEJpbk9wKEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNz
aW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0oa2luZCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmdz
OjpUbXApKSB7CisgICAgICAgIGFwcGVuZChraW5kLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKwor
ICAgIC8vIE9wIGEsIGIKKyAgICAvLyBtZWFucworICAgIC8vIGIgPSBiIE9wIGEKKyAgICAvLyBP
T1BTOiB2ZXJpZnkKKyAgICBhcHBlbmQoTW92ZURvdWJsZSwgbGhzLCByZXN1bHQpOworICAgIGFw
cGVuZChraW5kLCByaHMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNlaWw+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ2VpbEZsb2F0LCBhcmcwLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTXVsMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBh
ZGRJbnRlZ2VyU3ViKFN1YjMyLCBhcmcwLCBhcmcxKTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NExlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGVtb3RlRjY0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnREb3VibGVUb0Zsb2F0LCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJNaW4+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2NvZGUuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAg
YXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBP
ckZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsK
KyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQo
bm90RXF1YWwsIE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90RXF1YWws
IEJyYW5jaEZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFu
KSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9u
LCBncmVhdGVyVGhhbk9yRXF1YWwpOworCisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwg
TW92ZUZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWws
IEp1bXApOworICAgIGdyZWF0ZXJUaGFuT3JFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRp
b24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjY0TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEx0PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNYXg+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxv
Y2sqIGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVh
bCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9j
dXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBw
ZW5kKGlzRXF1YWwsIEFuZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChp
c0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7
CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBh
cHBlbmQobm90RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3Nv
cnMobGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVG
bG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAgIGxl
c3NUaGFuLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKE11bERvdWJsZSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMkRpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2RmxvYXQsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJDbHo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ291bnRMZWFk
aW5nWmVyb3MzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29weXNpZ24+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBiZXR0ZXIg
Y29kZWdlbiBoZXJlIGZvciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24geDg2Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHNpZ24g
PSBncHIoKTsKKyAgICBUbXAgdmFsdWUgPSBncHIoKTsKKworICAgIC8vIE9PUFM6IENhbiBmaXQg
aW4gSW1tL0JpdEltbSBpbnN0ZWFkIG9mIEJpZ0ltbT8KKyAgICBhcHBlbmQoTW92ZUZsb2F0VG8z
MiwgYXJnMSwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAw
KSwgc2lnbik7CisgICAgYXBwZW5kKEFuZDMyLCB0ZW1wMSwgc2lnbiwgc2lnbik7CisKKyAgICBh
cHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJn
OjpiaWdJbW0oMHg3ZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBlbmQoQW5kMzIsIHRlbXAxLCB2
YWx1ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9yMzIsIHNpZ24sIHZhbHVlLCB2YWx1ZSk7Cisg
ICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIHZhbHVlLCByZXN1bHQpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NENvbnZlcnRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAg
PSB0bXAoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29u
dmVydEludDY0VG9Eb3VibGUsIHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlJlaW50ZXJw
cmV0STMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE1vdmUzMlRv
RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFuZD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBbmQ2NCwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmU+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0R3Q+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMlNxcnQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoU3FydEZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHZT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0
ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0Uz4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4p
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFU+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0RXF6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwg
YXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RGl2PihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgLy8gT09QUzogd2hhdCBhYm91dCBjaGlsbC1uZXNzIGhlcmUuLi4/CisgICAg
cmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChEaXZEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsK
KyAgICBhcHBlbmQoQWRkRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NE9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKE9yNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlVT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFs
KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTGVTPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUz
MiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRDbHo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q291bnRMZWFkaW5nWmVyb3M2NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVnPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE5lZ2F0ZUZsb2F0LCBhcmcw
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQW5kMzIsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0
KFJvdGF0ZVJpZ2h0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBYnM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkRmxvYXRpbmdQb2ludEFicyhBYnNEb3VibGUsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFM+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0Q29weXNpZ24+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBP
T1BTOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29kZWdlbiBoZXJlIGZvciB0aGUgaW1tcyBhbmQgdHdv
IG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAx
ID0gZ3ByKCk7CisgICAgVG1wIHNpZ24gPSBncHIoKTsKKyAgICBUbXAgdmFsdWUgPSBncHIoKTsK
KworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMSwgdGVtcDEpOworICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwMDAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQo
QW5kNjQsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwg
YXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmZmZm
ZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsK
KworICAgIGFwcGVuZChPcjY0LCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3Zl
NjRUb0RvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJNjQ+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9G
bG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90bD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0NjQsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChD
b252ZXJ0SW50MzJUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVh
bCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxlPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVG
bG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHZT4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxv
YXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFs
KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0MzIsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IFRtcCB0ZW1wID0gdG1wKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAg
YXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQsIHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQo
UnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDZWlsPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENlaWxEb3VibGUsIGFyZzAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMkdlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyU2hsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZFNoaWZ0KExzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Rmxvb3I+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoRmxvb3JEb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlhvcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChYb3IzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyQWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRBYnMo
QWJzRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2NvZGUu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisg
ICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9j
ay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVh
bCwgT3JEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1
bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFw
cGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90
RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRp
bnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVuZChncmVhdGVyVGhhbk9y
RXF1YWwsIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGdyZWF0ZXJUaGFu
T3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5zZXRTdWNjZXNzb3JzKGNv
bnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBmcHIoKTsKKyAgICBhcHBlbmQoTXVsRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBh
ZGRJbnRlZ2VyU3ViKFN1YjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVpbnRlcnByZXRGMzI+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZUZsb2F0VG8zMiwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFkZDMyLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoU3ViRG91YmxlLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjMyLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRMdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0THRT
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTY0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCBh
cmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRYb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9yNjQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKE11bDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBhcHBlbmQoU3ViRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NFByb21vdGVGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBl
bmQoQ29udmVydEZsb2F0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFk
ZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IGFwcGVuZChBZGREb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdl
Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRo
YW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kVUkz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NFJlaW50ZXJwcmV0STY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAg
YXBwZW5kKE1vdmU2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJFcT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1
YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
NjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJGbG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGFwcGVuZChGbG9vckZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252
ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0
SW50MzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcXo+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFj
cm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRS
ZWludGVycHJldEY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChN
b3ZlRG91YmxlVG82NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyUz4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSc2hpZnQ2NCwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXR1cm4gYWRkU2hpZnQoVXJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3FydD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0RG91YmxlLCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHdD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRo
YW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJXcmFwSTY0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyUm90bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
dHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RyPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0
MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChT
aWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RTPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9j
aywgQnJhbmNoRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFs
KSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVh
bCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZERvdWJsZSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0
U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7
CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisK
KyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBw
ZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMZVM+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVh
bCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFkZD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBZGQ2NCwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBCM0lSR2Vu
ZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbgogICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVh
cFJhbmdlOjp0b3AoKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKICAgICBw
YXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5zdGFuY2VH
UFIpKTsKLSAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsgLy8gT09QUzogUHJvYmFibHkgc2hvdWxkIGJlIHVzaW5n
IGFyZyEKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUjsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgewogICAgICAg
ICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CkBAIC00
NTksOSArNDU5LDkgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAog
CiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0ID09IFJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIEluc3RhbmNlIGNhY2hlcyB0aGUgc3RhY2sgbGlt
aXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBjYW5vbmljYWwgbG9jYXRpb24gaXMuCi0gICAg
ICAgIFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZQ
b2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpKTsKLSAgICAgICAgVmFsdWUqIGFjdHVhbFN0YWNr
TGltaXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBwb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KTsK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGltaXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAg
ICAgIFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0ID0gYmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFu
Y2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9B
Y3R1YWxTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgVmFsdWUqIGFjdHVhbFN0YWNrTGltaXQgPSBi
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBwb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KTsKKyAgICAgICAgYmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNr
TGltaXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CiAgICAgfQogCiAgICAgaWYgKCEhbWVtb3J5KSB7CkBA
IC0xODM4LDcgKzE4MzgsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAg
fQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsgLy8gT09QUzogVGhp
cyBsb29rcyBzdXBlciB3cm9uZyBnaXZlbiB3ZSBkb24ndCBzYXkgd2UgY2xvYmJlciB0aGlzIQog
ICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CiAgICAgICAgIEZQUlJlZyBj
b25zdGFudCA9IEludmFsaWRGUFJSZWc7CiAgICAgICAgIGlmIChpc1g4NigpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlv
bi5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDM2IEBA
IGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNhbGxpbmcKICAgICByZXR1cm4gc3Rh
dGljV2FzbUNhbGxpbmdDb252ZW50aW9uOwogfQogCitjb25zdCBKU0NDYWxsaW5nQ29udmVudGlv
bkFpciYganNjQ2FsbGluZ0NvbnZlbnRpb25BaXIoKQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8SlNDQ2FsbGluZ0NvbnZlbnRpb25BaXI+IHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50
aW9uOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlv
bkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFn
LCBbXSAoKSB7CisgICAgICAgIHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVjdChW
ZWN0b3I8UmVnPigpLCBWZWN0b3I8UmVnPigpLCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlv
bjsKK30KKworY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyJiB3YXNtQ2FsbGluZ0NvbnZl
bnRpb25BaXIoKQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8V2FzbUNhbGxpbmdD
b252ZW50aW9uQWlyPiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpj
YWxsX29uY2Uoc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAg
ICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJlZ2lzdGVycyhHUFJJbmZvOjpudW1iZXJPZkFyZ3Vt
ZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgICAgIGdwckFyZ3VtZW50
UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAg
IFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVnaXN0ZXJzKEZQUkluZm86Om51bWJlck9mQXJndW1l
bnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6
bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAgICAgICAgZnByQXJndW1lbnRS
ZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisKKyAgICAgICAg
c3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVjdChXVEZNb3ZlKGdwckFyZ3VtZW50
UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1bWVudFJlZ2lzdGVycyksIFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0YXRpY1dhc21D
YWxsaW5nQ29udmVudGlvbjsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDI3ICs0NCwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCi10eXBlZGVmIHVuc2lnbmVkICgqTmV4dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9m
ZnNldCwgQjM6OlR5cGUgdHlwZSk7Cit0eXBlZGVmIHVuc2lnbmVkICgqTmV4dE9mZnNldCkodW5z
aWduZWQgY3VycmVudE9mZnNldCk7CiAKIHRlbXBsYXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5l
eHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgogY2xhc3MgQ2FsbGluZ0NvbnZlbnRpb24gewogcHVibGlj
OgogICAgIENhbGxpbmdDb252ZW50aW9uKFZlY3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJl
Zz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYmIGNhbGxlZVNhdmVSZWdpc3RlcnMpCi0gICAgICAg
IDogbV9ncHJBcmdzKGdwckFyZ3MpCi0gICAgICAgICwgbV9mcHJBcmdzKGZwckFyZ3MpCi0gICAg
ICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAg
IDogbV9ncHJBcmdzKFdURk1vdmUoZ3ByQXJncykpCisgICAgICAgICwgbV9mcHJBcmdzKFdURk1v
dmUoZnByQXJncykpCisgICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUoY2Fs
bGVlU2F2ZVJlZ2lzdGVycykpCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBCMzo6VmFs
dWVSZXAgbWFyc2hhbGxBcmd1bWVudEltcGwoVmVjdG9yPFJlZz4gcmVnQXJncywgQjM6OlR5cGUg
dHlwZSwgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKKyAgICBCMzo6
VmFsdWVSZXAgbWFyc2hhbGxBcmd1bWVudEltcGwoVmVjdG9yPFJlZz4gcmVnQXJncywgc2l6ZV90
JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChj
b3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIEIzOjpWYWx1ZVJlcDo6
cmVnKHJlZ0FyZ3NbY291bnQrK10pOwogCiAgICAgICAgIGNvdW50Kys7CiAgICAgICAgIEIzOjpW
YWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoc3RhY2tPZmZzZXQp
OwotICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCwgdHlwZSk7
CisgICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0KTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTczLDEwICs3MywxMCBAQCBwcml2YXRlOgog
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBCMzo6SW50MzI6CiAgICAgICAg
IGNhc2UgQjM6OkludDY0OgotICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBs
KG1fZ3ByQXJncywgdHlwZSwgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAg
ICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCBncEFyZ3VtZW50Q291
bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAgICAgY2FzZSBCMzo6RmxvYXQ6CiAgICAgICAgIGNhc2Ug
QjM6OkRvdWJsZToKLSAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2Zw
ckFyZ3MsIHR5cGUsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAg
cmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgZnBBcmd1bWVudENvdW50LCBz
dGFja09mZnNldCk7CiAgICAgICAgIGNhc2UgQjM6OlZvaWQ6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMTg5LDE5ICsxODksMTQ5IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZWdp
c3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7CiB9OwogCi1pbmxpbmUgdW5zaWduZWQgbmV4
dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSkKK3RlbXBsYXRlPHVu
c2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgorY2xhc3MgQ2FsbGlu
Z0NvbnZlbnRpb25BaXIgeworcHVibGljOgorICAgIENhbGxpbmdDb252ZW50aW9uQWlyKFZlY3Rv
cjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYmIGNh
bGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKFdURk1vdmUoZ3ByQXJncykp
CisgICAgICAgICwgbV9mcHJBcmdzKFdURk1vdmUoZnByQXJncykpCisgICAgICAgICwgbV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUoY2FsbGVlU2F2ZVJlZ2lzdGVycykpCisgICAgeworICAg
IH0KKworcHJpdmF0ZToKKyAgICBBaXI6OkFyZyBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0b3I8
UmVnPiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgcmVnQXJncy5zaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm4gQWlyOjpUbXAocmVnQXJnc1tjb3VudCsrXSk7CisKKyAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSBBaXI6OkFyZzo6YWRkcihUbXAoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpLCBzdGFja09mZnNldCk7CisgICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zm
c2V0KHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBB
aXI6OkFyZyBtYXJzaGFsbEFyZ3VtZW50KFR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291
bnQsIHNpemVfdCYgZnBBcmd1bWVudENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6aTMyOgor
ICAgICAgICBjYXNlIFR5cGU6Omk2NDoKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3Vt
ZW50SW1wbChtX2dwckFyZ3MsIHR5cGUsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwor
ICAgICAgICBjYXNlIFR5cGU6OmYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpmNjQ6CisgICAgICAg
ICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCB0eXBlLCBmcEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVyU2l6ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFkZXJT
aXplOyB9CisgICAgdm9pZCBzZXR1cEZyYW1lSW5Qcm9sb2d1ZShDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiogY2FsbGVlTW92ZUxvY2F0aW9uLCBCMzo6UHJvY2VkdXJl
JiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXpl
b2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cu
Iik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6
ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93
LiIpOworCisgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGdldENhbGxlZVBhdGNocG9pbnQg
PSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpJbnQ2NCwg
b3JpZ2luKTsKKyAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9
IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOworICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50
LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdCA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBh
dGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbGVlTW92ZUxvY2F0aW9uLCBtb3ZlTG9j
YXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpj
YWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFn
Pihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgQjM6OlZhbHVlKiBmcmFtZVBvaW50ZXIgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4ocHJvYywgQjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKTsKKyAgICAgICAgQjM6OlZhbHVl
KiBvZmZzZXRPZkNhbGxlZSA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJv
Yywgb3JpZ2luLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAg
ICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFsdWU+KHByb2MsIEIzOjpTdG9yZSwg
b3JpZ2luLAorICAgICAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludCwKKyAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6QWRkLCBvcmlnaW4sIGZyYW1lUG9p
bnRlciwgb2Zmc2V0T2ZDYWxsZWUpKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0
IGhhdmUgdG8gc3RvcmUgemVybyBpbnRvIHRoZSBDb2RlQmxvY2sqIHNwb3QgaW4gdGhlIGNhbGwg
ZnJhbWUsCisgICAgICAgIC8vIGJ1dCB0aGVyZSBhcmUgcGxhY2VzIHRoYXQgaW50ZXJwcmV0IG5v
bi1udWxsIENvZGVCbG9jayBzbG90IHRvIG1lYW4gYSB2YWxpZCBDb2RlQmxvY2suCisgICAgICAg
IC8vIFdoZW4gZG9pbmcgdW53aW5kaW5nLCB3ZSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBl
bnRpcmUgcnVudGltZSBpcyBPSyB3aXRoIGEgbm9uLW51bGwKKyAgICAgICAgLy8gQ29kZUJsb2Nr
IG5vdCBpbXBseWluZyB0aGF0IHRoZSBDb2RlQmxvY2sgaXMgdmFsaWQuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKKyAgICAgICAgQjM6
OlZhbHVlKiBvZmZzZXRPZkNvZGVCbG9jayA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRW
YWx1ZT4ocHJvYywgb3JpZ2luLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFsdWU+KHByb2Ms
IEIzOjpTdG9yZSwgb3JpZ2luLAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29u
c3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4sIDApLAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KHByb2MsIEIzOjpBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZzZXRP
ZkNvZGVCbG9jaykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBsb2FkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRD
b3VudCA9IDA7CisgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBz
aXplX3Qgc3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplOworCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAgZnVu
Y3RvcihtYXJzaGFsbEFyZ3VtZW50KHNpZ25hdHVyZS5hcmd1bWVudChpKSwgZ3BBcmd1bWVudENv
dW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KSwgaSk7CisgICAgfQorCisgICAgLy8g
SXQncyBleHBlY3RlZCB0aGF0IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhlIGdlbmVyYXRv
ciBmb3IgdGhlIGNhbGwgb3BlcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgQjM6OlZhbHVlKiBzZXR1cENhbGwoQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6OkJhc2lj
QmxvY2sqIGJsb2NrLCBCMzo6T3JpZ2luIG9yaWdpbiwgY29uc3QgVmVjdG9yPEIzOjpWYWx1ZSo+
JiBhcmd1bWVudHMsIEIzOjpUeXBlIHJldHVyblR5cGUsIGNvbnN0IEZ1bmN0b3ImIHBhdGNocG9p
bnRGdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9
IDA7CisgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qg
c3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisg
ICAgICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWluZWRBcmd1bWVudHM7
CisgICAgICAgIGZvciAoQjM6OlZhbHVlKiBhcmd1bWVudCA6IGFyZ3VtZW50cykgeworICAgICAg
ICAgICAgQjM6OlZhbHVlUmVwIHJlcCA9IG1hcnNoYWxsQXJndW1lbnQoYXJndW1lbnQtPnR5cGUo
KSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAg
ICAgICAgIGNvbnN0cmFpbmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZShh
cmd1bWVudCwgcmVwKSk7CisgICAgICAgIH0KKworICAgICAgICBwcm9jLnJlcXVlc3RDYWxsQXJn
QXJlYVNpemVJbkJ5dGVzKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisKKyAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgcmV0
dXJuVHlwZSwgb3JpZ2luKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAg
ICAgICAgcGF0Y2hwb2ludEZ1bmN0b3IocGF0Y2hwb2ludCk7CisgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFZlY3Rvcihjb25zdHJhaW5lZEFyZ3VtZW50cyk7CisKKyAgICAgICAgc3dpdGNoIChy
ZXR1cm5UeXBlKSB7CisgICAgICAgIGNhc2UgQjM6OlZvaWQ6CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgY2FzZSBCMzo6RmxvYXQ6CisgICAgICAgIGNhc2UgQjM6OkRvdWJs
ZToKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVS
ZXA6OnJlZyhGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBCMzo6SW50MzI6CisgICAgICAgIGNhc2UgQjM6OkludDY0OgorICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBwYXRjaHBvaW50OworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1f
Z3ByQXJnczsKKyAgICBjb25zdCBWZWN0b3I8UmVnPiBtX2ZwckFyZ3M7CisgICAgY29uc3QgUmVn
aXN0ZXJTZXQgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1f
Y2FsbGVyU2F2ZVJlZ2lzdGVyczsKK307CisKK2lubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0
KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQpCiB7CiAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQgKyBz
aXplb2YoUmVnaXN0ZXIpOwogfQogCiBjb25zdGV4cHIgdW5zaWduZWQganNjSGVhZGVyU2l6ZSA9
IEV4ZWNTdGF0ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKTsKLXR5
cGVkZWYgQ2FsbGluZ0NvbnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD4gSlND
Q2FsbGluZ0NvbnZlbnRpb247Ci0KLXR5cGVkZWYgSlNDQ2FsbGluZ0NvbnZlbnRpb24gV2FzbUNh
bGxpbmdDb252ZW50aW9uOwogCit1c2luZyBKU0NDYWxsaW5nQ29udmVudGlvbiA9IENhbGxpbmdD
b252ZW50aW9uPGpzY0hlYWRlclNpemUsIG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNhbGxp
bmdDb252ZW50aW9uID0gSlNDQ2FsbGluZ0NvbnZlbnRpb247CiBjb25zdCBKU0NDYWxsaW5nQ29u
dmVudGlvbiYganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKIGNvbnN0IFdhc21DYWxsaW5nQ29udmVu
dGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50
aW9uQWlyID0gQ2FsbGluZ0NvbnZlbnRpb25BaXI8anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNl
dD47Cit1c2luZyBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIgPSBKU0NDYWxsaW5nQ29udmVudGlv
bkFpcjsKK2NvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlv
bkFpcigpOworY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyJiB3YXNtQ2FsbGluZ0NvbnZl
bnRpb25BaXIoKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360374</attachid>
            <date>2019-01-28 14:17:30 -0800</date>
            <delta_ts>2019-01-28 15:13:47 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>147573</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2
b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBh
Ci0gICAgICAgICAgICAgICAgLy8gdm9pZCByZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVy
ZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lkLgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1w
b3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJl
dFZvaWQKKyAgICAgICAgICAgICAgICAvLyBmb3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVk
UmVncyhBaXI6Okluc3QmKSBmaW5hbDsKICAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJl
Z3MoQWlyOjpJbnN0JikgZmluYWw7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBv
dmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUg
bWFueSBzb21lCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJh
dGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBz
dWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgK
ICAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJl
dmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDExIEBAIENvZGU6On5Db2RlKCkKIHsKIH0K
IAordm9pZCBDb2RlOjplbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYgaml0KQorewor
ICAgIGRlZmF1bHRQcm9sb2d1ZUdlbmVyYXRvcihqaXQsICp0aGlzKTsKK30KKwogdm9pZCBDb2Rl
OjpzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKEJhbmsgYmFuaywgY29uc3QgVmVjdG9yPFJlZz4mIHJl
Z3MpCiB7CiAgICAgcmVnc0luUHJpb3JpdHlPcmRlckltcGwoYmFuaykgPSByZWdzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzUsNiArMzM1LDggQEAgcHVibGljOgogICAgIFJlZ2lzdGVyU2V0IHBpbm5lZFJlZ2lzdGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVkUmVnczsgfQogICAgIAogICAgIFdlYWtSYW5kb20m
IHdlYWtSYW5kb20oKSB7IHJldHVybiBtX3dlYWtSYW5kb207IH0KKworICAgIHZvaWQgZW1pdERl
ZmF1bHRQcm9sb2d1ZShDQ2FsbEhlbHBlcnMmKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIDo6SlNDOjpCMzo6UHJvY2VkdXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21BaXJJUkdl
bmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKKyNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorI2lu
Y2x1ZGUgIldhc21JbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRl
ICJXYXNtT01HUGxhbi5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKKyNpbmNsdWRl
ICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit1c2lu
ZyBuYW1lc3BhY2UgQjM6OkFpcjsKKworc3RydWN0IENvbnN0cmFpbmVkVG1wIHsKKyAgICBDb25z
dHJhaW5lZFRtcChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwID0gQjM6OlZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpCisgICAgICAgIDogdG1wKHRtcCkKKyAgICAgICAgLCByZXAocmVwKQorICAgIHsg
fQorCisgICAgVG1wIHRtcDsKKyAgICBCMzo6VmFsdWVSZXAgcmVwOworfTsKKworY2xhc3MgQWly
SVJHZW5lcmF0b3IgeworcHVibGljOgorICAgIHN0cnVjdCBDb250cm9sRGF0YSB7CisgICAgICAg
IENvbnRyb2xEYXRhKE9yaWdpbiBvcmlnaW4sIFR5cGUgc2lnbmF0dXJlLCBUbXAgcmVzdWx0VG1w
LCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBz
cGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAg
ICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwo
c3BlY2lhbCkKKyAgICAgICAgICAgICwgc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChzaWdu
YXR1cmUgIT0gVHlwZTo6Vm9pZCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXN1
bHRUbXApOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKHNpZ25h
dHVyZSA9PSBUeXBlOjpWb2lkKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbnRyb2xEYXRhKCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEJsb2NrVHlwZTo6SWY6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJJ
ZjogICAgICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJs
b2NrVHlwZTo6QmxvY2s6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJCbG9jazogICAgIik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6TG9v
cDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxvb3A6ICAgICAiKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUb3BMZXZlbDoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiQ29udGludWF0aW9uOiAi
LCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFs
KQorICAgICAgICAgICAgICAgIG91dC5wcmludCgqc3BlY2lhbCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJOb25lIik7CisgICAgICAgIH0KKworICAgICAg
ICBCbG9ja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJsb2NrVHlwZTsgfQorCisgICAgICAg
IFR5cGUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gc2lnbmF0dXJlOyB9CisKKyAgICAgICAg
Ym9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gcmVzdWx0LnNpemUoKTsg
fQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrRm9yQnJhbmNoKCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0SWZUb0Jsb2NrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgICAg
IGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7CisgICAgICAgICAgICBzcGVjaWFsID0gbnVs
bHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IFdoYXQgaXMgdGhpcz8KKyAgICAg
ICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAsIDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEg
UGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRGb3JCcmFuY2goKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFpcklSR2Vu
ZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tUeXBlOworICAgICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7CisgICAgICAgIFJl
c3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHNpZ25hdHVyZTsKKyAgICB9OworCisgICAg
dXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUbXA7CisgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250
cm9sRGF0YTsKKyAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlw
ZSwgMT47CisgICAgdXNpbmcgUmVzdWx0TGlzdCBDb250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAg
ICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNv
bnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlF
eHByZXNzaW9uID0gVG1wIHsgfTsKKworICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmluZzsKKyAg
ICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBlY3RlZDxFcnJvclR5cGU+OworICAgIHVz
aW5nIFJlc3VsdCA9IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
RXJyb3JUeXBlPjsKKyAgICB1c2luZyBQYXJ0aWFsUmVzdWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJy
b3JUeXBlPjsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lO
TElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJn
cykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAv
LyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNlci5oLgorICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGlu
ZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CisgICAgfQorCisjZGVmaW5lIFdBU01fQ09N
UElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZ
KGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhaWwo
X19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworICAgIEFpcklS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxG
dW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIENv
bXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJv
d1dhc21FeGNlcHRpb24pOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKKworICAgIC8vIExvY2Fscwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUp
OworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVz
c2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93CisgICAgQ29udHJv
bERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAg
ICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUp
OworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0
dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRh
JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOworCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEm
IGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50
cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwor
CisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
YWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKwor
ICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIGxocywg
RXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFs
UmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRBYnMoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGlu
Z1BvaW50QmluT3AoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBl
IHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4
cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJH
ZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CisKKyAgICBUbXAgY29u
c3RhbnQoQjM6OlR5cGUsIHVpbnQ2NF90IGJpdHMsIE9wdGlvbmFsPE9yaWdpbj4gPSBXVEY6Om51
bGxvcHQpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICB2b2lkIGFwcGVuZChCYXNpY0Jsb2NrKiBibG9jaywgQWlyOjpLaW5kIGtpbmQsIEFyZ3Vt
ZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8vIE9PUFM6IEFkZCBvcmlnaW4K
KyAgICAgICAgYmxvY2stPmFwcGVuZChraW5kLCBudWxscHRyLCBzdGQ6OmZvcndhcmQ8QXJndW1l
bnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQWlyOjpLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywga2luZCwg
c3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgVG1w
IHRtcChCYW5rIGJhbmspIHsgcmV0dXJuIG1fY29kZS5uZXdUbXAoYmFuayk7IH0KKyAgICBUbXAg
Z3ByKCkgeyByZXR1cm4gdG1wKEdQKTsgfQorICAgIFRtcCBmcHIoKSB7IHJldHVybiB0bXAoRlAp
OyB9CisgICAgVG1wIHRtcEZvclR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2
NDoKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6Cisg
ICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0dXJuIGZwcigpOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRtcCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogYWRkUGF0Y2hwb2ludChCMzo6VHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGQ8QjM6OlBhdGNocG9pbnRWYWx1ZT4odHlw
ZSwgQjM6Ok9yaWdpbigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJn
cz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBU
bXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2lu
dChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KHRoZUFy
Z3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2
b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50
VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAg
ICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgcmVzdWx0LCBWZWN0b3I8Q29uc3Ry
YWluZWRUbXAsIDg+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRQ
YXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBh
dGNoLCBUbXAgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIDg+JiYgYXJncykKKyAgICB7
CisgICAgICAgIGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkKKyAgICAgICAgICAgIG1fcGF0Y2hw
b2ludFNwZWNpYWwgPSBtX2NvZGUuYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPEIzOjpQYXRj
aHBvaW50U3BlY2lhbD4oKSk7CisKKyAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBwYXRjaCwgQXJn
OjpzcGVjaWFsKG1fcGF0Y2hwb2ludFNwZWNpYWwpKTsKKyAgICAgICAgSW5zdCByZXN1bHRNb3Y7
CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChwYXRjaC0+dHlwZSgp
ICE9IEIzOjpWb2lkKTsKKyAgICAgICAgICAgIHN3aXRjaCAocGF0Y2gtPnJlc3VsdENvbnN0cmFp
bnQua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAg
ICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5y
ZWcoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdE1vdiA9IEluc3QocmVzdWx0LmlzR1AoKSA/
IE1vdmUgOiBNb3ZlRG91YmxlLCBUbXAocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpLCBy
ZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSA9PSBCMzo6Vm9pZCk7CisgICAgICAg
IAorICAgICAgICBmb3IgKENvbnN0cmFpbmVkVG1wJiB0bXAgOiBhcmdzKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBVZ2gsIHRoaXMgaXMgc3VwZXIgY3JhcHB5IHRvIGp1c3QgdXNlIG51bGxwdHIg
Zm9yIEIzOjpWYWx1ZSogaGVyZS4KKyAgICAgICAgICAgIC8vIEkgdGhpbmsgdGhpcyB3aWxsIGp1
c3Qgd29yaywgYnV0IG91ciBhbHRlcm5hdGl2ZSBvcHRpb25zIGlzIHRvIGFic3RyYWN0CisgICAg
ICAgICAgICAvLyBvciByZWludmVudCBwYXJ0IG9mIFBhdGNocG9pbnRTcGVjaWFsLgorICAgICAg
ICAgICAgcGF0Y2gtPmFwcGVuZChudWxscHRyLCB0bXAucmVwKTsKKyAgICAgICAgICAgIHN3aXRj
aCAodG1wLnJlcC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpTb21l
UmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAudG1wKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdp
c3RlcjoKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBJIHRoaW5rIHdlIHdhbnQgdHlwZSBoZXJl
IHRvIGRpc3Rpbmd1aXNoIGkzMi9pNjMgYW5kIGYzMi9mNjQKKyAgICAgICAgICAgICAgICBhcHBl
bmQoYmFzaWNCbG9jaywgdG1wLnRtcC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgdG1wLnRt
cCwgdG1wLnJlcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAo
dG1wLnJlcC5yZWcoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBCMzo6VmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICAgICAgLy8gT09QUzog
SSB0aGluayB3ZSB3YW50IHR5cGUgaGVyZSB0byBkaXN0aW5ndWlzaCBpMzIvaTYzIGFuZCBmMzIv
ZjY0CisgICAgICAgICAgICAgICAgYXV0byBhcmcgPSBBcmc6OmNhbGxBcmcodG1wLnJlcC5vZmZz
ZXRGcm9tU1AoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKGJhc2ljQmxvY2ssIHRtcC50bXAu
aXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIHRtcC50bXAsIGFyZyk7CisgICAgICAgICAgICAg
ICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhdGNoLT5yZXN1
bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICBwYXRjaC0+bGF0ZUNsb2JiZXJlZCgp
LmNsZWFyKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAg
IGluc3QuYXJncy5hcHBlbmQoZ3ByKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRj
aC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChmcHIoKSk7CisKKyAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkp
OworICAgICAgICBpZiAocmVzdWx0TW92KQorICAgICAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5k
KFdURk1vdmUocmVzdWx0TW92KSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJy
YW5jaCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdENoZWNrKGNvbnN0IEJyYW5j
aCYgZW1pdEJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCisgICAgeworICAgICAg
ICAvLyBXZSBmYWlsIGFsb25nIHRoZSAidHJ1dGh5IiBlZGdlIG9mICdicmFuY2gnCisKKyAgICAg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIGZhaWxlZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAg
ICAgZW1pdEJyYW5jaCgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhm
YWlsZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgYXV0byogZmFpbGVkUGF0Y2hwb2ludCA9
IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBmYWlsZWRQYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZmFpbGVkLCBmYWls
ZWRQYXRjaHBvaW50LCBUbXAoKSk7CisgICAgICAgIGFwcGVuZChmYWlsZWQsIE9vcHMpOworCisg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKHZvaWQqIGZ1bmMsIFRt
cCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICB7CisgICAgICAgIGVtaXRDQ2FsbChtX2N1cnJl
bnRCbG9jaywgZnVuYywgcmVzdWx0LCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAg
IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRDQ2FsbChC
YXNpY0Jsb2NrKiBibG9jaywgdm9pZCogZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBhcmdzKQor
ICAgIHsKKyAgICAgICAgSW5zdCBpbnN0KEFpcjo6Q0NhbGwsIG51bGxwdHIpOworCisgICAgICAg
IFRtcCBjYWxsZWUgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRh
Z0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKworICAgICAgICBhdXRvIGFyZ3Mg
PSBzdGQ6Om1ha2VfdHVwbGUodGhlQXJncy4uLik7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IGFy
Z3MpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGltbU9yVG1wKGNDYWxsLT5jaGlsZChp
KSkpOworCisgICAgICAgIGJsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgfQorCisg
ICAgc3RhdGljIE9wY29kZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAg
ICAgcmV0dXJuIE1vdmUzMjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBy
ZXR1cm4gTW92ZTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICByZXR1cm4g
TW92ZUZsb2F0OworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBN
b3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZW1pdFRocm93RXhj
ZXB0aW9uKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisgICAgdm9pZCBlbWl0VGll
clVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4pOworCisgICAgRXhw
cmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9p
bnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CisgICAgRXhwcmVzc2lv
blR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwor
CisgICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSBwaGksIGNvbnN0IEV4cHJlc3Np
b25UeXBlIHNvdXJjZSk7CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsKKworICAg
IHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKworICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVU
VVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CisK
KyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sqLCBUbXApOwor
ICAgIGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVzIH07CisgICAg
dm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1p
dCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBUbXAgaW5zdGFuY2UsIEJhc2ljQmxvY2sqKTsK
KworICAgIE9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzogV2UgbmVlZCB0byBtYWtlIGFuIEFpcjo6
T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGZyb20gQjMgY29kZS4KKworICAgIEZ1
bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CisgICAg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlNb2RlIG1f
bW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgY29uc3QgQ29tcGlsYXRp
b25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07Cisg
ICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKKyAgICBjb25z
dCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CisKKyAgICBQcm9jZWR1cmUmIG1f
cHJvYzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sg
eyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sgeyBudWxscHRyIH07Cisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxUbXAsIFR5cGU+PiBtX2xvY2FsczsKKyAgICBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3Qg
ZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNo
b3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9
OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisgICAgVG1wIG1faW5zdGFuY2VW
YWx1ZTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0
YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgorICAgIGJvb2wgbV91c2VzSW5z
dGFuY2VWYWx1ZSB7IGZhbHNlIH07CisgICAgVG1wIGluc3RhbmNlVmFsdWUoKQorICAgIHsKKyAg
ICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7CisgICAgICAgIHJldHVybiBtX2luc3Rh
bmNlVmFsdWU7CisgICAgfQorCisgICAgdWludDMyX3QgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMg
eyAwIH07CisKKyAgICBCMzo6UGF0Y2hwb2ludFNwZWNpYWwqIG1fcGF0Y2hwb2ludFNwZWNpYWwg
eyBudWxscHRyIH07Cit9OworCisvLyBNZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2
ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJp
dCBvZmZzZXRzIGluIEIzLgoraW50MzJfdCBBaXJJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1
c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZzZXQpCit7CisgICAgaWYg
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgeworICAgICAgICBUbXAgcHJldmlv
dXNQdHIgPSBwdHI7CisgICAgICAgIHB0ciA9IGdwcigpOworICAgICAgICBUbXAgY29uc3RhbnQg
PSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGNvbnN0
YW50KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjb25zdGFudCwgcHJldmlvdXNQdHIsIHB0cik7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit2b2lk
IEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBi
bG9jaywgVG1wIGluc3RhbmNlKQoreworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsK
KyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAg
ICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgaml0LnN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAg
ICAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xv
YmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBp
dCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBUaGlz
IHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBp
bW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIGVmZmVjdHMucmVhZHMgPSBC
Mzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsK
KyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5z
dGFuY2VHUFIpKTsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IG1fd2FzbUNv
bnRleHRJbnN0YW5jZUdQUjsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgewor
ICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7
CisgICAgfSk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29t
cGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUp
CisgICAgOiBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9jb21waWxh
dGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9u
SW5kZXgpCisgICAgLCBtX3RpZXJVcCh0aWVyVXApCisgICAgLCBtX3Byb2MocHJvY2VkdXJlKQor
ICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCisgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQoreworICAgIG1fY3VycmVudEJsb2NrID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgbV9yb290QmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKworICAg
IC8vIEZJWE1FIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0
aGVyZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMgd2FzbSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZv
ciBub3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKKyAg
ICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpOworCisgICAgbV9tZW1vcnlCYXNlR1BSID0gcGlubmVkUmVncy5iYXNlTWVtb3J5
UG9pbnRlcjsKKyAgICBtX2NvZGUucGluUmVnaXN0ZXIobV9tZW1vcnlCYXNlR1BSKTsKKworICAg
IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5j
ZVBvaW50ZXI7CisgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIG1fY29k
ZS5waW5SZWdpc3RlcihtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOworCisgICAgaWYgKG1vZGUg
IT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5z
aXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBw
aW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOworICAgICAgICBmb3IgKGNv
bnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdp
c3RlcnMpCisgICAgICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0
ZXIpOworICAgIH0KKworICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5r
czo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7
CisKKyAgICBpZiAoaW5mby5tZW1vcnkpIHsKKyAgICAgICAgbV9jb2RlLnNldFdhc21Cb3VuZHND
aGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7
CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgICAgICAgICAgY2FzZSBN
ZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KHBpbm5lZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgSW52YWxpZEdQUlJlZyA9PSBwaW5u
ZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1fbW9kZSkg
eworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAgICAg
Ly8gTW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8gYW4gZXhw
bGljaXQKKyAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJl
bHkgb24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0CisgICAgICAgICAgICAvLyBvdXQtb2YtYm91
bmRzIGFjY2Vzc2VzLiBGYXVsdFNpZ25hbEhhbmRsZXIgbm9uZXRoZWxlc3MgbmVlZHMgdGhlCisg
ICAgICAgICAgICAvLyB0aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRvIHRoYXQg
dGh1bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBt
X2NvZGUuc2V0TnVtRW50cnlwb2ludHMoMSk7CisKKyAgICBHUFJSZWcgY29udGV4dEluc3RhbmNl
ID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJv
bG9ndWVTY3JhdGNoKDIpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworCisgICAgUmVmPEIz
OjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJl
ZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGNvZGUuZW1pdERlZmF1
bHRQcm9sb2d1ZShqaXQsIGNvZGUpOworCisgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zY3JhdGNoR1BSKDApOworICAgICAgICBhdXRvIG1vdmVM
b2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NvbXBpbGF0
aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
PFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7
CisgICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IENoZWNrZWQ8aW50
MzJfdD4gd2FzbUZyYW1lU2l6ZSA9IG1fY29kZS5mcmFtZVNpemUoKTsKKyAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIG1pbmltdW1QYXJlbnRDaGVja1NpemUgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCAxMDI0KTsKKyAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGV4dHJhRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgc3RkOjptYXg8dWludDMyX3Q+KAorICAgICAgICAgICAgICAgIC8vIFRo
aXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJl
IHRlcm1pbmFsIG5vZGVzIGluIHRoZSBjYWxsCisgICAgICAgICAgICAgICAgLy8gdHJlZSwgKGUu
ZyB0aGV5IGRvbid0IG1ha2UgYW55IGNhbGxzKSBhbmQgaGF2ZSBhIHNtYWxsIGVub3VnaCBmcmFt
ZSBzaXplLiBUaGlzIHdvcmtzIGJ5CisgICAgICAgICAgICAgICAgLy8gaGF2aW5nIGFueSBzdWNo
IHRlcm1pbmFsIG5vZGUgaGF2ZSBpdHMgcGFyZW50IGNhbGxlciBpbmNsdWRlIHNvbWUgZXh0cmEg
c2l6ZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAvLyBvd24gY2hlY2sgZm9yIGl0LiBUaGUgZ29h
bCBoZXJlIGlzIHR3b2ZvbGQ6CisgICAgICAgICAgICAgICAgLy8gMS4gRW1pdCBsZXNzIGNvZGUu
CisgICAgICAgICAgICAgICAgLy8gMi4gVHJ5IHRvIHNwZWVkIHRoaW5ncyB1cCBieSBza2lwcGlu
ZyBzdGFjayBjaGVja3MuCisgICAgICAgICAgICAgICAgbWluaW11bVBhcmVudENoZWNrU2l6ZSwK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3Mg
aW4gdGhlIFdhc20gLT4gRW1iZWRkZXIgY2FsbCBJQyBzdHViLiBTaW5jZSB0aGVzZSB3aWxsCisg
ICAgICAgICAgICAgICAgLy8gc3BpbGwgYWxsIGFyZ3VtZW50cyB0byB0aGUgc3RhY2ssIHdlIGVu
c3VyZSB0aGF0IGEgc3RhY2sgY2hlY2sgaGVyZSBjb3ZlcnMgdGhlCisgICAgICAgICAgICAgICAg
Ly8gc3RhY2sgdGhhdCBzdWNoIGEgc3R1YiB3b3VsZCB1c2UuCisgICAgICAgICAgICAgICAgKENo
ZWNrZWQ8dWludDMyX3Q+KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzKSAqIHNpemVvZihSZWdpc3Rl
cikgKyBqc2NDYWxsaW5nQ29udmVudGlvbigpLmhlYWRlclNpemVJbkJ5dGVzKCkpLnVuc2FmZUdl
dCgpCisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGNvbnN0IGludDMyX3QgY2hlY2tTaXpl
ID0gbV9tYWtlc0NhbGxzID8gKHdhc21GcmFtZVNpemUgKyBleHRyYUZyYW1lU2l6ZSkudW5zYWZl
R2V0KCkgOiB3YXNtRnJhbWVTaXplLnVuc2FmZUdldCgpOworICAgICAgICAgICAgYm9vbCBuZWVk
VW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlv
bnM6OnJlc2VydmVkWm9uZVNpemUoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0No
ZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNr
U2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CisKKyAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dz
IGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6
ZSBpcyB3aXRoaW4KKyAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNh
bGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCisgICAgICAgICAgICBpZiAo
bmVlZHNPdmVyZmxvd0NoZWNrKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25B
aXIoKS5wcm9sb2d1ZVNjcmF0Y2goMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6
dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5z
dGFuY2UoY29udGV4dEluc3RhbmNlKTsKKworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlciwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBvdmVyZmxvdzsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobmVlZFVuZGVy
Zmxvd0NoZWNrKSkKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaDEsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIo
Q0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3Rh
Y2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENv
bnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNo
ZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUg
Y29ycmVjdC4KKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJ
ZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRv
bid0IGFjdHVhbGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNo
cG9pbnQgY29uc2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNr
IGNoZWNrKSB3aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRy
eXBvaW50KFdURk1vdmUocHJvbG9ndWVHZW5lcmF0b3IpKTsKKworICAgIGlmIChDb250ZXh0Ojp1
c2VGYXN0VExTKCkpIHsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZ3ByKCk7CisgICAgICAg
IC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gb25seSBkbyB0aGlzIGlmIHdlIHVzZSBpbnN0YW5j
ZSB2YWx1ZS4KKyAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChjb250ZXh0SW5zdGFuY2UpLCBtX2lu
c3RhbmNlVmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBUbXAo
Y29udGV4dEluc3RhbmNlKTsKKworICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKKyAgICBt
X2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
VHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAg
ICAgICAgICAgbV9sb2NhbHNbaV0gPSB7IGdwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAg
ICAgICAgICAgbV9sb2NhbHNbaV0gPSB7IGZwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIo
KS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZSwgWyZdIChjb25zdCBBaXI6OkFyZyYgYXJnLCB1bnNp
Z25lZCBpKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAg
ICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgYXJnLCBtX2xv
Y2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJ
NjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICBh
cHBlbmQoTW92ZUZsb2F0LCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91
YmxlLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0pOworCisgICAgZW1pdFRpZXJVcENoZWNrKFRpZXJVcENvdW50OjpmdW5j
dGlvbkVudHJ5RGVjcmVtZW50KCksIEIzOjpPcmlnaW4oKSk7Cit9CisKK3ZvaWQgQWlySVJHZW5l
cmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVt
b3J5LCBUbXAgaW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCit7
CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmxvY2ssIGluc3RhbmNlKTsKKworICAg
IGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6
WWVzKSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBi
dXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxXYXNtSW5zdGFuY2UqPihu
dWxscHRyKS0+Y2FjaGVkU3RhY2tMaW1pdCgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSk7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNl
dE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNo
ZWRTdGFja0xpbWl0KCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7
CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwg
SW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSwgdGVtcCk7Cisg
ICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgQXJnOjphZGRyKHRlbXApLCB0ZW1wKTsKKyAgICAg
ICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCB0ZW1wLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICB9CisKKyAgICBpZiAo
ISFtZW1vcnkpIHsKKyAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdz
ID0gJlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2Ji
ZXJzOworICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIp
OworICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnMpCisg
ICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOworCisgICAgICAgIGF1
dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgRWZmZWN0
cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CisgICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoY2xvYmJlcnMpOworCisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0g
cGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBz
aXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBBU1NFUlQo
c2l6ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5z
aXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwg
YW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5n
cHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwg
YmFzZU1lbW9yeSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJl
Z3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9KTsKKworICAgICAg
ICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOworICAgIH0KK30K
Kwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYg
aml0LCBFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvblN0dWIgPSBqaXQuanVtcCgpOworCisg
ICAgaml0LmFkZExpbmtUYXNrKFtqdW1wVG9FeGNlcHRpb25TdHViXSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9uU3R1Yiwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIH0p
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90
IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3Jk
T3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gY291bnQ7CisgICAgdG90YWxCeXRlc0NoZWNr
ZWQgKz0gbV9sb2NhbHMuc2l6ZSgpOworICAgIHVpbnQzMl90IHRvdGFsQnl0ZXM7CisgICAgV0FT
TV9DT01QSUxFX0ZBSUxfSUYoKHRvdGFsQnl0ZXNDaGVja2VkLnNhZmVHZXQodG90YWxCeXRlcykg
PT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgfHwgIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBh
Y2l0eSh0b3RhbEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgdG90YWxCeXRl
cywgIiBsb2NhbHMiKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpJNjQ6IHsKKyAgICAgICAgICAgIFRtcCBsb2NhbCA9IGdwcigpOwor
ICAgICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHsgbG9jYWwsIHR5cGUgfSk7Cisg
ICAgICAgICAgICBhcHBlbmQoWG9yNjQsIGxvY2FsLCBsb2NhbCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBl
OjpGNjQ6IHsKKyAgICAgICAgICAgIFRtcCBsb2NhbCA9IGZwcigpOworICAgICAgICAgICAgbV9s
b2NhbHMudW5jaGVja2VkQXBwZW5kKHsgbG9jYWwsIHR5cGUgfSk7CisgICAgICAgICAgICBUbXAg
dGVtcCA9IGdwcigpOworICAgICAgICAgICAgLy8gSUVFRSA3NTQgIjAiIGlzIGp1c3QgaW50MzIv
NjQgemVyby4KKyAgICAgICAgICAgIGFwcGVuZChYb3I2NCwgdGVtcCwgdGVtcCk7CisgICAgICAg
ICAgICBhcHBlbmQodHlwZSA9PSBUeXBlOjpmMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9E
b3VibGUsIHRlbXAsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBPT1BTOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9s
b2NhbHMuc2l6ZSgpID09IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOyAvLyBXZSBoYW5kbGUg
YXJndW1lbnRzIGluIHRoZSBwcm9sb2d1ZQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XS5maXJz
dCk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSht
X2xvY2Fsc1tpbmRleF0uc2Vjb25kKSwgbV9sb2NhbHNbaW5kZXhdLmZpcnN0LCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxl
KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVucmVhY2hh
YmxlID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgdW5yZWFjaGFibGUtPnNldEdlbmVy
YXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNl
cHRpb25UeXBlOjpVbnJlYWNoYWJsZSk7CisgICAgfSk7CisgICAgdW5yZWFjaGFibGUtPmVmZmVj
dHMudGVybWluYWwgPSB0cnVlOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSko
dm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5j
ZSogaW5zdGFuY2UsIGludDMyX3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBpbnN0YW5j
ZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgICAgICBpZiAoZGVsdGEgPCAw
KQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5j
ZS0+bWVtb3J5KCktPmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24p
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2Fz
ZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNl
IE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNh
c2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAg
ICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVl
KCkucGFnZUNvdW50KCk7CisgICAgfTsKKworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRD
Q2FsbChncm93TWVtb3J5LCByZXN1bHQsIG1fZnJhbWVQb2ludGVyLCBpbnN0YW5jZVZhbHVlKCks
IGRlbHRhKTsKKyAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdDo6Tm8sIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50
QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8TWVtb3J5Kj4o
bnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBv
biB0aGlzIHNpemUiKTsKKworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCB0ZW1wMiA9
IGdwcigpOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNo
ZWRNZW1vcnlTaXplKCkpLCB0ZW1wMSk7CisgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFs
dWUgPSAxNjsKKyAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8
PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNv
cnJlY3QuIik7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKDE2KSwgdGVtcDIpOworICAgIGFk
ZFNoaWZ0KFVyc2hpZnQ2NCwgdGVtcDEsIHRlbXAyLCByZXN1bHQpOworICAgIGFkZChNb3ZlMzIs
IHJlc3VsdCwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAg
IGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLmZpcnN0KSwgdmFsdWUs
IG1fbG9jYWxzW2luZGV4XS5maXJzdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVHlwZSB0eXBlID0gbV9pbmZvLmdsb2JhbHNb
aW5kZXhdLnR5cGU7CisKKyAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgVG1w
IHRlbXAgPSBncHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3Jt
KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQo
TW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFs
cygpKSwgdGVtcCk7CisKKyAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVDYXN0PGludDMyX3Q+KGlu
ZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9m
ZnNldCwgQjM6OndpZHRoRm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQorICAgICAgICBhcHBlbmQo
bW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgcmVzdWx0
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCB0ZW1wMik7CisgICAgICAgIGFwcGVuZChBZGQ2
NCwgdGVtcDIsIHRlbXAsIHRlbXApOworICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBl
KHR5cGUpLCBBcmc6OmFkZHIodGVtcCksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgdGVtcCA9IGdw
cigpOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6
Om9mZnNldE9mR2xvYmFscygpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpLCB0ZW1w
KTsKKworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOworCisgICAg
aW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3Rl
cikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5
cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0
eXBlKSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShv
ZmZzZXQpLCB0ZW1wMik7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgdGVtcDIsIHRlbXAsIHRlbXAp
OworICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCB2YWx1ZSwgQXJnOjph
ZGRyKHRlbXApKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCitpbmxpbmUgRXhwcmVz
c2lvblR5cGUgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJl
c3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0
aW9uKQoreworICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOworCisgICAgc3dpdGNoIChtX21v
ZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMhCisKKyAgICAgICAgLy8gV2UncmUg
bm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3QgdGhlcmVmb3JlIGNoZWNr
IHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBzaXplLgor
ICAgICAgICAvL0FTU0VSVChtX21lbW9yeVNpemVHUFIpOworICAgICAgICAvL0FTU0VSVChzaXpl
T2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOworICAgICAgICAvL21fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG1fbWVt
b3J5U2l6ZUdQUiwgcG9pbnRlciwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7Cisg
ICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQgNEdpQityZWR6b25lIGZvciB0aGlzIG1l
bW9yeS4gT25seSB0aGUgdXNlci1hbGxvY2F0ZWQgcGFnZXMgYXJlIGFkZHJlc3NhYmxlLCBjb250
aWd1b3VzbHkgaW4gcmFuZ2UgWzAsIGN1cnJlbnRdLAorICAgICAgICAvLyBhbmQgZXZlcnl0aGlu
ZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05FLiBXZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55
IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0aGUgNEdpQiByYW5nZSBiZWNhdXNlIFdlYkFzc2Vt
Ymx5IHJlZ2lzdGVyCisgICAgICAgIC8vIG1lbW9yeSBhY2Nlc3NlcyBhcmUgMzItYml0LiBIb3dl
dmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyICsgb2Zmc2V0IGFjY2Vzc2VzIHBlcmZvcm0gdGhlIGFk
ZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nlc3MgYWJvdmUKKyAgICAgICAg
Ly8gdGhlIDMyLWJpdCBsaW1pdCAodGhlIG9mZnNldCBpcyB1bnNpZ25lZCAzMi1iaXQpLiBUaGUg
cmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgb2Zmc2V0cywgYW5kIHdlJ2xsIGV4cGxpY2l0
bHkgYm91bmRzIGNoZWNrIGFueQorICAgICAgICAvLyByZWdpc3RlciArIGxhcmdlIG9mZnNldCBh
Y2Nlc3MuIFdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBiZSBnZW5lcmF0ZWQgZnJlcXVlbnRseS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgdGhhdCByZWdpc3RlciArIGxh
cmdlIG9mZnNldCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3JlZHpvbmUgc2luY2UgdGhhdCdzIHRlY2hu
aWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lkIG92ZXJmbG93aW5nIHRoZQorICAgICAg
ICAvLyBQUk9UX05PTkUgcmVnaW9uLCBidXQgaXQncyBiZXR0ZXIgaWYgd2UgdXNlIGEgc21hbGxl
ciBpbW1lZGlhdGUgYmVjYXVzZSBpdCBjYW4gY29kZWdlbnMgYmV0dGVyLiBXZSBrbm93IHRoYXQg
YW55dGhpbmcgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICAvLyB0aGFuIHRoZSBkZWNsYXJl
ZCAnbWF4aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVt
YmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQgJ21heGltdW0nIHRoZW4gd2Ugc3RpbGwga25v
dyB0aGF0CisgICAgICAgIC8vIGFueSBhY2Nlc3MgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDRH
aUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUgcmVkem9uZS4KKyAgICAgICAgaWYgKG9m
ZnNldCA+PSBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKSkgeworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUyEKKyAgICAgICAgICAgIC8vc2l6
ZV90IG1heGltdW0gPSBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSA/IG1faW5mby5tZW1vcnkubWF4
aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Cisg
ICAgICAgICAgICAvL21fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAt
IDEsIG1heGltdW0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisK
KyAgICBUbXAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcG9pbnRlciwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoQWRkNjQsIFRtcChtX21lbW9yeUJhc2VHUFIpLCByZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9h
ZE9wVHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
MzJMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAg
ICAgIHJldHVybiAxOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZV
OgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDMyUzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpGMzJMb2FkOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICByZXR1cm4gODsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFRt
cCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIGludDMyX3Qgb2Zmc2V0ID0gZml4
dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIFRtcCBpbW1UbXA7
CisgICAgVG1wIG5ld1B0cjsKKyAgICBUbXAgcmVzdWx0OworCisgICAgYXV0byBsb2FkQXJnID0g
WyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6Ondp
ZHRoRm9yQnl0ZXMoc2l6ZU9mTG9hZE9wKG9wKSkpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6
YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBpbW1UbXAgPSBncHIoKTsKKyAgICAgICAg
bmV3UHRyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQp
LCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIGltbVRtcCwgcG9pbnRlciwgbmV3UHRy
KTsKKyAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihuZXdQdHIpOworICAgIH07CisKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6IHsKKyAgICAgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOFM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVu
ZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBw
ZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOiB7CisgICAgICAgIHJlc3Vs
dCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDgsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsK
KyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVkIGFub3RoZXIgemV4dCBoZXJlPworICAgICAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4LCBsb2FkQXJnKCksIHJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2
UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25l
ZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOiB7CisgICAgICAgIHJlc3VsdCA9IGdw
cigpOworICAgICAgICBhcHBlbmQoTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCBy
ZXN1bHQpOworICAgICAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2Fk
MTZVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDE2LCBs
b2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDE2VTogeworICAgICAgICAvLyBPT1BTOiBEbyBJIG5lZWQgYW5vdGhl
ciB6ZXh0IGhlcmU/CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9h
ZDE2LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6
IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzIsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkMzJTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBl
bmQoTW92ZTMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0ZW5k
MzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
ICAgIGFwcGVuZChNb3ZlLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDogeworICAgICAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgbG9hZEFyZygpLCByZXN1bHQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBsb2FkQXJn
KCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9m
ZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0g
SW50MzIpOworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0
LCBzaXplT2ZMb2FkT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRo
aXMgaXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9y
LCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0
aW9uLiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50
KEIzOjpWb2lkKTsKKyAgICAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZC
b3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQo
cGF0Y2gsIFRtcCgpKTsKKworICAgICAgICAvLyBXZSB3b24ndCByZWFjaCBoZXJlLCBzbyB3ZSBq
dXN0IHBpY2sgYSByYW5kb20gcmVnLgorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgY2FzZSBM
b2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4
VToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6
CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9
IGdwcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMy
TG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChv
cCkpLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIHVpbnQzMl90IHNp
emVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNh
c2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9y
ZTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0
U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgcmV0dXJu
IDQ7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6RjY0U3RvcmU6CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2lubGluZSB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0
U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCit7CisgICAgaW50MzJfdCBvZmZzZXQgPSBm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOworCisgICAgVG1wIGltbVRt
cDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgYXV0byBzdG9yZUFyZyA9IFsmXSAoKSB7CisgICAg
ICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNp
emVPZlN0b3JlT3Aob3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIs
IG9mZnNldCk7CisgICAgICAgIGltbVRtcCA9IGdwcigpOworICAgICAgICBuZXdQdHIgPSBncHIo
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7Cisg
ICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQdHIpOworICAgICAgICBy
ZXR1cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMy
U3RvcmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4LCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICAgICAgYXBwZW5kKFN0b3JlMTYsIHZhbHVl
LCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6
STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKKyAgICAgICAgYXBw
ZW5kKE1vdmUzMiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCBz
dG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMy
U3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAg
IGFwcGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIEFTU0VSVChwb2ludGVyLT50eXBlKCkgPT0gSW50MzIpOworCisgICAgaWYgKFVO
TElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSkp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlzIHByb3ZhYmx5IG91dCBv
ZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28gd2UgaGF2ZSB0byBoYW5k
bGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gSG93ZXZlciwgdGhpcyBt
YXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDM1
CisgICAgICAgIGF1dG8qIHRocm93RXhjZXB0aW9uID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7
CisgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91
bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHRo
cm93RXhjZXB0aW9uLCBUbXAoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZU9wKG9w
LCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZlN0b3Jl
T3Aob3ApKSwgdmFsdWUsIG9mZnNldCk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNz
aW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG5vblplcm8uaXNHUCgpID09IHpl
cm8uaXNHUCgpKTsKKyAgICByZXN1bHQgPSBub25aZXJvLmlzR1AoKSA/IGdwcigpIDogZnByKCk7
CisgICAgaWYgKG5vblplcm8uaXNHUCgpKQorICAgICAgICBhcHBlbmQoTW92ZSwgbm9uWmVybywg
cmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBub25aZXJvLCBy
ZXN1bHQpOworCisgICAgQmFzaWNCbG9jayogaXNaZXJvID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBh
cHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoWmVybyksIGNvbmRpdGlvbiwgY29uZGl0
aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1plcm8sIGNvbnRpbnVh
dGlvbik7CisKKyAgICBpZiAoemVyby5pc0dQKCkpCisgICAgICAgIGFwcGVuZChpc1plcm8sIE1v
dmUsIHplcm8sIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQoaXNaZXJvLCBNb3Zl
RG91YmxlLCB6ZXJvLCByZXN1bHQpOworICAgIGFwcGVuZChpc1plcm8sIEp1bXApOworICAgIGlz
WmVyby0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sg
PSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJh
dG9yOjplbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4g
b3JpZ2luKQoreworICAgIGlmICghbV90aWVyVXApCisgICAgICAgIHJldHVybjsKKworICAgIFRt
cCBjb3VudGRvd25QdHIgPSBncHIoKTsKKyAgICBUbXAgb2xkQ291bnRkb3duID0gZ3ByKCk7Cisg
ICAgVG1wIG5ld0NvdW50ZG93biA9IGdwcigpOworCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6Ymln
SW1tKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVwKSksIGNvdW50ZG93blB0cik7
CisgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNvdW50ZG93blB0ciksIG9sZENvdW50ZG93
bik7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRJbW1Gb3JtKGRlY3JlbWVudENv
dW50KSk7CisgICAgYXBwZW5kKE1vdmUzMiwgb2xkQ291bnRkb3duLCBuZXdDb3VudGRvd24pOwor
ICAgIGFwcGVuZChTdWIzMiwgQXJnOjppbW0oZGVjcmVtZW50Q291bnQpLCBuZXdDb3VudGRvd24p
OworICAgIGFwcGVuZChNb3ZlMzIsIG5ld0NvdW50ZG93biwgQXJnOjphZGRyKGNvdW50ZG93blB0
cikpOworCisgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBF
ZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgZWZmZWN0cy5yZWFkcyA9IEIz
OjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIGVmZmVjdHMud3JpdGVzID0gQjM6OkhlYXBSYW5nZTo6
dG9wKCk7CisgICAgcGF0Y2gtPmVmZmVjdHMgPSBlZmZlY3RzOworCisgICAgcGF0Y2gtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0aWVyVXAgPSBq
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFt
c1sxXS5ncHIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0aWVyVXBSZXN1bWUg
PSBqaXQubGFiZWwoKTsKKworICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCkgeworICAgICAgICAgICAgdGllclVwLmxpbmsoJmppdCk7CisKKyAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhUGFkZGluZ0J5dGVzID0gMDsKKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IHJlZ2lzdGVyc1RvU3BpbGwgPSB7IH07CisgICAgICAgICAgICByZWdpc3RlcnNU
b1NwaWxsLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVn
aXN0ZXJzVG9TcGlsbCwgZXh0cmFQYWRkaW5nQnl0ZXMpOworCisgICAgICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fZnVuY3Rpb25JbmRleCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBS
ZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRp
b24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGppdC5qdW1wKHRpZXJVcFJlc3Vt
ZSk7CisKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxs
KGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPE5vUHRyVGFnPihjYWxsKSwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0cmlnZ2Vy
T01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworCisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CisKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCksIG5l
d0NvdW50ZG93biwgb2xkQ291bnRkb3duKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xE
YXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJhc2lj
QmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1
cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhib2R5KTsKKworICAgIG1fY3VycmVudEJsb2NrID0g
Ym9keTsKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6Omxvb3BEZWNyZW1lbnQoKSwg
b3JpZ2luKCkpOworCisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUs
IHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJv
ZHkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFk
ZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YShPcmln
aW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6VG9wTGV2
ZWwsIG1fcHJvYy5hZGRCbG9jaygpKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRh
IEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4g
Q29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBC
bG9ja1R5cGU6OkJsb2NrLCBtX3Byb2MuYWRkQmxvY2soKSk7Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENv
bnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCYXNpY0Jsb2NrKiB0
YWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CisgICAgCisgICAgLy8gV2FzbSBib29scyBhcmUgaTMyLgorICAgIGFwcGVuZChC
cmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90WmVybyksIGNvbmRp
dGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YWtl
biwgbm90VGFrZW4pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKKyAgICByZXN1bHQg
PSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSks
IEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4pOworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBh
cHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250
aW51YXRpb24pOworICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKwor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRh
dGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tU
eXBlOjpJZik7CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CisgICAgZGF0YS5j
b252ZXJ0SWZUb0Jsb2NrKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHJldHVy
blZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXplKCkpIHsKKyAg
ICAgICAgVG1wIHJldHVyblZhbHVlR1BSID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBS
KTsKKyAgICAgICAgc3dpdGNoIChkYXRhLnNpZ25hdHVyZSgpKSB7CisgICAgICAgIGNhc2UgVHlw
ZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgcmV0dXJuVmFsdWVzWzBdLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0MzIsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGFwcGVuZChSZXQ2NCwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgcmV0
dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0Rmxv
YXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCByZXR1cm5WYWx1ZXNbMF0s
IHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0dXJuVmFs
dWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAg
ICAgYXBwZW5kKFJldFZvaWQpOworICAgIHJldHVybiB7IH07Cit9CisKKy8vIE5PVEU6IEFsbCBi
cmFuY2hlcyBpbiBXYXNtIGFyZSBvbiAzMi1iaXQgaW50cworCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHRGb3JCcmFu
Y2goKSk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJh
bmNoKCk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RaZXJvKSwgY29uZGl0aW9uLCBjb25kaXRp
b24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGFwcGVuZChKdW1wKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNl
dFN1Y2Nlc3NvcnModGFyZ2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25z
dCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJn
ZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+
cmVzdWx0Rm9yQnJhbmNoKCkpOworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25T
dGFjaywgZGVmYXVsdFRhcmdldC5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQmFzaWNCbG9jayog
dGFyZ2V0ID0gdGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICAgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIGlmIChB
cmc6OmlzVmFsaWRJbW1Gb3JtKGkpKQorICAgICAgICAgICAgYXBwZW5kKEJyYW5jaDMyLCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgQXJnOjppbW0oaSksIGNvbmRpdGlvbik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAg
ICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oaSksIGNvbnN0YW50KTsKKyAgICAgICAg
ICAgIGFwcGVuZChCcmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCks
IGNvbnN0YW50LCBjb25kaXRpb24pOworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5zZXRTdWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9uKTsKKworICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBhcHBlbmQoSnVtcCk7CisgICAg
bV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGVmYXVsdFRhcmdldC50YXJnZXRCbG9ja0Zv
ckJyYW5jaCgpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5
LmNvbnRyb2xEYXRhOworCisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNr
LCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKworICAgIHJldHVybiBhZGRFbmRUb1Vu
cmVhY2hhYmxlKGVudHJ5KTsKK30KKworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBD
b250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworICAgIG1fY3VycmVudEJsb2Nr
ID0gZGF0YS5jb250aW51YXRpb247CisKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBl
OjpJZikgeworICAgICAgICBhcHBlbmQoZGF0YS5zcGVjaWFsLCBKdW1wKTsKKyAgICAgICAgZGF0
YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKG1fY3VycmVudEJsb2NrKTsKKyAgICB9CisKKyAgICBm
b3IgKFRtcCByZXN1bHQgOiBkYXRhLnJlc3VsdCkKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBo
YXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBh
IHJldHVybiBoZXJlLgorICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVs
KQorICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9
PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisgICAgVHlwZSBy
ZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBUbXAgcmV0dXJuVG1wOwor
ICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAg
IHJldHVyblRtcCA9IGdwcigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoK
KyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmV0dXJuVG1wID0gZnByKCk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOworCisgICAgaWYg
KG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXgpKSB7CisgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9t
YXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkp
OworCisgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFk
IG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJl
IGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAgIFRtcCB0YXJnZXRJbnN0YW5j
ZSA9IGdwcigpOworICAgICAgICAvLyBPT1BTOiBUcnkgdG8gaXNlbCB0aGlzIGJldHRlcgorICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oSW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5z
dGFuY2UoZnVuY3Rpb25JbmRleCkpLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChB
ZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmFkZHIodGFyZ2V0SW5zdGFuY2UpLCB0YXJnZXRJbnN0YW5jZSk7CisKKyAgICAg
ICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAg
QmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgICAg
IGFwcGVuZChCcmFuY2hUZXN0NjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90WmVy
byksIHRhcmdldEluc3RhbmNlLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVyQmxvY2spOworCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNU
eXBlKHJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5u
ZWQgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRp
YWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5j
ZS4KKyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUg
Y2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpKTsKKworCisgICAgICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVw
Q2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNoLCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpW
YWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCBy
ZXAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
W3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRy
VGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChpc1dhc21CbG9jaywgcGF0
Y2hwb2ludCwgcmV0dXJuVG1wLCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAgICAgYXBw
ZW5kKGlzV2FzbUJsb2NrLCBKdW1wKTsKKyAgICAgICAgICAgIGlzV2FzbUJsb2NrLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAg
ICBUbXAganVtcERlc3RpbmF0aW9uID0gZ3ByKCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9u
SW5kZXgpKSwganVtcERlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW5z
dGFuY2VWYWx1ZSgpLCBqdW1wRGVzdGluYXRpb24pOworICAgICAgICAgICAgYXBwZW5kKE1vdmUs
IEFyZzo6YWRkcihqdW1wRGVzdGluYXRpb24pLCBqdW1wRGVzdGluYXRpb24pOworCisgICAgICAg
ICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBl
KSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdp
c3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAg
ICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29t
ZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
KSk7CisKKyAgICAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAg
ICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChqdW1wRGVzdGluYXRpb24pOworCisgICAgICAgICAg
ICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBl
LCBwYXRjaCwgYXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAg
ICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5
cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChpc0VtYmVkZGVyQmxvY2ssIHBhdGNo
cG9pbnQsIHJldHVyblRtcCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICAgICAgICAgIGFwcGVu
ZChpc0VtYmVkZGVyQmxvY2ssIEp1bXApOworICAgICAgICAgICAgaXNFbWJlZGRlckJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBi
ZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUg
bW9kaWZpZWQgb3VyIE1lbW9yeS4KKyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3Rh
dGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VW
YWx1ZSgpLCBjb250aW51YXRpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8qIHBhdGNo
cG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKworICAgICAgICBWZWN0b3I8Q29uc3RyYWlu
ZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0
dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2gsIGFyZ3MsIFsmXSAoVG1wIHRtcCwgQjM6
OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVw
IH0pOworICAgICAgICB9KTsKKworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNh
bGwoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXgg
fSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9p
bnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJldHVyblRtcCwgV1RGTW92ZShwYXRjaEFy
Z3MpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxhc3QoKTsK
KyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisK
KyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworICAgIC8vIE5vdGU6IGNhbGwgaW5kaXJlY3QgY2Fu
IGNhbGwgZWl0aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uIEJlY2F1c2UKKyAgICAvLyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiBpcyBsaWtl
IGNhbGxpbmcgaW50byB0aGUgZW1iZWRkZXIsIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBhbGwg
Y2FsbCBpbmRpcmVjdHMKKyAgICAvLyBjYW4gYmUgdG8gdGhlIGVtYmVkZGVyIGZvciBvdXIgc3Rh
Y2sgY2hlY2sgY2FsY3VsYXRpb24uCisgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6
Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Mu
c2l6ZSgpKSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0g
Z3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyID0gZ3ByKCk7CisgICAg
RXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCA9IGdwcigpOworICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6
Om9mZnNldE9mVGFibGUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
QXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCksIEIzOjpXaWR0
aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKFRhYmxl
OjpvZmZzZXRPZkluc3RhbmNlcygpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSwgQjM6Oldp
ZHRoNjQpKTsKKworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUo
KSwgSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5n
dGgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rpb25CdWZm
ZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSwgY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpLCBpbnN0YW5jZXNCdWZmZXIp
OworICAgICAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ckxlbmd0aCwgVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
TGVuZ3RoKTsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92ZTMyLCBjYWxsZWVJbmRleCwgY2FsbGVl
SW5kZXgpOworCisgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBsb29raW5nIGZvciBpcyB2
YWxpZC4KKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaDMyLCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNhbGxlZUluZGV4LCBjYWxs
YWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5l
bWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc0NhbGxJbmRp
cmVjdCk7CisgICAgfSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gZ3ByKCk7
CisgICAgeworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGdw
cigpOworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNw
YWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKHNp
emVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4
KTsKKyAgICAgICAgYXBwZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5k
ZXgpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIGNhbGxl
ZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFk
ZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9m
ZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29kZSk7IC8vIFBvaW50ZXIg
dG8gY2FsbGVlIGNvZGUuCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4g
ImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4K
KyAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVz
dCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0
dXJlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQi
KTsKKyAgICAgICAgLy8gT09QUzogVGhpcyBzZWVtcyBkdW1iIHRvIGRvIHR3byBjaGVja3MganVz
dCBmb3IgYSBuaWNlciBlcnJvciBoZXJlLi4uCisKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworCisgICAg
ICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChTaWduYXR1cmU6
OmludmFsaWRJbmRleCA9PSAwKTsKKyAgICAgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0NjQsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBj
YWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7
CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgRXhw
cmVzc2lvblR5cGUgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IGdwcigpOworICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlKSksIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dChTaWduYXR1cmU6OmludmFsaWRJbmRleCA9PSAwKTsKKyAgICAgICAgICAgIGFwcGVuZChCcmFu
Y2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGNhbGxlZVNpZ25h
dHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgfSwgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6OkJh
ZFNpZ25hdHVyZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIERvIGEgY29udGV4dCBz
d2l0Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgVG1wIG5ld0NvbnRleHRJbnN0YW5jZSA9
IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbmRleChpbnN0YW5jZXNCdWZmZXIs
IGNhbGxlZUluZGV4LCA4LCAwKSwgbmV3Q29udGV4dEluc3RhbmNlKTsKKworICAgICAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNC
bG9jayogZG9Db250ZXh0U3dpdGNoID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICAgICAgYXBw
ZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgbmV3Q29u
dGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRvQ29udGV4dFN3aXRjaCk7CisKKyAgICAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAg
Ly8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBjYWxsaW5nIHNvbWV0aGluZyB3aXRo
IEJvdW5kc0NoZWNraW5nIG1lbW9yeS4KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBo
YXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzIxODEKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86Omdl
dCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdwcigpOworICAgICAg
ICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVk
UmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5u
ZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHRJ
bnN0YW5jZSAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJh
c2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAgICAgICAgaml0LnN0b3Jl
V2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJl
Z2lzdGVyCisgICAgICAgICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2Mjk1MgorICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9
PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3
Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9m
ZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3
Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9p
ZCouCisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50KGRvQ29udGV4dFN3aXRj
aCwgcGF0Y2hwb2ludCwgVG1wKCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgp
KTsKKyAgICAgICAgYXBwZW5kKGRvQ29udGV4dFN3aXRjaCwgSnVtcCk7CisgICAgICAgIGRvQ29u
dGV4dFN3aXRjaC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmFkZHIoY2FsbGVlQ29kZSksIGNhbGxlZUNvZGUpOworCisgICAgVHlwZSByZXR1cm5UeXBlID0g
c2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBUbXAgcmV0dXJuVG1wOworICAgIHN3aXRjaCAo
cmV0dXJuVHlwZSkgeworICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIHJldHVyblRtcCA9
IGdwcigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5
cGU6OkY2NDoKKyAgICAgICAgcmV0dXJuVG1wID0gZnByKCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsK
KyAgICBwYXRjaC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIHBhdGNoLT5lZmZl
Y3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBv
dGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGlu
c3RhbmNlLgorICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgYWx3YXlzIGNh
bGxpbmcgc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nIHNvCisgICAgLy8gYmVjYXVz
ZSB0aGUgd2FzbS0+d2FzbSB0aHVuayB1bmNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXpl
IHJlZ2lzdGVycy4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMs
IGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHViIGFzc3VtZXMgaXQgY2FuCisgICAgLy8gdXNlIGFsbCB0
aGUgcGlubmVkIHJlZ2lzdGVycyBhcyBzY3JhdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgcGF0Y2gtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAg
ICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRBcmdzOworICAgIGVtaXRBcmdzLmFwcGVuZChj
YWxsZWVDb2RlKTsKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9j
b2RlLCByZXR1cm5UeXBlLCBwYXRjaCwgYXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAg
cmVwKSB7CisgICAgICAgIGVtaXRBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgIH0pOwor
ICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmNhbGwo
cGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFn
KTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwg
cmV0dXJuVG1wLCBXVEZNb3ZlKGVtaXRBcmdzKSk7CisKKyAgICAvLyBUaGUgY2FsbCBjb3VsZCBo
YXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQg
aGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0
YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNl
VmFsdWUoKSwgbV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBB
aXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhw
cmVzc2lvblR5cGUmIHNvdXJjZSkKK3sKKyAgICAvLyBPT1BTOiBXZSBraW5kYSB3YW50IHR5cGVz
IGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2NC9mMzIvZjY0IQorICAgIEFTU0VSVChkc3QuaXNH
UCgpID09IHNvdXJjZS5pc0dQKCkpOworICAgIGFwcGVuZChkc3QuaXNHUCgpID8gTW92ZSA6IE1v
dmVEb3VibGUsIHNvdXJjZSwgZHN0KTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnlW
YWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBjb25zdCBS
ZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPD0gcmVzdWx0
U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUo
KTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAtIDEgLSBpXSwgcmVz
dWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsKK30KKworLy9zdGF0aWMgdm9p
ZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEFp
cklSR2VuZXJhdG9yOjpFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorLy97CisvLyAg
ICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOworLy8gICAgZm9yIChjb25zdCBh
dXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQorLy8gICAgICAgIGRhdGFMb2coY29t
bWEsICpleHByZXNzaW9uKTsKKy8vfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0
IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0
KiBleHByZXNzaW9uU3RhY2spCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRyb2xTdGFjayk7Cisg
ICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25TdGFjayk7CisKKyAgICAvLyBPT1BTIQorICAgIC8q
CisgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIEdyYXBoOiIpOworICAgIGRhdGFMb2cobV9jb2Rl
KTsKKyAgICBkYXRhTG9nTG4oIldpdGggY3VycmVudCBibG9jazoiLCAqbV9jdXJyZW50QmxvY2sp
OworICAgIGRhdGFMb2dMbigiQ29udHJvbCBzdGFjazoiKTsKKyAgICBBU1NFUlQoY29udHJvbFN0
YWNrLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IGNvbnRyb2xTdGFjay5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgZGF0YUxvZygiICAiLCBjb250cm9sU3RhY2tbaV0uY29udHJvbERhdGEs
ICI6ICIpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIiwgIiIpOworICAgICAgICBk
dW1wRXhwcmVzc2lvblN0YWNrKGNvbW1hLCAqZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgZXhw
cmVzc2lvblN0YWNrID0gJmNvbnRyb2xTdGFja1tpXS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsK
KyAgICAgICAgZGF0YUxvZ0xuKCk7CisgICAgfQorICAgIGRhdGFMb2dMbigpOworICAgICovCit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgoreworICAgIHJldHVy
biBCMzo6T3JpZ2luKCk7CisgICAgLy9PcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJy
ZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7Cisg
ICAgLy9BU1NFUlQoaXNWYWxpZE9wVHlwZShzdGF0aWNfY2FzdDx1aW50OF90PihvcmlnaW4ub3Bj
b2RlKCkpKSk7CisgICAgLy9yZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsKK30K
KworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29u
c3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9y
eU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50
ZXJuYWxGdW5jdGlvbj4oKTsKKworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5
cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21waWxh
dGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVs
cGVycz4oKTsKKworICAgIEIzOjpQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGUg
PSBwcm9jZWR1cmUuY29kZSgpOworCisgICAgcHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10g
KFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5k
YXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNv
ZGVPcmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgd2Ug
Y2Fubm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJz
KCkgb3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAgLy8gZG9uJ3Qg
c3RyaWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCksIHdoaWNoIHNh
dmVzIGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAgICAvLyBPT1BT
OiBEbyB3ZSBuZWVkIHRoaXM/IFNob3VsZCB3ZSBqdXN0IHNldCBpdCBkaXJlY3RseSBvbiBDb2Rl
PworICAgIHByb2NlZHVyZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFsc2UpOworICAgIAorICAg
IHByb2NlZHVyZS5zZXRPcHRMZXZlbChjb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2Rl
OjpCQlFNb2RlCisgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25M
ZXZlbCgpCisgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZl
bCgpKTsKKworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwg
cmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRpb25N
b2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJl
KTsKKyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9y
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworCisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgc3VjY2Vzc29yLT5hZGRQ
cmVkZWNlc3NvcihibG9jayk7CisgICAgfQorICAgIC8vIE9PUFM6IFZhbGlkYXRlICdjb2RlJyBo
ZXJlIQorICAgIAorICAgIHsKKyAgICAgICAgQWlyOjpnZW5lcmF0ZShwcm9jLmNvZGUoKSwgKmNv
bXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisgICAgICAgIGNvbXBpbGF0aW9u
Q29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJv
ZHVjdHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMg
PSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgIH0KKworICAgIHJl
dHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVj
a3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQpCit7CisgICAgQVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwg
b3BlcmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24gPT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1v
ZCk7CisgICAgY29uc3QgQjM6OlR5cGUgdHlwZSA9IGxlZnQtPnR5cGUoKTsKKworICAgIHsKKyAg
ICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBLaW5kIG9wID0gaXM2NEJpdE9wKG9w
ZXJhdGlvbikgPyBCcmFuY2hUZXN0NjQgOiBCcmFuY2hUZXN0MzI7CisgICAgICAgICAgICBhcHBl
bmQob3AsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJpZ2h0LCByaWdodCk7
CisgICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIGlmIChvcGVyYXRpb24gPT0gRGl2KSB7CisgICAgICAgIGludDY0X3QgbWluID0gdHlw
ZSA9PSBJbnQzMiA/IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpIDogc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCk7CisgICAgICAgIGVtaXRDaGVjayhbJl0gewor
ICAgICAgICAgICAgLy8gT09QUzogVHJ5IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisg
ICAgICAgICAgICBUbXAgbWluVG1wID0gZ3ByKCk7CisgICAgICAgICAgICBUbXAgbmVnT25lID0g
Z3ByKCk7CisKKyAgICAgICAgICAgIEtpbmQgb3AgPSBpczY0Qml0T3Aob3BlcmF0aW9uKSA/IENv
bXBhcmU2NCA6IENvbXBhcmUzMjsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0lt
bShtaW4pLCBtaW5UbXApOworICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsKSwgbGVmdCwgbWluVG1wLCBtaW5UbXApOworICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6aW1tKC0xKSwgbmVnT25lKTsKKyAgICAgICAgICAgIGFwcGVuZChv
cCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIHJpZ2h0LCBuZWdPbmUsIG5l
Z09uZSk7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFj
cm9Bc3NlbWJsZXI6Ok5vdFplcm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAg
ICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNl
cHRpb25UeXBlOjpJbnRlZ2VyT3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKKy8v
IE9PUFM6IEltcGxlbWVudCB0aGVzZSBkaXYgb3BzISEhCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4
cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsK
KyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBV
TlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7Cisg
ICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNI
KCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gTW9k
OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9y
ZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9w
KSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Np
b25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFN
KHJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNv
ZGUgb3AgPSBVRGl2OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdo
dCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhw
cmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChi
KQorICAgICAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURf
UEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6
Ok9wY29kZSBvcCA9IFVNb2Q7CisgICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQs
IHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZT
PihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAg
aWYgKGIpCisgICAgICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVO
VVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25z
dCBCMzo6T3Bjb2RlIG9wID0gRGl2OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBs
ZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOwor
ICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAg
ICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8v
Y29uc3QgQjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRpdihv
cCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wg
YiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFN
KGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3Vs
dCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICAvL2VtaXRDaGVja3NG
b3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
Ym9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsKKyAgICBVTlVTRURf
UEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0o
cmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAgIC8vZW1pdENo
ZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMyKHBhcmFtc1sxXS5ncHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0
UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQo
QjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwor
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRU
cmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0p
OworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJl
c3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9y
dHNDb3VudFBvcHVsYXRpb24oKSkgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50
KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cisj
ZW5kaWYKKworICAgIHVpbnQzMl90ICgqcG9wY291bnQpKGludDMyX3QpID0gW10gKGludDMyX3Qg
dmFsdWUpIC0+IHVpbnQzMl90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh2YWx1ZSk7IH07
CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQ
b3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKKyAgICAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQp
OworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGppdC5jb3Vu
dFBvcHVsYXRpb242NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAg
IH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRfdCAoKnBvcGNv
dW50KShpbnQ2NF90KSA9IFtdIChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7IHJldHVybiBf
X2J1aWx0aW5fcG9wY291bnRsbCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCBy
ZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAg
ICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuY29u
dmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpLCBwYXJh
bXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9Eb3Vi
bGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0
LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAg
ICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworI2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5j
b252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFy
YW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRmxv
YXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0
LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RG91YmxlKHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0
UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVu
Yz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2lu
dChCMzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91
bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAg
ICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50
LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQjM6OlBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxvYXQo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBp
ZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAv
KgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
LXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
KSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90
PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigp
KSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1
YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRz
LCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRP
ZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRo
cm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAg
fSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBw
YXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91Ymxl
VG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRj
aHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJv
b2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxl
bWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCks
IGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBHcmVhdGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRz
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRy
YXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ss
IG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9y
aWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0
LnRydW5jYXRlRmxvYXRUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsK
KyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgp
OyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0
YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBUbXAgbWlu
ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKyAgICBU
bXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigp
LCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJ
bnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7Cisg
ICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9u
KGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRj
aHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5h
cHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAg
ICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVl
OworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEK
KworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWlu
dDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAgICBUbXAgbWluID0gY29uc3Rh
bnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjAp
KSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFu
LCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywg
Y29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZC
b3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJv
d0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0p
OworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9V
aW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hw
b2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29s
IGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1l
bnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3
aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3Vu
ZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSog
dHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVj
aywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwg
b3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBq
aXQudHJ1bmNhdGVEb3VibGVUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwor
ICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2
ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0go
KTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3Rh
bnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4g
PSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRt
cCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
Qml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCks
IGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KElu
dDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAg
ICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRt
cCBzaWduQml0Q29uc3RhbnQ7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2Ug
eDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50
cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0
aGluZyBpZgorICAgICAgICAvLyB0aGUgbnVtYmVycyBhcmUgd291bGQgYmUgcG9zaXRpdmUgYW55
d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25z
dGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBv
b2wgdGhlbSBpZiBuZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGNvbnN0YW50KERv
dWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1heCgpKSkpOworICAgIH0KKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwg
b3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChz
aWduQml0Q29uc3RhbnQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBv
aW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRG
UFJSZWc7CisgICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7CisgICAgICAg
IGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBzY3JhdGNoID0gcGFyYW1zLmZwU2NyYXRjaCgw
KTsKKyAgICAgICAgICAgIGNvbnN0YW50ID0gcGFyYW1zWzJdLmZwcigpOworICAgICAgICB9Cisg
ICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1z
WzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAg
ICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7
CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IEltcGxlbWVudCB0aGlzIQor
ICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCkpKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4o
KSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVx
dWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5k
cywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0
T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRU
aHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAg
IH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CisgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0
VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRj
aHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJv
b2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxl
bWVudCB0aGlzCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
NjRfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBtaW4g
PSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1h
eCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3Jl
YXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9m
Qm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+
ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7
CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0YW50OworICAgIGlmIChpc1g4NigpKSB7
CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29u
dmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRy
eSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIG51bWJlcnMgd291bGQg
YmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBt
YXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAg
Ly8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFu
dCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZs
b2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsKKyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0
Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBS
UmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFt
cy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsK
KyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5m
cHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRj
aHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKworUGFydGlhbFJlc3VsdCBBaXJJ
UkdlbmVyYXRvcjo6YWRkU2hpZnQoS2luZCBraW5kLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhw
cmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0oa2luZCwgQXJnOjpUbXAsIEFyZzo6VG1w
LCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIHZhbHVlLCBzaGlmdCwgcmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgCisgICAgYXBwZW5kKE1vdmUsIHZh
bHVlLCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlLCBzaGlmdCwgbV9lY3gpOworICAgIGFwcGVu
ZChraW5kLCBtX2VjeCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0aWFsUmVz
dWx0IEFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3ViKEtpbmQga2luZCwgRXhwcmVzc2lvblR5
cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0oa2luZCwgQXJnOjpUbXAs
IEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIGxocywgcmhzLCBy
ZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
KGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBT
dWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKGtpbmQsIHJo
cywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0aWFsUmVzdWx0IEFpcklSR2Vu
ZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QWJzKEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUgdmFs
dWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9
PSBBYnNGbG9hdCB8fCBraW5kID09IEFic0RvdWJsZSk7CisKKyAgICByZXN1bHQgPSBmcHIoKTsK
KworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAg
ICAgIGFwcGVuZChraW5kLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKworICAgIFRtcCBjb25zdGFudCA9
IGdwcigpOworICAgIGlmIChraW5kID09IEFic0Zsb2F0KSB7CisgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmltbSh+KDEgPDwgMzEpKSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoTW92ZTMy
VG9GbG9hdCwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChBbmRGbG9hdCwgdmFs
dWUsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6Ymln
SW1tKH4oMSA8PCA2MykpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJs
ZSwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChBbmREb3VibGUsIHZhbHVlLCBy
ZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0aWFsUmVzdWx0IEFpcklS
R2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QmluT3AoS2luZCBraW5kLCBFeHByZXNzaW9uVHlw
ZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZ3M6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIGxocywgcmhzLCBy
ZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
KGlzWDg2KCkpOworCisgICAgLy8gT3AgYSwgYgorICAgIC8vIG1lYW5zCisgICAgLy8gYiA9IGIg
T3AgYQorICAgIC8vIE9PUFM6IHZlcmlmeQorICAgIGFwcGVuZChNb3ZlRG91YmxlLCBsaHMsIHJl
c3VsdCk7CisgICAgYXBwZW5kKGtpbmQsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2Vp
bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDZWlsRmxvYXQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEpOworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TGU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9y
RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEZW1vdGVGNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydERvdWJsZVRvRmxv
YXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk1pbj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVh
bCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVxdWFsID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9j
dXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBw
ZW5kKGlzRXF1YWwsIE9yRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlz
RXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsK
KworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGFw
cGVuZChub3RFcXVhbCwgQnJhbmNoRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAgICBhcHBlbmQoZ3JlYXRl
clRoYW5PckVxdWFsLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGdyZWF0
ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5zZXRTdWNjZXNz
b3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsK
KworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0THQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
Mk1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
CisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbGVz
c1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24g
PSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNo
RmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBh
cmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVh
bCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgQW5kRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMo
Y29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZUZsb2F0LCBhcmcwLCBy
ZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRmxvYXQsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVh
bC0+c2V0U3VjY2Vzc29ycyhsZXNzVGhhbiwgY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChs
ZXNzVGhhbiwgTW92ZUZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhhbiwg
SnVtcCk7CisgICAgbGVzc1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAg
IG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE11bD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50Qmlu
T3AoTXVsRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChEaXZGbG9hdCwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMkNsej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb3VudExlYWRpbmdaZXJvczMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJD
b3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdlIGNh
biBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBm
b3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsK
KyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2YWx1ZSA9IGdwcigpOworCisgICAgLy8g
T09QUzogQ2FuIGZpdCBpbiBJbW0vQml0SW1tIGluc3RlYWQgb2YgQmlnSW1tPworICAgIGFwcGVu
ZChNb3ZlRmxvYXRUbzMyLCBhcmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6Ymln
SW1tKDB4ODAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5kMzIsIHRlbXAxLCBzaWduLCBz
aWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAgIGFw
cGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVuZChB
bmQzMiwgdGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3IzMiwgc2lnbiwgdmFs
dWUsIHZhbHVlKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdmFsdWUsIHJlc3VsdCk7CisK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0Q29udmVydFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsK
KyAgICBUbXAgdGVtcCA9IHRtcCgpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHRlbXApOwor
ICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyUmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBh
cHBlbmQoTW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QW5kPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKEFuZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHdD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91
YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3FydD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NEdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0R3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0VT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcXo+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjREaXY+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiB3aGF0IGFib3V0IGNoaWxsLW5lc3Mg
aGVyZS4uLj8KKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKERpdkRvdWJsZSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGFwcGVuZChBZGRGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0T3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3I2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyTGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMZVM+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JF
cXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE5lPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NENsej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczY0LCBhcmcwLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJOZWc+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoTmVn
YXRlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFuZD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBbmQzMiwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRVPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXR1cm4gYWRkU2hpZnQoUm90YXRlUmlnaHQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFicz4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0RvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcT4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21w
YXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRo
ZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsK
KyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2
YWx1ZSA9IGdwcigpOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcxLCB0ZW1wMSk7
CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAwMDAwMDAwMDAwMCksIHNpZ24p
OworICAgIGFwcGVuZChBbmQ2NCwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1v
dmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1t
KDB4N2ZmZmZmZmZmZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCB2
YWx1ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9yNjQsIHNpZ24sIHZhbHVlLCB2YWx1ZSk7Cisg
ICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsKKworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChD
b252ZXJ0SW50NjRUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RsPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZUxl
ZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkx0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7
CisgICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTGU+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxl
c3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkdlPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJV
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFVyc2hp
ZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSB0bXAoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcw
LCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9GbG9hdCwgdGVtcCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyU2hyUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
dHVybiBhZGRTaGlmdChSc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkdlVT4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChDb21wYXJlMzIsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NENlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ2VpbERvdWJs
ZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRGbG9v
cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChGbG9vckRvdWJsZSwg
YXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjMyLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxv
YXRpbmdQb2ludEFicyhBYnNGbG9hdCwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1pbj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNF
cXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVxdWFsID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAg
IG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAg
IGFwcGVuZChpc0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBl
bmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRp
b24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOwor
ICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1
Y2Nlc3NvcnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwpOworCisgICAgYXBwZW5k
KGdyZWF0ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBl
bmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNl
dFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGlu
dWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxGbG9hdCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZWlu
dGVycHJldEYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3Zl
RmxvYXRUbzMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBZGQ+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQWRkMzIs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFN1Yj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTdWJEb3VibGUs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk9yPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE9yMzIsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVy
dFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydElu
dDY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFhvcj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChYb3I2
NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VVPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2
NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTXVsNjQsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMlN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTdWJGbG9hdCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0UHJvbW90ZUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGFwcGVuZChDb252ZXJ0RmxvYXRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjY0QWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0R2VTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRFeHRlbmRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTmU+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMy
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0UmVpbnRlcnByZXRJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBmcHIoKTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVx
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29yPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEZsb29yRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMkNvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAg
YXBwZW5kKENvbnZlcnRJbnQzMlRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0MzIsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFJlaW50ZXJwcmV0RjY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0
KFJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRTcXJ0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnREb3Vi
bGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNobD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMldy
YXBJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBh
cmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZUxlZnQzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hp
ZnQoUm90YXRlUmlnaHQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0VT4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okdy
ZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVnPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE5lZ2F0ZURvdWJsZSwgYXJnMCwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5k
KG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3Vj
Y2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgQW5kRG91
YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAg
ICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90
RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBC
cmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4p
LCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhsZXNzVGhhbiwgY29u
dGludWF0aW9uKTsKKworICAgIGFwcGVuZChsZXNzVGhhbiwgTW92ZURvdWJsZSwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAgIGxlc3NUaGFuLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NExlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QWRk
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKEFkZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBA
QCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluCiAgICAgZWZmZWN0cy5y
ZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBl
ZmZlY3RzOwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNv
bnRleHRJbnN0YW5jZUdQUikpOwotICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVl
KCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0
YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOyAvLyBPT1BTOiBQcm9iYWJseSBz
aG91bGQgYmUgdXNpbmcgYXJnIQogICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0g
bV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtKSB7CiAgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3Rh
bmNlR1BSKTsKQEAgLTQ1OSw5ICs0NTksOSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsCiAKICAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgPT0gUmVzdG9y
ZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgewogICAgICAgICAvLyBUaGUgSW5zdGFuY2UgY2FjaGVz
IHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9uaWNhbCBsb2Nh
dGlvbiBpcy4KLSAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3Rh
bmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOwotICAgICAgICBWYWx1
ZSogYWN0dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJUb0FjdHVh
bFN0YWNrTGltaXQpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1pdCwgaW5zdGFuY2VW
YWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xp
bWl0KCkpKTsKKyAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQgPSBibG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZz
ZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOworICAgICAgICBWYWx1ZSogYWN0dWFs
U3RhY2tMaW1pdCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQpOworICAg
ICAgICBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4o
KSwgYWN0dWFsU3RhY2tMaW1pdCwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKICAgICB9CiAKICAgICBpZiAo
ISFtZW1vcnkpIHsKQEAgLTE4MzgsNyArMTgzOCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnUKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKICAgICB9CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0g
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OyAvLyBPT1BTOiBUaGlzIGxvb2tzIHN1cGVyIHdyb25nIGdpdmVuIHdlIGRvbid0IHNheSB3ZSBj
bG9iYmVyIHRoaXMhCiAgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKICAg
ICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKICAgICAgICAgaWYgKGlzWDg2
KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVu
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNiArNjIsMzYgQEAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZwog
ICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiB9CiAKK2NvbnN0IEpTQ0Nh
bGxpbmdDb252ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxKU0NDYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGljSlND
Q2FsbGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY0pTQ0Nh
bGxpbmdDb252ZW50aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNKU0NDYWxsaW5n
Q29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRp
b24uY29uc3RydWN0KFZlY3RvcjxSZWc+KCksIFZlY3RvcjxSZWc+KCksIFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0YXRpY0pTQ0Nh
bGxpbmdDb252ZW50aW9uOworfQorCitjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3ll
ZDxXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXI+IHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uRmxh
ZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnLCBb
XSAoKSB7CisgICAgICAgIFZlY3RvcjxSZWc+IGdwckFyZ3VtZW50UmVnaXN0ZXJzKEdQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAgICAg
ICAgZ3ByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIo
aSk7CisKKyAgICAgICAgVmVjdG9yPFJlZz4gZnByQXJndW1lbnRSZWdpc3RlcnMoRlBSSW5mbzo6
bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAg
ICBmcHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEZQUkluZm86OnRvQXJndW1lbnRSZWdpc3Rlcihp
KTsKKworICAgICAgICBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY29uc3RydWN0KFdURk1v
dmUoZ3ByQXJndW1lbnRSZWdpc3RlcnMpLCBXVEZNb3ZlKGZwckFyZ3VtZW50UmVnaXN0ZXJzKSwg
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisKKyAgICByZXR1
cm4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAy
NDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjcgKzQ0LDI3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKLXR5cGVkZWYgdW5zaWduZWQgKCpOZXh0T2Zmc2V0KSh1bnNp
Z25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSB0eXBlKTsKK3R5cGVkZWYgdW5zaWduZWQgKCpO
ZXh0T2Zmc2V0KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KTsKIAogdGVtcGxhdGU8dW5zaWduZWQg
aGVhZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CiBjbGFzcyBDYWxsaW5nQ29udmVu
dGlvbiB7CiBwdWJsaWM6CiAgICAgQ2FsbGluZ0NvbnZlbnRpb24oVmVjdG9yPFJlZz4mJiBncHJB
cmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lz
dGVycykKLSAgICAgICAgOiBtX2dwckFyZ3MoZ3ByQXJncykKLSAgICAgICAgLCBtX2ZwckFyZ3Mo
ZnByQXJncykKLSAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoY2FsbGVlU2F2ZVJlZ2lz
dGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBt
X2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3Rl
cnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0b3I8UmVnPiByZWdB
cmdzLCBCMzo6VHlwZSB0eXBlLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBj
b25zdAorICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0b3I8UmVnPiBy
ZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKGNvdW50IDwgcmVnQXJncy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4g
QjM6OlZhbHVlUmVwOjpyZWcocmVnQXJnc1tjb3VudCsrXSk7CiAKICAgICAgICAgY291bnQrKzsK
ICAgICAgICAgQjM6OlZhbHVlUmVwIHJlc3VsdCA9IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVu
dChzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNr
T2Zmc2V0LCB0eXBlKTsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tP
ZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNzMsMTAgKzczLDEw
IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEIzOjpJ
bnQzMjoKICAgICAgICAgY2FzZSBCMzo6SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hh
bGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zm
c2V0KTsKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3Ms
IGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwogICAgICAgICBjYXNlIEIzOjpGbG9hdDoK
ICAgICAgICAgY2FzZSBCMzo6RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJn
dW1lbnRJbXBsKG1fZnByQXJncywgdHlwZSwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7
CisgICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFy
Z3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAgICAgY2FzZSBCMzo6Vm9pZDoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xODksMTkgKzE4OSwxMjcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVyU2F2ZVJlZ2lzdGVyczsKIH07CiAKLWlubGlu
ZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBl
KQordGVtcGxhdGU8dW5zaWduZWQgaGVhZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+
CitjbGFzcyBDYWxsaW5nQ29udmVudGlvbkFpciB7CitwdWJsaWM6CisgICAgQ2FsbGluZ0NvbnZl
bnRpb25BaXIoVmVjdG9yPFJlZz4mJiBncHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJl
Z2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RG
TW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAg
ICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJz
KSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUbXBG
dW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAgdm9pZCBtYXJzaGFsbEFyZ3VtZW50SW1wbChW
ZWN0b3I8UmVnPiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBj
b25zdCBUbXBGdW5jJiB0bXBGdW5jLCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHJlZ0FyZ3NbY291bnQrK107CisKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgc3Rh
Y2tGdW5jKHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQo
c3RhY2tPZmZzZXQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUbXBGdW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAgdm9pZCBtYXJz
aGFsbEFyZ3VtZW50KFR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291bnQsIHNpemVfdCYg
ZnBBcmd1bWVudENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBUbXBGdW5jJiB0bXBG
dW5jLCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OmkzMjoKKyAgICAgICAgY2FzZSBUeXBl
OjppNjQ6CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIHR5cGUs
IGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHRtcEZ1bmMsIHN0YWNrRnVuYyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpmMzI6CisgICAgICAgIGNhc2UgVHlw
ZTo6ZjY0OgorICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCB0eXBl
LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCB0bXBGdW5jLCBzdGFja0Z1bmMpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCitwdWJsaWM6CisgICAgc3Rh
dGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGxvYWRBcmd1bWVudHMo
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0
CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6
ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhl
YWRlclNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQoc2lnbmF0
dXJlLmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQsCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0b3IoVG1wKHJlZyksIGkpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgWyZdIChzaXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVu
Y3RvcihBaXI6OkFyZzo6YWRkcihUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBzdGFj
a09mZnNldCksIGkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gSXQncyBleHBlY3RlZCB0aGF0IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhlIGdl
bmVyYXRvciBmb3IgdGhlIGNhbGwgb3BlcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBzZXR1cENhbGwoQ29kZSYgY29kZSwgVHlwZSByZXR1cm5UeXBlLCBC
Mzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50LCBjb25zdCBWZWN0b3I8VG1wPiYgYXJncywg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBncEFy
Z3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKKyAg
ICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKTsKKworICAgICAgICBmb3IgKFRtcCB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICBt
YXJzaGFsbEFyZ3VtZW50KHRtcC5pc0dQKCkgPyBUeXBlOjpJNjQgOiBUeXBlOjpGNjQsIGdwQXJn
dW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwKKyAgICAgICAgICAgICAg
ICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0bXAsIEIzOjpW
YWx1ZVJlcDo6cmVnKHJlZykpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
WyZdIChzaXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0
bXAsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09mZnNldCkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFT
aXplSW5CeXRlcyhXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygp
LCBzdGFja09mZnNldCkpOworCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdp
c3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisK
KyAgICAgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6Vm9pZDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2Fz
ZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0g
QjM6OlZhbHVlUmVwOjpyZWcoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6
OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZ3ByQXJnczsKKyAgICBjb25z
dCBWZWN0b3I8UmVnPiBtX2ZwckFyZ3M7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVyU2F2ZVJlZ2lzdGVy
czsKK307CisKK2lubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0KHVuc2lnbmVkIGN1cnJlbnRP
ZmZzZXQpCiB7CiAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQgKyBzaXplb2YoUmVnaXN0ZXIpOwog
fQogCiBjb25zdGV4cHIgdW5zaWduZWQganNjSGVhZGVyU2l6ZSA9IEV4ZWNTdGF0ZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKTsKLXR5cGVkZWYgQ2FsbGluZ0NvbnZl
bnRpb248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD4gSlNDQ2FsbGluZ0NvbnZlbnRpb247
Ci0KLXR5cGVkZWYgSlNDQ2FsbGluZ0NvbnZlbnRpb24gV2FzbUNhbGxpbmdDb252ZW50aW9uOwog
Cit1c2luZyBKU0NDYWxsaW5nQ29udmVudGlvbiA9IENhbGxpbmdDb252ZW50aW9uPGpzY0hlYWRl
clNpemUsIG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNhbGxpbmdDb252ZW50aW9uID0gSlND
Q2FsbGluZ0NvbnZlbnRpb247CiBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNjQ2FsbGlu
Z0NvbnZlbnRpb24oKTsKIGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNhbGxpbmdD
b252ZW50aW9uKCk7CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyID0gQ2FsbGluZ0Nv
bnZlbnRpb25BaXI8anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIgPSBKU0NDYWxsaW5nQ29udmVudGlvbkFpcjsKK2NvbnN0IEpTQ0Nh
bGxpbmdDb252ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigpOworY29uc3QgV2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKTsKKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360382</attachid>
            <date>2019-01-28 15:13:47 -0800</date>
            <delta_ts>2019-01-28 16:49:13 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>155849</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJl
dmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICBS
ZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKICAg
ICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0JikgZmluYWw7CiAKLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJ
bXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gTm90ZSB0aGF0
IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1w
SW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRo
YXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKICAgICAgICAgdW5zaWduZWQgbnVtSWdub3Jl
ZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDExIEBAIENvZGU6On5Db2RlKCkKIHsKIH0KIAordm9pZCBDb2RlOjplbWl0RGVmYXVsdFBy
b2xvZ3VlKENDYWxsSGVscGVycyYgaml0KQoreworICAgIGRlZmF1bHRQcm9sb2d1ZUdlbmVyYXRv
cihqaXQsICp0aGlzKTsKK30KKwogdm9pZCBDb2RlOjpzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKEJh
bmsgYmFuaywgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MpCiB7CiAgICAgcmVnc0luUHJpb3JpdHlP
cmRlckltcGwoYmFuaykgPSByZWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNiArMzM1LDggQEAgcHVibGljOgog
ICAgIFJlZ2lzdGVyU2V0IHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVk
UmVnczsgfQogICAgIAogICAgIFdlYWtSYW5kb20mIHdlYWtSYW5kb20oKSB7IHJldHVybiBtX3dl
YWtSYW5kb207IH0KKworICAgIHZvaWQgZW1pdERlZmF1bHRQcm9sb2d1ZShDQ2FsbEhlbHBlcnMm
KTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIDo6SlNDOjpCMzo6UHJvY2VkdXJl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIENvZGU7CiAKIGNsYXNzIFRtcCB7CiBwdWJsaWM6
Ci0gICAgVG1wKCkKKyAgICBjb25zdGV4cHIgVG1wKCkKICAgICAgICAgOiBtX3ZhbHVlKDApCiAg
ICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzIzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtQWlySVJHZW5lcmF0b3IuaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5oIgorI2luY2x1ZGUgIlNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorI2luY2x1
ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0SW5saW5l
cy5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisjaW5jbHVkZSAiV2FzbUZ1bmN0
aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisjaW5jbHVkZSAiV2FzbU1l
bW9yeS5oIgorI2luY2x1ZGUgIldhc21PTUdQbGFuLmgiCisjaW5jbHVkZSAiV2FzbU9wY29kZU9y
aWdpbi5oIgorI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2Fz
bVRodW5rcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CisKK3VzaW5nIG5hbWVzcGFjZSBCMzo6QWlyOworCitzdHJ1Y3QgQ29uc3RyYWlu
ZWRUbXAgeworICAgIENvbnN0cmFpbmVkVG1wKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXAgPSBC
Mzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcikKKyAgICAgICAgOiB0bXAodG1wKQorICAgICAgICAs
IHJlcChyZXApCisgICAgeyB9CisKKyAgICBUbXAgdG1wOworICAgIEIzOjpWYWx1ZVJlcCByZXA7
Cit9OworCitjbGFzcyBBaXJJUkdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IENvbnRy
b2xEYXRhIHsKKyAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIFR5cGUgcmV0
dXJuVHlwZSwgVG1wIHJlc3VsdFRtcCwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgICAgICA6IGJs
b2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9uKQor
ICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCisgICAgICAgICAgICAsIHJldHVyblR5cGUo
cmV0dXJuVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7
IC8vIE9PUFMKKyAgICAgICAgICAgIGlmIChyZXN1bHRUbXApIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmV0dXJuVHlwZSAhPSBUeXBlOjpWb2lkKTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHJlc3VsdFRtcCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmV0dXJuVHlwZSA9PSBUeXBlOjpWb2lkKTsKKyAgICAgICAgfQorCisgICAgICAgIENv
bnRyb2xEYXRhKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6SWY6CisgICAgICAgICAgICAgICAg
b3V0LnByaW50KCJJZjogICAgICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJsb2NrVHlwZTo6QmxvY2s6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJC
bG9jazogICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJs
b2NrVHlwZTo6TG9vcDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxvb3A6ICAgICAiKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpUb3BM
ZXZlbDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiQ29u
dGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKKyAgICAgICAgICAg
IGlmIChzcGVjaWFsKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgqc3BlY2lhbCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJOb25lIik7CisgICAgICAg
IH0KKworICAgICAgICBCbG9ja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJsb2NrVHlwZTsg
fQorCisgICAgICAgIFR5cGUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gcmV0dXJuVHlwZTsg
fQorCisgICAgICAgIGJvb2wgaGFzTm9uVm9pZFNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHJl
c3VsdC5zaXplKCk7IH0KKworICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0ZvckJyYW5j
aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29w
KQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjaWFsOworICAgICAgICAgICAgcmV0dXJuIGNv
bnRpbnVhdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVydElmVG9CbG9jaygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gQmxvY2tUeXBlOjpJZik7
CisgICAgICAgICAgICBibG9ja1R5cGUgPSBCbG9ja1R5cGU6OkJsb2NrOworICAgICAgICAgICAg
c3BlY2lhbCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTOiBXaGF0IGlz
IHRoaXM/CisgICAgICAgIHVzaW5nIFJlc3VsdExpc3QgPSBWZWN0b3I8VG1wLCAxPjsgLy8gVmFs
dWUgbXVzdCBiZSBhIFBoaQorCisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0Rm9yQnJhbmNoKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxv
b3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdExpc3QoKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBj
bGFzcyBBaXJJUkdlbmVyYXRvcjsKKyAgICAgICAgQmxvY2tUeXBlIGJsb2NrVHlwZTsKKyAgICAg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uOworICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFs
OworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdDsKKyAgICAgICAgVHlwZSByZXR1cm5UeXBlOwor
ICAgIH07CisKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFRtcDsKKyAgICB1c2luZyBDb250
cm9sVHlwZSA9IENvbnRyb2xEYXRhOworICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9y
PEV4cHJlc3Npb25UeXBlLCAxPjsKKyAgICB1c2luZyBSZXN1bHRMaXN0ID0gQ29udHJvbERhdGE6
OlJlc3VsdExpc3Q7CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8QWly
SVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEV4cHJl
c3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9IFRtcCB7IH07CisKKyAgICB1c2luZyBFcnJvclR5
cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJy
b3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4
cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJn
cz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
ZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2Ug
RmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxl
IGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKwor
I2RlZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAg
ICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUg
KDApCisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQ
cm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3Qg
U2lnbmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9j
YWwoVHlwZSwgdWludDMyX3QpOworCisgICAgLy8gTG9jYWxzCisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2Fs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBHbG9iYWxz
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKTsKKworICAgIC8vIE1lbW9yeQorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhw
cmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIEJh
c2ljIG9wZXJhdG9ycworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lv
blR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisKKyAgICAvLyBDb250cm9sIGZsb3cKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
VHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1Vu
cmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3Rv
cjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisKKyAgICAvLyBDYWxscworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOworCisgICAgUGFydGlhbFJlc3VsdCBh
ZGRTaGlmdChLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBz
aGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRl
Z2VyU3ViKEtpbmQga2luZCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQ
b2ludEFicyhLaW5kIGtpbmQsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRCaW5PcChLaW5kIGtp
bmQsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKworICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYg
Y29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsKKyAg
ICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIHBhcnNlcikg
eyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQmFzaWNCbG9jayogYmxvY2ssIEtpbmQg
a2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgLy8gT09QUzog
QWRkIG9yaWdpbgorICAgICAgICBibG9jay0+YXBwZW5kKGtpbmQsIG51bGxwdHIsIHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChLaW5kIGtpbmQsIEFyZ3VtZW50
cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywg
a2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisg
ICAgVG1wIHRtcChCMzo6QmFuayBiYW5rKSB7IHJldHVybiBtX2NvZGUubmV3VG1wKGJhbmspOyB9
CisgICAgVG1wIGdwcigpIHsgcmV0dXJuIHRtcChCMzo6R1ApOyB9CisgICAgVG1wIGZwcigpIHsg
cmV0dXJuIHRtcChCMzo6RlApOyB9CisgICAgVG1wIHRtcEZvclR5cGUoVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAg
ICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAg
Y2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0
dXJuIGZwcigpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRtcCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogYWRkUGF0Y2hwb2lu
dChCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGQ8QjM6OlBh
dGNocG9pbnRWYWx1ZT4odHlwZSwgQjM6Ok9yaWdpbigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEIzOjpQYXRjaHBv
aW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAg
ICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIHJlc3VsdCwgc3RkOjpm
b3J3YXJkPEFyZ3M+KHRoZUFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxv
Y2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFy
Z3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgcmVz
dWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIDg+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsKKyAgICB9
CisKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQ
YXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAs
IDg+JiYgYXJncykKKyAgICB7CisgICAgICAgIGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkKKyAg
ICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2lu
dFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPEIzOjpQYXRjaHBv
aW50U3BlY2lhbD4oKSkpOworCisgICAgICAgIEluc3QgaW5zdChQYXRjaCwgcGF0Y2gsIEFyZzo6
c3BlY2lhbChtX3BhdGNocG9pbnRTcGVjaWFsKSk7CisgICAgICAgIEluc3QgcmVzdWx0TW92Owor
ICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSAh
PSBCMzo6Vm9pZCk7CisgICAgICAgICAgICBzd2l0Y2ggKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50
LmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAg
ICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50
LnJlZygpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0TW92ID0gSW5zdChyZXN1bHQuaXNHUCgp
ID8gTW92ZSA6IE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChwYXRjaC0+cmVzdWx0Q29uc3RyYWlu
dC5yZWcoKSksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5
cGUoKSA9PSBCMzo6Vm9pZCk7CisgICAgICAgIAorICAgICAgICBmb3IgKENvbnN0cmFpbmVkVG1w
JiB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBVZ2gsIHRoaXMgaXMgc3VwZXIg
Y3JhcHB5IHRvIGp1c3QgdXNlIG51bGxwdHIgZm9yIEIzOjpWYWx1ZSogaGVyZS4KKyAgICAgICAg
ICAgIC8vIEkgdGhpbmsgdGhpcyB3aWxsIGp1c3Qgd29yaywgYnV0IG91ciBhbHRlcm5hdGl2ZSBv
cHRpb25zIGlzIHRvIGFic3RyYWN0CisgICAgICAgICAgICAvLyBvciByZWludmVudCBwYXJ0IG9m
IFBhdGNocG9pbnRTcGVjaWFsLgorICAgICAgICAgICAgcGF0Y2gtPmFwcGVuZChudWxscHRyLCB0
bXAucmVwKTsKKyAgICAgICAgICAgIHN3aXRjaCAodG1wLnJlcC5raW5kKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgaW5z
dC5hcmdzLmFwcGVuZCh0bXAudG1wKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICAvLyBPT1BT
OiBJIHRoaW5rIHdlIHdhbnQgdHlwZSBoZXJlIHRvIGRpc3Rpbmd1aXNoIGkzMi9pNjMgYW5kIGYz
Mi9mNjQKKyAgICAgICAgICAgICAgICBhcHBlbmQoYmFzaWNCbG9jaywgdG1wLnRtcC5pc0dQKCkg
PyBNb3ZlIDogTW92ZURvdWJsZSwgdG1wLnRtcCwgdG1wLnJlcC5yZWcoKSk7CisgICAgICAgICAg
ICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAodG1wLnJlcC5yZWcoKSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6
IHsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBJIHRoaW5rIHdlIHdhbnQgdHlwZSBoZXJlIHRv
IGRpc3Rpbmd1aXNoIGkzMi9pNjMgYW5kIGYzMi9mNjQKKyAgICAgICAgICAgICAgICBhdXRvIGFy
ZyA9IEFyZzo6Y2FsbEFyZyh0bXAucmVwLm9mZnNldEZyb21TUCgpKTsKKyAgICAgICAgICAgICAg
ICBhcHBlbmQoYmFzaWNCbG9jaywgdG1wLnRtcC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwg
dG1wLnRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQu
aXNSZWcoKSkKKyAgICAgICAgICAgIHBhdGNoLT5sYXRlQ2xvYmJlcmVkKCkuY2xlYXIocGF0Y2gt
PnJlc3VsdENvbnN0cmFpbnQucmVnKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRj
aC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChncHIoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNoLT5udW1GUFNjcmF0
Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGZwcigpKTsK
KworICAgICAgICBiYXNpY0Jsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgICAgIGlm
IChyZXN1bHRNb3YpCisgICAgICAgICAgICBiYXNpY0Jsb2NrLT5hcHBlbmQoV1RGTW92ZShyZXN1
bHRNb3YpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnJhbmNoLCB0eXBlbmFt
ZSBHZW5lcmF0b3I+CisgICAgdm9pZCBlbWl0Q2hlY2soY29uc3QgQnJhbmNoJiBlbWl0QnJhbmNo
LCBjb25zdCBHZW5lcmF0b3ImIGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIC8vIFdlIGZhaWwg
YWxvbmcgdGhlICJ0cnV0aHkiIGVkZ2Ugb2YgJ2JyYW5jaCcKKworICAgICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayog
ZmFpbGVkID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAgICBlbWl0QnJhbmNo
KCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGZhaWxlZCwgY29udGlu
dWF0aW9uKTsKKworICAgICAgICBhdXRvKiBmYWlsZWRQYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2lu
dChCMzo6Vm9pZCk7CisgICAgICAgIGZhaWxlZFBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihnZW5l
cmF0b3IpOworICAgICAgICBlbWl0UGF0Y2hwb2ludChmYWlsZWQsIGZhaWxlZFBhdGNocG9pbnQs
IFRtcCgpKTsKKyAgICAgICAgYXBwZW5kKGZhaWxlZCwgT29wcyk7CisKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0Q0NhbGwodm9pZCogZnVuYywgVG1wIHJlc3VsdCwgQXJn
cy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgZW1pdENDYWxsKG1fY3VycmVudEJsb2NrLCBmdW5j
LCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2ljQmxvY2sqIGJs
b2NrLCB2b2lkKiBmdW5jLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAg
ICAgICBJbnN0IGluc3QoQ0NhbGwsIG51bGxwdHIpOworCisgICAgICAgIFRtcCBjYWxsZWUgPSBn
cHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRhZ0NGdW5jdGlvblB0cjx2
b2lkKj4oZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAgICAgICBpbnN0LmFyZ3Mu
YXBwZW5kKGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGluc3Qu
YXJncy5hcHBlbmQocmVzdWx0KTsKKworICAgICAgICBmb3IgKFRtcCB0bXAgOiBzdGQ6Om1ha2Vf
dHVwbGUodGhlQXJncy4uLikpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7CisK
KyAgICAgICAgYmxvY2stPmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgQjM6OkFpcjo6T3Bjb2RlIG1vdmVPcEZvclZhbHVlVHlwZShUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAg
ICAgICByZXR1cm4gTW92ZTMyOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAg
IHJldHVybiBNb3ZlOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIHJldHVy
biBNb3ZlRmxvYXQ7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0dXJu
IE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBlbWl0VGhyb3dF
eGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisKKyAgICB2b2lkIGVtaXRU
aWVyVXBDaGVjayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbik7CisKKyAgICBF
eHByZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBFeHByZXNz
aW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVp
bnQzMl90IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7
CisKKyAgICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlIHBoaSwgY29uc3QgRXhwcmVz
c2lvblR5cGUgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4
cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgc3RhY2spOworCisg
ICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUg
bGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOworCisgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsK
KworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayosIFRtcCk7
CisgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7IE5vLCBZZXMgfTsKKyAg
ICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayop
OworCisgICAgQjM6Ok9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzogV2UgbmVlZCB0byBtYWtlIGFu
IEFpcjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGZyb20gQjMgY29kZS4KKwor
ICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07
CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlN
b2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgY29uc3QgQ29t
cGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2Rl
IH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKKyAg
ICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CisKKyAgICBCMzo6UHJv
Y2VkdXJlJiBtX3Byb2M7CisgICAgQ29kZSYgbV9jb2RlOworICAgIEJhc2ljQmxvY2sqIG1fY3Vy
cmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVs
bHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wLCBUeXBlPj4gbV9sb2NhbHM7CisgICAg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
OyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRk
cmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIEdQUlJlZyBtX21lbW9yeUJhc2VH
UFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IEludmFs
aWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2UgfTsKKworICAgIFRtcCBt
X2luc3RhbmNlVmFsdWU7IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3Vy
ZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4KKyAgICBib29s
IG1fdXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9OworICAgIFRtcCBpbnN0YW5jZVZhbHVlKCkK
KyAgICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUgPSB0cnVlOworICAgICAgICByZXR1
cm4gbV9pbnN0YW5jZVZhbHVlOworICAgIH0KKworICAgIHVpbnQzMl90IG1fbWF4TnVtSlNDYWxs
QXJndW1lbnRzIHsgMCB9OworCisgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFsKiBtX3BhdGNocG9p
bnRTcGVjaWFsIHsgbnVsbHB0ciB9OworfTsKKworLy8gTWVtb3J5IGFjY2Vzc2VzIGluIFdlYkFz
c2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMgdGhleSBoYXZlIHNp
Z25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK2ludDMyX3QgQWlySVJHZW5lcmF0b3I6OmZpeHVw
UG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQor
eworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpIHsKKyAgICAgICAg
VG1wIHByZXZpb3VzUHRyID0gcHRyOworICAgICAgICBwdHIgPSBncHIoKTsKKyAgICAgICAgVG1w
IGNvbnN0YW50ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZz
ZXQpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgY29uc3RhbnQsIHByZXZpb3Vz
UHRyLCBwdHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG9mZnNldDsK
K30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFz
aWNCbG9jayogYmxvY2ssIFRtcCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpW
b2lkKTsKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNl
TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OnN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAg
ICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIoKSk7Cisg
ICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1w
KCksIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBC
ZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lz
dGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhl
IGNhbGxlciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVu
dFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCisgICAg
YXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIEIzOjpFZmZl
Y3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVjdHMud3JpdGVzUGlu
bmVkID0gdHJ1ZTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7CisgICAgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7CisgICAgICAgIGppdC5tb3ZlKHBh
cmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICB9KTsKKyAgICBlbWl0
UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKK30KKworQWly
SVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9u
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlv
biB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorICAgIDog
bV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY29tcGlsYXRpb25Nb2Rl
KGNvbXBpbGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQor
ICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHByb2NlZHVyZSkKKyAgICAsIG1f
Y29kZShtX3Byb2MuY29kZSgpKQorICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyh1bmxp
bmtlZFdhc21Ub1dhc21DYWxscykKK3sKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgIG1fcm9vdEJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisKKyAgICAvLyBGSVhN
RSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUgaWYgdGhlcmUncyBu
byBtZW1vcnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxlciBmb3Igbm93LiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIzCisgICAgY29uc3Qg
UGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKKworICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7
CisgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBtX3dhc21D
b250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
OworICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBtX2NvZGUucGluUmVn
aXN0ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKworICAgIGlmIChtb2RlICE9IE1lbW9y
eU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lz
dGVyc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVn
cy5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5u
ZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQor
ICAgICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKKyAg
ICB9CisKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAgICBUaHVua3M6OnNpbmds
ZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOworCisgICAg
aWYgKGluZm8ubWVtb3J5KSB7CisgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUikgeworICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9k
ZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRH
UFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIEludmFsaWRHUFJSZWcgPT0gcGlubmVkR1BSKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMt
PmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5
QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAg
ICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgICAgIC8vIE1vc3Qg
bWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0Cisg
ICAgICAgICAgICAvLyBleGNlcHRpb24gY2hlY2sgYmVjYXVzZSB0aGV5IGNhbiByZWx5IG9uIGZh
dWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBhY2Nl
c3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZQorICAgICAgICAg
ICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb2RlLnNl
dE51bUVudHJ5cG9pbnRzKDEpOworCisgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9IENvbnRl
eHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2Ny
YXRjaCgyKSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKworICAgIFJlZjxCMzo6QWlyOjpQ
cm9sb2d1ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIz
OjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBjb2RlLmVtaXREZWZhdWx0UHJvbG9n
dWUoaml0KTsKKworICAgICAgICB7CisgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgICAgICAgICAg
YXV0byBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbY29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxs
ZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAg
ICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdh
c21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CisgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBtaW5pbXVtUGFyZW50Q2hlY2tTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSwgMTAyNCk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBl
eHRyYUZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIHN0ZDo6bWF4PHVpbnQzMl90PigKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93
cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSB0ZXJtaW5h
bCBub2RlcyBpbiB0aGUgY2FsbAorICAgICAgICAgICAgICAgIC8vIHRyZWUsIChlLmcgdGhleSBk
b24ndCBtYWtlIGFueSBjYWxscykgYW5kIGhhdmUgYSBzbWFsbCBlbm91Z2ggZnJhbWUgc2l6ZS4g
VGhpcyB3b3JrcyBieQorICAgICAgICAgICAgICAgIC8vIGhhdmluZyBhbnkgc3VjaCB0ZXJtaW5h
bCBub2RlIGhhdmUgaXRzIHBhcmVudCBjYWxsZXIgaW5jbHVkZSBzb21lIGV4dHJhIHNpemUgaW4g
aXRzCisgICAgICAgICAgICAgICAgLy8gb3duIGNoZWNrIGZvciBpdC4gVGhlIGdvYWwgaGVyZSBp
cyB0d29mb2xkOgorICAgICAgICAgICAgICAgIC8vIDEuIEVtaXQgbGVzcyBjb2RlLgorICAgICAg
ICAgICAgICAgIC8vIDIuIFRyeSB0byBzcGVlZCB0aGluZ3MgdXAgYnkgc2tpcHBpbmcgc3RhY2sg
Y2hlY2tzLgorICAgICAgICAgICAgICAgIG1pbmltdW1QYXJlbnRDaGVja1NpemUsCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hlY2tzIGluIHRoZSBX
YXNtIC0+IEVtYmVkZGVyIGNhbGwgSUMgc3R1Yi4gU2luY2UgdGhlc2Ugd2lsbAorICAgICAgICAg
ICAgICAgIC8vIHNwaWxsIGFsbCBhcmd1bWVudHMgdG8gdGhlIHN0YWNrLCB3ZSBlbnN1cmUgdGhh
dCBhIHN0YWNrIGNoZWNrIGhlcmUgY292ZXJzIHRoZQorICAgICAgICAgICAgICAgIC8vIHN0YWNr
IHRoYXQgc3VjaCBhIHN0dWIgd291bGQgdXNlLgorICAgICAgICAgICAgICAgIChDaGVja2VkPHVp
bnQzMl90PihtX21heE51bUpTQ2FsbEFyZ3VtZW50cykgKiBzaXplb2YoUmVnaXN0ZXIpICsganNj
Q2FsbGluZ0NvbnZlbnRpb24oKS5oZWFkZXJTaXplSW5CeXRlcygpKS51bnNhZmVHZXQoKQorICAg
ICAgICAgICAgKSk7CisgICAgICAgICAgICBjb25zdCBpbnQzMl90IGNoZWNrU2l6ZSA9IG1fbWFr
ZXNDYWxscyA/ICh3YXNtRnJhbWVTaXplICsgZXh0cmFGcmFtZVNpemUpLnVuc2FmZUdldCgpIDog
d2FzbUZyYW1lU2l6ZS51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxv
d0NoZWNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNl
cnZlZFpvbmVTaXplKCk7CisgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1f
bWFrZXNDYWxscyB8fCB3YXNtRnJhbWVTaXplID49IG1pbmltdW1QYXJlbnRDaGVja1NpemUgfHwg
bmVlZFVuZGVyZmxvd0NoZWNrOworCisgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1
bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0
aGluCisgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291
bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgorICAgICAgICAgICAgaWYgKG5lZWRzT3Zl
cmZsb3dDaGVjaykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJv
bG9ndWVTY3JhdGNoKDEpOworCisgICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RU
TFMoKSkKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNv
bnRleHRJbnN0YW5jZSk7CisKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
b3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVj
aykpCisgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2gxLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcikp
OworICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6QmVsb3csIHNjcmF0Y2gxLCBzY3JhdGNoMikpOworICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWw8
SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZs
b3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1
c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVjayBpcyBu
ZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3Qu
CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dT
Y3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFj
cm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24ndCBhY3R1
YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50IGNv
bnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBjaGVjaykg
d2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0pOworCisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgw
LCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFz
dFRMUygpKSB7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGdwcigpOworICAgICAgICAvLyBP
T1BTOiBXb3VsZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFs
dWUuCisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNlKSwgbV9pbnN0YW5j
ZVZhbHVlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gVG1wKGNvbnRl
eHRJbnN0YW5jZSk7CisKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAgbV9sb2Nh
bHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUg
dHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAg
ICAgIG1fbG9jYWxzW2ldID0geyBncHIoKSwgdHlwZSB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAg
ICAgIG1fbG9jYWxzW2ldID0geyBmcHIoKSwgdHlwZSB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkubG9h
ZEFyZ3VtZW50cyhzaWduYXR1cmUsIFsmXSAoY29uc3QgQXJnJiBhcmcsIHVuc2lnbmVkIGkpIHsK
KyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgY2FzZSBU
eXBlOjpJMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCBhcmcsIG1fbG9jYWxzW2ldLmZp
cnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAg
ICAgICAgIGFwcGVuZChNb3ZlLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3Zl
RmxvYXQsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIGFyZywg
bV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6OmZ1bmN0aW9uRW50cnlE
ZWNyZW1lbnQoKSwgQjM6Ok9yaWdpbigpKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVz
dG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9y
ZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFRtcCBp
bnN0YW5jZSwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5z
dGFuY2UoYmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1p
dCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CisgICAgICAgIC8vIFRoZSBJbnN0
YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fu
b25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlw
ZShzdGF0aWNfY2FzdDxJbnN0YW5jZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFja0xpbWl0KCkpKSA9
PSBzaXplb2YodWludDY0X3QpLCAiIik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjpp
c1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1p
dCgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRB
ZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCksIEIzOjpXaWR0aDY0
KSk7CisgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92
ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRv
QWN0dWFsU3RhY2tMaW1pdCgpKSwgdGVtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwg
QXJnOjphZGRyKHRlbXApLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCB0ZW1w
LCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgY29uc3Qg
UGlubmVkUmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCk7CisgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJzOworICAgICAgICBjbG9iYmVycy5zZXQo
cGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOworICAgICAgICBmb3IgKGF1dG8gaW5mbyA6
IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnMpCisgICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5m
by5zaXplUmVnaXN0ZXIpOworCisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpWb2lkKTsKKyAgICAgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAg
ZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gZWZmZWN0czsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVy
cyk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVt
b3J5UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVn
cy0+c2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0g
MSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUg
Zm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJz
ZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIo
KSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVS
ZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ld
LnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBh
dGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lkIEFpcklSR2VuZXJh
dG9yOjplbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEV4Y2VwdGlvblR5cGUg
dHlwZSkKK3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGF1dG8g
anVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBqaXQuYWRkTGlua1Rhc2so
W2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
IGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJv
bVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRl
c0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCArPSBtX2xvY2Fscy5zaXpl
KCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NPTVBJTEVfRkFJTF9JRigo
dG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBDaGVja2VkU3RhdGU6OkRp
ZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAi
Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGxvY2FscyIpOworCisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2
NDogeworICAgICAgICAgICAgVG1wIGxvY2FsID0gZ3ByKCk7CisgICAgICAgICAgICBtX2xvY2Fs
cy51bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIGFwcGVuZChY
b3I2NCwgbG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDogeworICAgICAgICAg
ICAgVG1wIGxvY2FsID0gZnByKCk7CisgICAgICAgICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBl
bmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAg
ICAgICAgICAvLyBJRUVFIDc1NCAiMCIgaXMganVzdCBpbnQzMi82NCB6ZXJvLgorICAgICAgICAg
ICAgYXBwZW5kKFhvcjY0LCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgICAgIGFwcGVuZCh0eXBlID09
IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwgdGVtcCwgbG9jYWwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFM6IElzIHRoaXMgY29y
cmVjdD8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2Fscy5zaXplKCkgPT0gc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7IC8vIFdlIGhhbmRsZSBhcmd1bWVudHMgaW4gdGhlIHBy
b2xvZ3VlCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0TG9j
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdLmZpcnN0KTsKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKG1fbG9jYWxzW2luZGV4XS5zZWNv
bmQpLCBtX2xvY2Fsc1tpbmRleF0uZmlyc3QsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogdW5yZWFjaGFibGUgPSBhZGRQYXRjaHBvaW50
KEIzOjpWb2lkKTsKKyAgICB1bnJlYWNoYWJsZS0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6OlVucmVhY2hh
YmxlKTsKKyAgICB9KTsKKyAgICB1bnJlYWNoYWJsZS0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9y
eShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIGludDMyX3QgKCpncm93TWVtb3J5KSh2b2lkKiwgSW5zdGFuY2UqLCBp
bnQzMl90KSA9IFtdICh2b2lkKiBjYWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJf
dCBkZWx0YSkgLT4gaW50MzJfdCB7CisgICAgICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFt
ZShjYWxsRnJhbWUpOworCisgICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1
cm4gLTE7CisKKyAgICAgICAgYXV0byBncm93biA9IGluc3RhbmNlLT5tZW1vcnkoKS0+Z3JvdyhQ
YWdlQ291bnQoZGVsdGEpKTsKKyAgICAgICAgaWYgKCFncm93bikgeworICAgICAgICAgICAgc3dp
dGNoIChncm93bi5lcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246OkludmFsaWREZWx0YToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJl
YXNvbjo6SW52YWxpZEdyb3dTaXplOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWls
UmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jv
d0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKKyAg
ICB9OworCisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdENDYWxsKGdyb3dNZW1vcnksIHJl
c3VsdCwgbV9mcmFtZVBvaW50ZXIsIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOworICAgIHJlc3Rv
cmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpObywgbV9p
bmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRyKS0+c2l6ZSgpKSkg
PT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOworCisg
ICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisKKyAgICBSRUxF
QVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRN
ZW1vcnlTaXplKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihp
bnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHRl
bXAxKTsKKyAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OworICAgIHN0YXRp
Y19hc3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAxdWxsIDw8IHNoaWZ0VmFsdWUsICJUaGlz
IG11c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKKyAgICBhcHBl
bmQoTW92ZSwgQXJnOjppbW0oMTYpLCB0ZW1wMik7CisgICAgYWRkU2hpZnQoVXJzaGlmdDY0LCB0
ZW1wMSwgdGVtcDIsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcmVzdWx0LCByZXN1bHQp
OworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c2V0TG9jYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XS5maXJzdCk7CisgICAgYXBwZW5kKG1vdmVPcEZv
clZhbHVlVHlwZShtX2xvY2Fsc1tpbmRleF0uc2Vjb25kKSwgdmFsdWUsIG1fbG9jYWxzW2luZGV4
XS5maXJzdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0
R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgVHlwZSB0eXBlID0gbV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisK
KyAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgVG1wIHRlbXAgPSBncHIoKTsK
KworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZz
ZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRy
KGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwgdGVtcCk7CisK
KyAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJl
Z2lzdGVyKSk7CisgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OndpZHRo
Rm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQorICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVU
eXBlKHR5cGUpLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgcmVzdWx0KTsKKyAgICBlbHNlIHsK
KyAgICAgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJp
Z0ltbShvZmZzZXQpLCB0ZW1wMik7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgdGVtcDIsIHRlbXAs
IHRlbXApOworICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCBBcmc6OmFk
ZHIodGVtcCksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFs
dWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgdGVtcCA9IGdwcigpOworCisgICAgUkVM
RUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFs
cygpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VW
YWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpLCB0ZW1wKTsKKworICAgIFR5cGUg
dHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOworCisgICAgaW50MzJfdCBvZmZzZXQg
PSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOworICAgIGlmIChB
cmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlw
ZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFy
Zzo6YWRkcih0ZW1wLCBvZmZzZXQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgVG1wIHRlbXAyID0g
Z3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCB0ZW1wMik7
CisgICAgICAgIGFwcGVuZChBZGQ2NCwgdGVtcDIsIHRlbXAsIHRlbXApOworICAgICAgICBhcHBl
bmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCB2YWx1ZSwgQXJnOjphZGRyKHRlbXApKTsKKyAg
ICB9CisKKyAgICByZXR1cm4geyB9OworfQorCitpbmxpbmUgQWlySVJHZW5lcmF0b3I6OkV4cHJl
c3Npb25UeXBlIEFpcklSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJh
dGlvbikKK3sKKyAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKKworICAgIHN3aXRjaCAobV9t
b2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogeworICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTIQorCisgICAgICAgIC8vIFdlJ3Jl
IG5vdCB1c2luZyBzaWduYWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9yZSBjaGVj
ayB0aGF0IG5vIG1lbW9yeSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkgc2l6ZS4K
KyAgICAgICAgLy9BU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgLy9BU1NFUlQoc2l6
ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICAgICAgLy9tX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBtX21l
bW9yeVNpemVHUFIsIHBvaW50ZXIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogewor
ICAgICAgICAvLyBXZSd2ZSB2aXJ0dWFsbHkgbWFwcGVkIDRHaUIrcmVkem9uZSBmb3IgdGhpcyBt
ZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29u
dGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50XSwKKyAgICAgICAgLy8gYW5kIGV2ZXJ5dGhp
bmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFu
eSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3Nl
bWJseSByZWdpc3RlcgorICAgICAgICAvLyBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93
ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlciArIG9mZnNldCBhY2Nlc3NlcyBwZXJmb3JtIHRoZSBh
ZGRpdGlvbiBpbiA2NC1iaXQgd2hpY2ggY2FuIHB1c2ggYW4gYWNjZXNzIGFib3ZlCisgICAgICAg
IC8vIHRoZSAzMi1iaXQgbGltaXQgKHRoZSBvZmZzZXQgaXMgdW5zaWduZWQgMzItYml0KS4gVGhl
IHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxsIG9mZnNldHMsIGFuZCB3ZSdsbCBleHBsaWNp
dGx5IGJvdW5kcyBjaGVjayBhbnkKKyAgICAgICAgLy8gcmVnaXN0ZXIgKyBsYXJnZSBvZmZzZXQg
YWNjZXNzLiBXZSBkb24ndCB0aGluayB0aGlzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyZXF1ZW50bHku
CisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIHRoYXQgcmVnaXN0ZXIgKyBs
YXJnZSBvZmZzZXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNlIHRoYXQncyB0ZWNo
bmljYWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZyB0aGUKKyAgICAg
ICAgLy8gUFJPVF9OT05FIHJlZ2lvbiwgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBhIHNtYWxs
ZXIgaW1tZWRpYXRlIGJlY2F1c2UgaXQgY2FuIGNvZGVnZW5zIGJldHRlci4gV2Uga25vdyB0aGF0
IGFueXRoaW5nIGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAgLy8gdGhhbiB0aGUgZGVjbGFy
ZWQgJ21heGltdW0nIHdpbGwgdHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG51
bWJlci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVkICdtYXhpbXVtJyB0aGVuIHdlIHN0aWxsIGtu
b3cgdGhhdAorICAgICAgICAvLyBhbnkgYWNjZXNzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA0
R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBhZGQgdGhlIHJlZHpvbmUuCisgICAgICAgIGlmIChv
ZmZzZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMhCisgICAgICAgICAgICAvL3Np
emVfdCBtYXhpbXVtID0gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkgPyBtX2luZm8ubWVtb3J5Lm1h
eGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwor
ICAgICAgICAgICAgLy9tX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1Zh
bHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQg
LSAxLCBtYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQor
CisgICAgVG1wIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIHBvaW50ZXIsIHJl
c3VsdCk7CisgICAgYXBwZW5kKEFkZDY0LCBUbXAobV9tZW1vcnlCYXNlR1BSKSwgcmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExv
YWRPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAg
ICAgICByZXR1cm4gMTsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6CisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2
VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgIHJldHVybiAyOwor
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQzMlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgIGNhc2UgTG9hZE9w
VHlwZTo6RjMyTG9hZDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBU
bXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAgICBpbnQzMl90IG9mZnNldCA9IGZp
eHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAgaW1tVG1w
OworICAgIFRtcCBuZXdQdHI7CisgICAgVG1wIHJlc3VsdDsKKworICAgIGF1dG8gbG9hZEFyZyA9
IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3
aWR0aEZvckJ5dGVzKHNpemVPZkxvYWRPcChvcCkpKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6
OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1wID0gZ3ByKCk7CisgICAgICAg
IG5ld1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0
KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIHBvaW50ZXIsIG5ld1B0
cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsKKyAgICB9OworCisgICAgc3dp
dGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CisgICAgICAgIHJl
c3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2Fk
QXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBl
bmQoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFw
cGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogeworICAgICAgICByZXN1
bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4LCBsb2FkQXJnKCksIHJlc3VsdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7
CisgICAgICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90aGVyIHpleHQgaGVyZT8KKyAgICAgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOCwgbG9hZEFyZygpLCByZXN1bHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQx
NlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkMTZTaWdu
ZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogeworICAgICAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwg
cmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDE2VTogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQxNiwg
bG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVkIGFub3Ro
ZXIgemV4dCBoZXJlPworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExv
YWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJV
OiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZTMyLCBsb2Fk
QXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDMyUzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBw
ZW5kKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2lnbkV4dGVu
ZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAg
ICAgICBhcHBlbmQoTW92ZSwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOiB7Cisg
ICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgbG9hZEFy
ZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBv
ZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci5pc0dQKCkpOwor
CisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZM
b2FkT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJv
dmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBo
YXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dl
dmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lk
KTsKKyAgICAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1v
cnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0Y2gsIFRt
cCgpKTsKKworICAgICAgICAvLyBXZSB3b24ndCByZWFjaCBoZXJlLCBzbyB3ZSBqdXN0IHBpY2sg
YSByYW5kb20gcmVnLgorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50
ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisKKyAgICByZXR1cm4geyB9
OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAg
IGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9y
ZTE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToK
KyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6
OkYzMlN0b3JlOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRT
dG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKworaW5saW5l
IHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkK
K3sKKyAgICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwg
dW9mZnNldCk7CisKKyAgICBUbXAgaW1tVG1wOworICAgIFRtcCBuZXdQdHI7CisKKyAgICBhdXRv
IHN0b3JlQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9m
ZnNldCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mU3RvcmVPcChvcCkpKSkKKyAgICAgICAgICAg
IHJldHVybiBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1wID0gZ3By
KCk7CisgICAgICAgIG5ld1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpi
aWdJbW0ob2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIHBv
aW50ZXIsIG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsKKyAgICB9
OworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlODoK
KyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAgICAgIGFwcGVuZChTdG9yZTgs
IHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9w
VHlwZTo6STY0U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgorICAg
ICAgICBhcHBlbmQoU3RvcmUxNiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3RvcmVPcFR5
cGU6OkkzMlN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZTMyLCB2YWx1ZSwgc3RvcmVBcmcoKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgorICAg
ICAgICBhcHBlbmQoTW92ZSwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmVGbG9h
dCwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3Jl
T3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHZhbHVlLCBzdG9y
ZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnN0b3JlKFN0b3JlT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMy
X3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBvaW50ZXIuaXNHUCgp
KTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6
ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2ggdGhpcyBp
cyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRpb24gZXJyb3IsIHNv
IHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVudGltZSBleGNlcHRpb24u
IEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBhdXRvKiB0aHJvd0V4Y2VwdGlvbiA9IGFkZFBhdGNo
cG9pbnQoQjM6OlZvaWQpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbi0+c2V0R2VuZXJhdG9yKFt0
aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworICAgICAgICBl
bWl0UGF0Y2hwb2ludCh0aHJvd0V4Y2VwdGlvbiwgVG1wKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBlbWl0U3RvcmVPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zm
c2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZhbHVlLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChub25a
ZXJvLmlzR1AoKSA9PSB6ZXJvLmlzR1AoKSk7CisgICAgcmVzdWx0ID0gbm9uWmVyby5pc0dQKCkg
PyBncHIoKSA6IGZwcigpOworICAgIGlmIChub25aZXJvLmlzR1AoKSkKKyAgICAgICAgYXBwZW5k
KE1vdmUsIG5vblplcm8sIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQoTW92ZURv
dWJsZSwgbm9uWmVybywgcmVzdWx0KTsKKworICAgIEJhc2ljQmxvY2sqIGlzWmVybyA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRC
bG9jaygpOworCisgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2Nr
LT5zZXRTdWNjZXNzb3JzKGlzWmVybywgY29udGludWF0aW9uKTsKKworICAgIGlmICh6ZXJvLmlz
R1AoKSkKKyAgICAgICAgYXBwZW5kKGlzWmVybywgTW92ZSwgemVybywgcmVzdWx0KTsKKyAgICBl
bHNlCisgICAgICAgIGFwcGVuZChpc1plcm8sIE1vdmVEb3VibGUsIHplcm8sIHJlc3VsdCk7Cisg
ICAgYXBwZW5kKGlzWmVybywgSnVtcCk7CisgICAgaXNaZXJvLT5zZXRTdWNjZXNzb3JzKGNvbnRp
bnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJl
dHVybiB7IH07Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVjayh1aW50
MzJfdCBkZWNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbiBvcmlnaW4pCit7CisgICAgaWYgKCFtX3Rp
ZXJVcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVG1wIGNvdW50ZG93blB0ciA9IGdwcigpOwor
ICAgIFRtcCBvbGRDb3VudGRvd24gPSBncHIoKTsKKyAgICBUbXAgbmV3Q291bnRkb3duID0gZ3By
KCk7CisKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ocmVpbnRlcnByZXRfY2FzdDx1aW50
NjRfdD4obV90aWVyVXApKSwgY291bnRkb3duUHRyKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBBcmc6
OmFkZHIoY291bnRkb3duUHRyKSwgb2xkQ291bnRkb3duKTsKKworICAgIFJFTEVBU0VfQVNTRVJU
KEFyZzo6aXNWYWxpZEltbUZvcm0oZGVjcmVtZW50Q291bnQpKTsKKyAgICBhcHBlbmQoTW92ZTMy
LCBvbGRDb3VudGRvd24sIG5ld0NvdW50ZG93bik7CisgICAgYXBwZW5kKFN1YjMyLCBBcmc6Omlt
bShkZWNyZW1lbnRDb3VudCksIG5ld0NvdW50ZG93bik7CisgICAgYXBwZW5kKE1vdmUzMiwgbmV3
Q291bnRkb3duLCBBcmc6OmFkZHIoY291bnRkb3duUHRyKSk7CisKKyAgICBhdXRvKiBwYXRjaCA9
IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6
RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3Ao
KTsKKyAgICBlZmZlY3RzLndyaXRlcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIHBhdGNo
LT5lZmZlY3RzID0gZWZmZWN0czsKKworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgp
OworCisgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICB0aWVyVXAubGluaygmaml0KTsKKworICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgZXh0cmFQYWRkaW5nQnl0ZXMgPSAwOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVn
aXN0ZXJzVG9TcGlsbCA9IHsgfTsKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGwuYWRkKEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNr
Qnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxs
LCBleHRyYVBhZGRpbmdCeXRlcyk7CisKKyAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobV9mdW5jdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQubmVhckNhbGwo
KTsKKworICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0
ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lzdGVyU2V0KCks
IG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRk
aW5nQnl0ZXMpOworICAgICAgICAgICAgaml0Lmp1bXAodGllclVwUmVzdW1lKTsKKworICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8Tm9QdHJUYWc+KGNhbGwpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRU
aHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRyaWdnZXJPTUdUaWVyVXBUaHVu
a0dlbmVyYXRvcikuY29kZSgpKSk7CisKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAg
ICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSwgbmV3Q291bnRkb3duLCBv
bGRDb3VudGRvd24pOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5l
cmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpCit7CisgICAgQmFzaWNCbG9jayogYm9keSA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29k
ZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGJvZHkpOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OworICAgIGVt
aXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6bG9vcERlY3JlbWVudCgpLCBvcmlnaW4oKSk7CisK
KyAgICByZXR1cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShz
aWduYXR1cmUpLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7Cit9CisKK0Fp
cklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoVHlw
ZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4oKSwgc2ln
bmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fY29k
ZS5hZGRCbG9jaygpKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2Vu
ZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERh
dGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6
OkJsb2NrLCBtX2NvZGUuYWRkQmxvY2soKSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgCisgICAgLy8gV2FzbSBib29scyBhcmUgaTMyLgorICAgIGFwcGVuZChCcmFuY2hUZXN0
MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90WmVybyksIGNvbmRpdGlvbiwgY29u
ZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YWtlbiwgbm90VGFr
ZW4pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKKyAgICByZXN1bHQgPSBDb250cm9s
RGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlw
ZTo6SWYsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJl
c3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZh
bHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBhcHBlbmQoSnVt
cCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24p
OworICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZik7
CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CisgICAgZGF0YS5jb252ZXJ0SWZU
b0Jsb2NrKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0
dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHJldHVyblZhbHVlcy5z
aXplKCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXplKCkpIHsKKyAgICAgICAgVG1w
IHJldHVyblZhbHVlR1BSID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
VG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAg
ICAgc3dpdGNoIChkYXRhLnNpZ25hdHVyZSgpKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgor
ICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgICAgICBhcHBlbmQoUmV0MzIsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFwcGVu
ZChSZXQ2NCwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgcmV0dXJuVmFsdWVz
WzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJldHVy
blZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoK
KyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZh
bHVlRlBSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0dXJuVmFsdWVGUFIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYXBwZW5k
KFJldFZvaWQpOworICAgIHJldHVybiB7IH07Cit9CisKKy8vIE5PVEU6IEFsbCBicmFuY2hlcyBp
biBXYXNtIGFyZSBvbiAzMi1iaXQgaW50cworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCcmFu
Y2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5
VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHRGb3JCcmFuY2goKSk7CisK
KyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7Cisg
ICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXND
b25kKE1hY3JvQXNzZW1ibGVyOjpOb3RaZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGFwcGVuZChKdW1wKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3Nv
cnModGFyZ2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8
Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHVu
aWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cmVzdWx0Rm9y
QnJhbmNoKCkpOworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGVm
YXVsdFRhcmdldC5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0g
dGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICAgICAgQmFzaWNCbG9jayog
Y29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIGlmIChBcmc6OmlzVmFs
aWRJbW1Gb3JtKGkpKQorICAgICAgICAgICAgYXBwZW5kKEJyYW5jaDMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgQXJnOjppbW0oaSksIGNvbmRpdGlvbik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAgICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oaSksIGNvbnN0YW50KTsKKyAgICAgICAgICAgIGFwcGVu
ZChCcmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGNvbnN0YW50
LCBjb25kaXRpb24pOworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNj
ZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9uKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGVmYXVsdFRhcmdldC50YXJnZXRCbG9ja0ZvckJyYW5jaCgp
KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmVuZEJsb2Nr
KENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xE
YXRhOworCisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnJl
c3VsdCk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNz
b3JzKGRhdGEuY29udGludWF0aW9uKTsKKworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxl
KGVudHJ5KTsKK30KKworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxl
KENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0
YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5j
b250aW51YXRpb247CisKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgewor
ICAgICAgICBhcHBlbmQoZGF0YS5zcGVjaWFsLCBKdW1wKTsKKyAgICAgICAgZGF0YS5zcGVjaWFs
LT5zZXRTdWNjZXNzb3JzKG1fY3VycmVudEJsb2NrKTsKKyAgICB9CisKKyAgICBmb3IgKFRtcCBy
ZXN1bHQgOiBkYXRhLnJlc3VsdCkKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBj
b2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBo
ZXJlLgorICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQorICAgICAg
ICByZXR1cm4gYWRkUmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNp
emUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisgICAgVHlwZSByZXR1cm5UeXBl
ID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBUbXAgcmV0dXJuVG1wOworICAgIHN3aXRj
aCAocmV0dXJuVHlwZSkgeworICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIHJldHVyblRt
cCA9IGdwcigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNl
IFR5cGU6OkY2NDoKKyAgICAgICAgcmV0dXJuVG1wID0gZnByKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOworCisgICAgaWYgKG1faW5mby5p
c0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7
CisgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0Nh
bGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOworCisgICAg
ICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVy
YXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRl
ZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAgIFRtcCB0YXJnZXRJbnN0YW5jZSA9IGdwcigp
OworICAgICAgICAvLyBPT1BTOiBUcnkgdG8gaXNlbCB0aGlzIGJldHRlcgorICAgICAgICBhcHBl
bmQoTW92ZSwgQXJnOjpiaWdJbW0oSW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVu
Y3Rpb25JbmRleCkpLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW5z
dGFuY2VWYWx1ZSgpLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmFkZHIodGFyZ2V0SW5zdGFuY2UpLCB0YXJnZXRJbnN0YW5jZSk7CisKKyAgICAgICAgQmFzaWNC
bG9jayogaXNXYXNtQmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogaXNFbWJlZGRlckJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgICAgIGFwcGVuZChC
cmFuY2hUZXN0NjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90WmVybyksIHRhcmdl
dEluc3RhbmNlLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRT
dWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVyQmxvY2spOworCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVy
blR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVl
OworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVk
IHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAg
ICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0
byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxh
dGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcpKTsKKworCisgICAgICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJn
czsKKyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2Nv
ZGUsIHJldHVyblR5cGUsIHBhdGNoLCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCBy
ZXApIHsKKyAgICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hh
YmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBw
ZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxs
KSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChpc1dhc21CbG9jaywgcGF0Y2hwb2ludCwg
cmV0dXJuVG1wLCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAgICAgYXBwZW5kKGlzV2Fz
bUJsb2NrLCBKdW1wKTsKKyAgICAgICAgICAgIGlzV2FzbUJsb2NrLT5zZXRTdWNjZXNzb3JzKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBUbXAganVt
cERlc3RpbmF0aW9uID0gZ3ByKCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5kZXgpKSwg
anVtcERlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW5zdGFuY2VWYWx1
ZSgpLCBqdW1wRGVzdGluYXRpb24pOworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRk
cihqdW1wRGVzdGluYXRpb24pLCBqdW1wRGVzdGluYXRpb24pOworCisgICAgICAgICAgICBhdXRv
KiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2lu
Y2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBw
ZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRo
YXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzIxODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAg
ICAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAgICAgICAgICAg
cGF0Y2hBcmdzLmFwcGVuZChqdW1wRGVzdGluYXRpb24pOworCisgICAgICAgICAgICB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaCwg
YXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgICAgICAgICAg
cGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9p
ZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChpc0VtYmVkZGVyQmxvY2ssIHBhdGNocG9pbnQsIHJl
dHVyblRtcCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVk
ZGVyQmxvY2ssIEp1bXApOworICAgICAgICAgICAgaXNFbWJlZGRlckJsb2NrLT5zZXRTdWNjZXNz
b3JzKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFu
b3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQg
b3VyIE1lbW9yeS4KKyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9y
ZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBj
b250aW51YXRpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBh
ZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
LnJlYWRzUGlubmVkID0gdHJ1ZTsKKworICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBh
dGNoQXJnczsKKyAgICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1f
Y29kZSwgcmV0dXJuVHlwZSwgcGF0Y2gsIGFyZ3MsIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVw
IHJlcCkgeworICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAg
ICAgICB9KTsKKworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGws
IGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJy
ZW50QmxvY2ssIHBhdGNocG9pbnQsIHJldHVyblRtcCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxhc3QoKTsKKyAgICBBU1NF
UlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21h
a2VzQ2FsbHMgPSB0cnVlOworICAgIC8vIE5vdGU6IGNhbGwgaW5kaXJlY3QgY2FuIGNhbGwgZWl0
aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJl
Y2F1c2UKKyAgICAvLyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiBpcyBsaWtlIGNhbGxpbmcg
aW50byB0aGUgZW1iZWRkZXIsIHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBhbGwgY2FsbCBpbmRp
cmVjdHMKKyAgICAvLyBjYW4gYmUgdG8gdGhlIGVtYmVkZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sg
Y2FsY3VsYXRpb24uCisgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21h
eE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7
CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gZ3ByKCk7Cisg
ICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyID0gZ3ByKCk7CisgICAgRXhwcmVzc2lv
blR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCA9IGdwcigpOworICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9m
VGFibGUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1Zh
bGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCksIEIzOjpXaWR0aDY0KSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRP
Zkluc3RhbmNlcygpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6
OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSwgQjM6OldpZHRoNjQpKTsK
KworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFu
Y2U6Om9mZnNldE9mVGFibGUoKSksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgpOworICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgs
IFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlcik7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0
aCwgVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpLCBpbnN0YW5jZXNCdWZmZXIpOworICAgICAg
ICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwg
VGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsK
KyAgICB9CisKKyAgICBhcHBlbmQoTW92ZTMyLCBjYWxsZWVJbmRleCwgY2FsbGVlSW5kZXgpOwor
CisgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBsb29raW5nIGZvciBpcyB2YWxpZC4KKyAg
ICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaDMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNhbGxlZUluZGV4LCBjYWxsYWJsZUZ1bmN0
aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dF
eGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc0NhbGxJbmRpcmVjdCk7Cisg
ICAgfSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gZ3ByKCk7CisgICAgewor
ICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGdwcigpOworICAg
ICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFy
ZSBsb29raW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKHNpemVvZihXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgYXBwZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAg
ICAgICBhcHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIGNhbGxlZVNpZ25hdHVy
ZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVl
U2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50
cnlwb2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29kZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVl
IGNvZGUuCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQi
IFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KKyAgICAgICAg
Ly8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhl
IGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgp
ID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQiKTsKKyAgICAg
ICAgLy8gT09QUzogVGhpcyBzZWVtcyBkdW1iIHRvIGRvIHR3byBjaGVja3MganVzdCBmb3IgYSBu
aWNlciBlcnJvciBoZXJlLi4uCisKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxs
ZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZT
aWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworCisgICAgICAgIGVtaXRD
aGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChTaWduYXR1cmU6OmludmFsaWRJ
bmRleCA9PSAwLCAiIik7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDY0LCBBcmc6OnJl
c0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgY2FsbGVl
U2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOworICAg
ICAgICB9KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIEV4cHJlc3Np
b25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBncHIoKTsKKyAgICAgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmJpZ0ltbShTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkp
LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIGFwcGVuZChCcmFuY2g2NCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGNhbGxlZVNpZ25hdHVyZUlu
ZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25h
dHVyZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2gg
aWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgVG1wIG5ld0NvbnRleHRJbnN0YW5jZSA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbmRleChpbnN0YW5jZXNCdWZmZXIsIGNhbGxl
ZUluZGV4LCA4LCAwKSwgbmV3Q29udGV4dEluc3RhbmNlKTsKKworICAgICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayog
ZG9Db250ZXh0U3dpdGNoID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICAgICAgYXBwZW5kKEJy
YW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgbmV3Q29udGV4dElu
c3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3Vj
Y2Vzc29ycyhjb250aW51YXRpb24sIGRvQ29udGV4dFN3aXRjaCk7CisKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgLy8gV2Ug
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBjYWxsaW5nIHNvbWV0aGluZyB3aXRoIEJvdW5k
c0NoZWNraW5nIG1lbW9yeS4KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRv
IGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEK
KyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRv
U2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIEdQ
UlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAg
Y29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5z
aXplUmVnaXN0ZXJzOworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdz
LmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHRJbnN0YW5j
ZSAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNr
TGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1v
cnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNv
bnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNTRVJUKHNp
emVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVy
CisgICAgICAgICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2Mjk1MgorICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsK
KyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4
dEluc3RhbmNlKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4
dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVn
c1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9pZCouCisg
ICAgICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50KGRvQ29udGV4dFN3aXRjaCwgcGF0
Y2hwb2ludCwgVG1wKCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAg
ICAgICAgYXBwZW5kKGRvQ29udGV4dFN3aXRjaCwgSnVtcCk7CisgICAgICAgIGRvQ29udGV4dFN3
aXRjaC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIo
Y2FsbGVlQ29kZSksIGNhbGxlZUNvZGUpOworCisgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0
dXJlLnJldHVyblR5cGUoKTsKKyAgICBUbXAgcmV0dXJuVG1wOworICAgIHN3aXRjaCAocmV0dXJu
VHlwZSkgeworICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
eXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIHJldHVyblRtcCA9IGdwcigp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2
NDoKKyAgICAgICAgcmV0dXJuVG1wID0gZnByKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
YXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICBw
YXRjaC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIHBhdGNoLT5lZmZlY3RzLnJl
YWRzUGlubmVkID0gdHJ1ZTsKKyAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlh
bCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNl
LgorICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgYWx3YXlzIGNhbGxpbmcg
c29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nIHNvCisgICAgLy8gYmVjYXVzZSB0aGUg
d2FzbS0+d2FzbSB0aHVuayB1bmNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lz
dGVycy4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCB0
aGUgd2FzbS0+d2FzbSBzdHViIGFzc3VtZXMgaXQgY2FuCisgICAgLy8gdXNlIGFsbCB0aGUgcGlu
bmVkIHJlZ2lzdGVycyBhcyBzY3JhdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyMTgxCisgICAgcGF0Y2gtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAgICBWZWN0
b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRBcmdzOworICAgIGVtaXRBcmdzLmFwcGVuZChjYWxsZWVD
b2RlKTsKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCBy
ZXR1cm5UeXBlLCBwYXRjaCwgYXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7
CisgICAgICAgIGVtaXRBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgIH0pOworICAgIHBh
dGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmNhbGwocGFyYW1z
W3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAg
ICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgcmV0dXJu
VG1wLCBXVEZNb3ZlKGVtaXRBcmdzKSk7CisKKyAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJl
ZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBt
b2RpZmllZCBvdXIgTWVtb3J5LgorICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUo
KSwgbV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdl
bmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lv
blR5cGUmIHNvdXJjZSkKK3sKKyAgICAvLyBPT1BTOiBXZSBraW5kYSB3YW50IHR5cGVzIGhlcmUg
dG8gZGlzdGluZ3Vpc2ggaTMyL2k2NC9mMzIvZjY0IQorICAgIFJFTEVBU0VfQVNTRVJUKGRzdC5p
c0dQKCkgPT0gc291cmNlLmlzR1AoKSk7CisgICAgYXBwZW5kKGRzdC5pc0dQKCkgPyBNb3ZlIDog
TW92ZURvdWJsZSwgc291cmNlLCBkc3QpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0
IFJlc3VsdExpc3QmIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSByZXN1
bHRTdGFjay5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6
ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCBy
ZXN1bHRTdGFja1tyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaV0pOworfQorCisvL3N0YXRpYyB2
b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3Qg
QWlySVJHZW5lcmF0b3I6OkV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCisvL3sKKy8v
ICAgIGRhdGFMb2coY29tbWEsICJFeHByZXNzaW9uU3RhY2s6Iik7CisvLyAgICBmb3IgKGNvbnN0
IGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisvLyAgICAgICAgZGF0YUxvZyhj
b21tYSwgKmV4cHJlc3Npb24pOworLy99CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmR1bXAoY29u
c3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxp
c3QqIGV4cHJlc3Npb25TdGFjaykKK3sKKyAgICBVTlVTRURfUEFSQU0oY29udHJvbFN0YWNrKTsK
KyAgICBVTlVTRURfUEFSQU0oZXhwcmVzc2lvblN0YWNrKTsKKworICAgIC8vIE9PUFMhCisgICAg
LyoKKyAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgR3JhcGg6Iik7CisgICAgZGF0YUxvZyhtX2Nv
ZGUpOworICAgIGRhdGFMb2dMbigiV2l0aCBjdXJyZW50IGJsb2NrOiIsICptX2N1cnJlbnRCbG9j
ayk7CisgICAgZGF0YUxvZ0xuKCJDb250cm9sIHN0YWNrOiIpOworICAgIEFTU0VSVChjb250cm9s
U3RhY2suc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gY29udHJvbFN0YWNrLnNpemUoKTsg
aS0tOykgeworICAgICAgICBkYXRhTG9nKCIgICIsIGNvbnRyb2xTdGFja1tpXS5jb250cm9sRGF0
YSwgIjogIik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAiIik7CisgICAgICAg
IGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsICpleHByZXNzaW9uU3RhY2spOworICAgICAgICBl
eHByZXNzaW9uU3RhY2sgPSAmY29udHJvbFN0YWNrW2ldLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNr
OworICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCk7CisgICAgKi8K
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgoreworICAg
IHJldHVybiBCMzo6T3JpZ2luKCk7CisgICAgLy9PcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2Vy
LT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQo
KSk7CisgICAgLy9BU1NFUlQoaXNWYWxpZE9wVHlwZShzdGF0aWNfY2FzdDx1aW50OF90Pihvcmln
aW4ub3Bjb2RlKCkpKSk7CisgICAgLy9yZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2lu
KTsKK30KKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29u
dGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91
bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJl
ZGRlckVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAg
ICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVl
PENDYWxsSGVscGVycz4oKTsKKworICAgIEIzOjpQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIENv
ZGUmIGNvZGUgPSBwcm9jZWR1cmUuY29kZSgpOworCisgICAgcHJvY2VkdXJlLnNldE9yaWdpblBy
aW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYg
KG9yaWdpbi5kYXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2Vf
Y2FzdDxPcGNvZGVPcmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMg
bWVhbnMgd2UgY2Fubm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2Vk
UmVnaXN0ZXJzKCkgb3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAg
Ly8gZG9uJ3Qgc3RyaWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCks
IHdoaWNoIHNhdmVzIGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAg
ICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHRoaXM/IFNob3VsZCB3ZSBqdXN0IHNldCBpdCBkaXJlY3Rs
eSBvbiBDb2RlPworICAgIHByb2NlZHVyZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFsc2UpOwor
ICAgIAorICAgIHByb2NlZHVyZS5zZXRPcHRMZXZlbChjb21waWxhdGlvbk1vZGUgPT0gQ29tcGls
YXRpb25Nb2RlOjpCQlFNb2RlCisgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRp
bWl6YXRpb25MZXZlbCgpCisgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6
YXRpb25MZXZlbCgpKTsKKworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHBy
b2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29t
cGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwg
c2lnbmF0dXJlKTsKKyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGly
R2VuZXJhdG9yLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZv
KTsKKyAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgc3VjY2Vz
c29yLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CisgICAgfQorICAgIC8vIE9PUFM6IFZhbGlkYXRl
ICdjb2RlJyBoZXJlIQorICAgIAorICAgIHsKKyAgICAgICAgQjM6OkFpcjo6Z2VuZXJhdGUocHJv
Yy5jb2RlKCksICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOworICAgICAg
ICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJl
LnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCit2b2lkIEFpcklSR2VuZXJh
dG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRpb24sIEV4cHJlc3Np
b25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KQoreworICAgIEFTU0VSVChvcGVyYXRp
b24gPT0gRGl2IHx8IG9wZXJhdGlvbiA9PSBNb2QgfHwgb3BlcmF0aW9uID09IFVEaXYgfHwgb3Bl
cmF0aW9uID09IFVNb2QpOworICAgIGNvbnN0IEIzOjpUeXBlIHR5cGUgPSBsZWZ0LT50eXBlKCk7
CisKKyAgICB7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgS2luZCBvcCA9
IGlzNjRCaXRPcChvcGVyYXRpb24pID8gQnJhbmNoVGVzdDY0IDogQnJhbmNoVGVzdDMyOworICAg
ICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBy
aWdodCwgcmlnaHQpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRo
cm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICBpZiAob3BlcmF0aW9uID09IERpdikgeworICAgICAgICBpbnQ2
NF90IG1pbiA9IHR5cGUgPT0gSW50MzIgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpOworICAgICAgICBlbWl0
Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IFRyeSB0byBlbWl0IG5pY2UgY29tcGFy
ZSB3LyBpbW1zLgorICAgICAgICAgICAgVG1wIG1pblRtcCA9IGdwcigpOworICAgICAgICAgICAg
VG1wIG5lZ09uZSA9IGdwcigpOworCisgICAgICAgICAgICBLaW5kIG9wID0gaXM2NEJpdE9wKG9w
ZXJhdGlvbikgPyBDb21wYXJlNjQgOiBDb21wYXJlMzI7CisgICAgICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjpiaWdJbW0obWluKSwgbWluVG1wKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGxlZnQsIG1pblRtcCwgbWluVG1wKTsK
KyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSgtMSksIG5lZ09uZSk7CisgICAgICAg
ICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdo
dCwgbmVnT25lLCBuZWdPbmUpOworICAgICAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJn
OjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RaZXJvKSwgbWluVG1wLCBuZWdPbmUpOworICAg
ICAgICB9LAorICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0
aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6SW50ZWdlck92ZXJmbG93KTsKKyAgICAgICAgfSk7Cisg
ICAgfQorfQorCisvLyBPT1BTOiBJbXBsZW1lbnQgdGhlc2UgZGl2IG9wcyEhIQordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9u
VHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAg
ICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShy
aWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2Rl
IG9wID0gRGl2OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7
CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQor
ICAgICAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFS
QU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9w
Y29kZSBvcCA9IE1vZDsKKyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmln
aHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJE
aXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7Cisg
ICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAg
IFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9j
b25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRpdihv
cCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1
ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7
CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAg
ICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9y
RGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIg
PSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShs
ZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQp
OworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IERpdjsKKyAgICAvL2VtaXRDaGVja3NGb3JN
b2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsKKyAgICBVTlVTRURfUEFS
QU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0ocmVz
dWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBNb2Q7CisgICAgLy9lbWl0Q2hlY2tz
Rm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwg
cmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVz
c2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOworICAg
IFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNF
RF9QQVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAg
Ly9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBF
eHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7
CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAg
VU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gVU1vZDsK
KyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVz
dWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJv
czMyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
ID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3By
KCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisg
ICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAg
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMy
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IGppdC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50MzJf
dCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1aW50MzJfdCB7
IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bj
b3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGppdC5jb3VudFBvcHVsYXRpb242
NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAg
ICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRfdCAoKnBvcGNvdW50KShpbnQ2NF90
KSA9IFtdIChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9w
Y291bnRsbCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCByZXN1bHQsIGFyZyk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHBhdGNo
cG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworI2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0
VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFtcy5n
cFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJsZShw
YXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAgICB9KTsKKyAgICBy
ZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFy
Zyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAg
ICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBq
aXQuY29udmVydFVJbnQ2NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCks
IHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRU
b0Zsb2F0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0p
OworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJl
c3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0
SW50RG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50Rmxv
YXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0RvdWJsZShwYXJhbXNbMV0u
ZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7Cisg
ICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBh
ZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpF
ZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJh
bXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRj
aHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2
ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0go
KTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25z
dGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGNv
bnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBv
cmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1p
bikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkp
OworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNr
VmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKHBhcmFt
c1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50Owor
ICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRy
dWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlz
IQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1pbigpKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4
KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVh
dGVyRXF1YWwsIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9m
Qm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRo
aXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1
bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4o
KSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQu
dHJ1bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwor
ICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOwor
ICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCisK
K3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNV
RjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFT
SCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNv
bnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBUbXAg
bWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKyAg
ICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdp
bigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFu
dChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4
Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOwor
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVU
b1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0g
cGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBp
bXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAgICBU
bXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nh
c3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwg
YXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigp
LCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFw
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBv
cmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwg
b3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5n
cHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpu
b25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAg
ICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1h
eCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAg
bWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1w
IG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBC
aXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCks
IGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KElu
dDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAg
ICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0
aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50
LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50
NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNo
cG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVt
ZW50IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhh
biwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0
YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhh
dmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQg
aW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAg
ICAgLy8gdGhlIG51bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25l
ZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBy
cyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVl
ZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsK
KyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3Jh
dGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAg
ICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2
KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAg
ICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0
LnRydW5jYXRlRG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCks
IHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAg
aWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IEltcGxlbWVudCB0aGlzIQorICAgIC8q
CisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1z
dGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7
CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0
YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsK
KyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBv
cmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29u
c3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3Vu
ZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9
KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBh
dGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRmxv
YXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQg
PSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6
IGltcGxlbWVudCB0aGlzCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50NjRfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRt
cCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2Fz
dDxmbG9hdD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBh
cmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCks
IG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9y
aWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91
bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAo
aXNYODYoKSkgeworICAgICAgICAvLyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0
aW9uIHRvIGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBh
dCBsZWFzdCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1i
ZXJzIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25lZCBpbnRlZ2VyLiBTaW5jZSB3
ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBycyB3ZSBoYXZlIGIzIGRvIGl0
CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVlZGVkLgorICAgICAgICBzaWdu
Qml0Q29uc3RhbnQgPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0
aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKHNpZ25CaXRDb25zdGFudCwgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7Cisg
ICAgfQorICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIEZQUlJlZyBjb25zdGFu
dCA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBz
Y3JhdGNoID0gcGFyYW1zLmZwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgIGNvbnN0YW50ID0gcGFy
YW1zWzJdLmZwcigpOworICAgICAgICB9CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50
NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsK
KyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsK
KyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwor
UGFydGlhbFJlc3VsdCBBaXJJUkdlbmVyYXRvcjo6YWRkU2hpZnQoS2luZCBraW5kLCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpCit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0oa2luZCwg
QXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKGtpbmQsIHZh
bHVlLCBzaGlmdCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgCisg
ICAgYXBwZW5kKE1vdmUsIHZhbHVlLCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlLCBzaGlmdCwg
bV9lY3gpOworICAgIGFwcGVuZChraW5kLCBtX2VjeCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCitQYXJ0aWFsUmVzdWx0IEFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3ViKEtpbmQg
a2luZCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZv
cm0oa2luZCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5k
KGtpbmQsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVh
bnMKKyAgICAvLyBiID0gYiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7Cisg
ICAgYXBwZW5kKGtpbmQsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCitQYXJ0
aWFsUmVzdWx0IEFpcklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QWJzKEtpbmQga2luZCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoa2luZCA9PSBBYnNGbG9hdCB8fCBraW5kID09IEFic0RvdWJsZSk7CisKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShraW5kLCBBcmc6OlRtcCwg
QXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChraW5kLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKwor
ICAgIFRtcCBjb25zdGFudCA9IGdwcigpOworICAgIGlmIChraW5kID09IEFic0Zsb2F0KSB7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSh+KDEgPDwgMzEpKSwgY29uc3RhbnQpOworICAg
ICAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFw
cGVuZChBbmRGbG9hdCwgdmFsdWUsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKH4oMSA8PCA2MykpLCBjb25zdGFudCk7CisgICAgICAgIGFw
cGVuZChNb3ZlNjRUb0RvdWJsZSwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChB
bmREb3VibGUsIHZhbHVlLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCitQ
YXJ0aWFsUmVzdWx0IEFpcklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QmluT3AoS2luZCBr
aW5kLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9y
bShraW5kLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZ3M6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5k
KGtpbmQsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworCisgICAgLy8gT3AgYSwgYgorICAgIC8vIG1l
YW5zCisgICAgLy8gYiA9IGIgT3AgYQorICAgIC8vIE9PUFM6IHZlcmlmeQorICAgIGFwcGVuZChN
b3ZlRG91YmxlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKGtpbmQsIHJocywgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyQ2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFw
cGVuZChDZWlsRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChN
dWwzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAs
IGFyZzEpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0TGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJEZW1vdGVGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
Q29udmVydERvdWJsZVRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk1pbj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAg
QmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRo
YW5PckVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0
aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJy
YW5jaEZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJn
MCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90
RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIE9yRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3Nv
cnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZUZsb2F0LCBhcmcw
LCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRmxvYXQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RF
cXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisK
KyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7
CisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5P
ckVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91Ymxl
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsKSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0THQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMk1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1
cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29y
cyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgQW5kRmxvYXQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1
YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwg
TW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRmxv
YXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBh
cmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhsZXNzVGhhbiwgY29udGludWF0aW9u
KTsKKworICAgIGFwcGVuZChsZXNzVGhhbiwgTW92ZUZsb2F0LCBhcmcxLCByZXN1bHQpOworICAg
IGFwcGVuZChsZXNzVGhhbiwgSnVtcCk7CisgICAgbGVzc1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29u
dGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBh
ZGRGbG9hdGluZ1BvaW50QmluT3AoTXVsRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRC
aW5PcChEaXZGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkNsej4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczMyLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGMzJDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1z
IGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBU
bXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2YWx1ZSA9
IGdwcigpOworCisgICAgLy8gT09QUzogQ2FuIGZpdCBpbiBJbW0vQml0SW1tIGluc3RlYWQgb2Yg
QmlnSW1tPworICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcxLCB0ZW1wMSk7CisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5k
MzIsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJn
MCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmKSwgdmFs
dWUpOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBl
bmQoT3IzMiwgc2lnbiwgdmFsdWUsIHZhbHVlKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwg
dmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFVJMzI+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcCA9IHRtcCgpOworICAgIGFwcGVuZChNb3Zl
MzIsIGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyUmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0QW5kPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFuZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJOZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRH
dD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3FydD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0RmxvYXQsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NEd0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcXo+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDY0LCBBcmc6OnJlc0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjREaXY+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiB3aGF0
IGFib3V0IGNoaWxsLW5lc3MgaGVyZS4uLj8KKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJp
bk9wKERpdkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFkZD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChBZGRGbG9hdCwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0T3I+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3I2NCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJMZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NENsej4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczY0LCBhcmcw
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWc+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBhcHBlbmQoTmVnYXRlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChBbmQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRV
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJvdHI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUm90YXRlUmlnaHQ2NCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NEFicz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFi
c0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBj
b2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9
IGdwcigpOworICAgIFRtcCB2YWx1ZSA9IGdwcigpOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVU
bzY0LCBhcmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAw
MDAwMDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQ2NCwgdGVtcDEsIHNpZ24sIHNpZ24p
OworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmZmZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBl
bmQoQW5kNjQsIHRlbXAxLCB2YWx1ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9yNjQsIHNpZ24s
IHZhbHVlLCB2YWx1ZSk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCB2YWx1ZSwgcmVzdWx0
KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZFNoaWZ0KFJvdGF0ZUxlZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkx0PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTMyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRG91YmxlLCBhcmcw
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyTGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMkdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJTaHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0
dXJuIGFkZFNoaWZ0KFVyc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTMyPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSB0bXAoKTsKKyAgICBh
cHBlbmQoTW92ZTMyLCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9GbG9h
dCwgdGVtcCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyUz4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlm
dChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkY2NENlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoQ2VpbERvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9y
RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGNjRGbG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChGbG9vckRvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KFhvcjMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEFicyhBYnNGbG9hdCwgYXJnMCwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1p
bj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisg
ICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRl
clRoYW5PckVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ss
IEJyYW5jaERvdWJsZSwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCks
IGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWws
IG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3Vj
Y2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91Ymxl
LCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7Cisg
ICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1
YWwpOworCisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwg
cmVzdWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVh
dGVyVGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxG
bG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViNjQsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJSZWludGVycHJldEYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQWRkMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFN1
Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IGFwcGVuZChTdWJEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk9y
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKE9yMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0VT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjY0Q29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoQ29udmVydEludDY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFhvcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChYb3I2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
R2VVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRNdWw+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTXVs
NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlN1Yj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTdWJGbG9h
dCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UHJvbW90ZUYzMj4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RmxvYXRUb0RvdWJsZSwg
YXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZERvdWJsZSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UmVpbnRlcnByZXRJNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29y
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEZsb29yRmxvYXQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRmxvYXQsIGFyZzAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMkVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAs
IGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlaW50ZXJwcmV0RjY0PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyVT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0NjQs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGNjRTcXJ0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7Cisg
ICAgYXBwZW5kKFNxcnREb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNobD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQ2
NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpyZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMldyYXBJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoTW92ZTMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RsPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZUxlZnQz
MiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXR1cm4gYWRkU2hpZnQoUm90YXRlUmlnaHQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0
VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRTSTMyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCBhcmcwLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0TmVnPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE5l
Z2F0ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWF4PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1
cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBl
bmQoaXNFcXVhbCwgQW5kRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChp
c0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7
CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAg
YXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hEb3VibGUsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vz
c29ycyhsZXNzVGhhbiwgY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChsZXNzVGhhbiwgTW92
ZURvdWJsZSwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAg
IGxlc3NUaGFuLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRC
bG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMZVU+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0QWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFkZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNt
QjNJUkdlbmVyYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRp
b24gPSBudWxscHRyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE1LDcgKzMxNSw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0
SW4KICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVn
aXN0ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7Ci0gICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7IC8v
IE9PUFM6IFByb2JhYmx5IHNob3VsZCBiZSB1c2luZyBhcmchCiAgICAgR1BSUmVnIHdhc21Db250
ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKICAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCks
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOwpAQCAtNDU5LDkgKzQ1OSw5IEBAIHZvaWQgQjNJUkdl
bmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2wKIAogICAgIGlmIChyZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CiAgICAgICAgIC8vIFRo
ZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBp
dHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgotICAgICAgICBWYWx1ZSogcG9pbnRlclRvQWN0dWFs
U3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgp
KSk7Ci0gICAgICAgIFZhbHVlKiBhY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCBhY3R1YWxTdGFj
a0xpbWl0LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAgICBWYWx1ZSogcG9pbnRlclRvQWN0dWFs
U3RhY2tMaW1pdCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJf
dD4oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSk7CisgICAg
ICAgIFZhbHVlKiBhY3R1YWxTdGFja0xpbWl0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgcG9pbnRlclRvQWN0dWFs
U3RhY2tMaW1pdCk7CisgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgU3RvcmUsIG9yaWdpbigpLCBhY3R1YWxTdGFja0xpbWl0LCBpbnN0YW5jZVZhbHVlKCksIHNh
ZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwog
ICAgIH0KIAogICAgIGlmICghIW1lbW9yeSkgewpAQCAtMTgzOCw3ICsxODM4LDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydQogICAgICAgICBwYXRjaHBvaW50LT5u
dW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIH0KICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKLSAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7IC8vIE9PUFM6IFRoaXMgbG9va3Mgc3VwZXIgd3JvbmcgZ2l2ZW4g
d2UgZG9uJ3Qgc2F5IHdlIGNsb2JiZXIgdGhpcyEKICAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJ
bnZhbGlkRlBSUmVnOwogICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOwog
ICAgICAgICBpZiAoaXNYODYoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShyZXZpc2lvbiAyNDA0NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwzNiBAQCBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRp
b24mIHdhc21DYWxsaW5nCiAgICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsK
IH0KIAorY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9u
QWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50
aW9uQWlyPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNl
KHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9yPFJlZz4o
KSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKK2NvbnN0IFdhc21DYWxsaW5n
Q29udmVudGlvbkFpciYgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPFdhc21DYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGljV2FzbUNh
bGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNXYXNtQ2Fs
bGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1dhc21DYWxsaW5n
Q29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgVmVjdG9yPFJlZz4gZ3ByQXJndW1lbnRS
ZWdpc3RlcnMoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJz
OyArK2kpCisgICAgICAgICAgICBncHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEdQUkluZm86OnRv
QXJndW1lbnRSZWdpc3RlcihpKTsKKworICAgICAgICBWZWN0b3I8UmVnPiBmcHJBcmd1bWVudFJl
Z2lzdGVycyhGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7
ICsraSkKKyAgICAgICAgICAgIGZwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gRlBSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlv
bi5jb25zdHJ1Y3QoV1RGTW92ZShncHJBcmd1bWVudFJlZ2lzdGVycyksIFdURk1vdmUoZnByQXJn
dW1lbnRSZWdpc3RlcnMpLCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAg
ICB9KTsKKworICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyNyArNDQsMjcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1bnNpZ25lZCAo
Kk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5cGUpOwordHlw
ZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQpOwogCiB0
ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KIGNs
YXNzIENhbGxpbmdDb252ZW50aW9uIHsKIHB1YmxpYzoKICAgICBDYWxsaW5nQ29udmVudGlvbihW
ZWN0b3I8UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0ZXJTZXQm
JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotICAgICAgICA6IG1fZ3ByQXJncyhncHJBcmdzKQotICAg
ICAgICAsIG1fZnByQXJncyhmcHJBcmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cyhjYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZNb3ZlKGdwckFy
Z3MpKQorICAgICAgICAsIG1fZnByQXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAgICAgICAsIG1f
Y2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMpKQogICAgIHsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJndW1lbnRJbXBs
KFZlY3RvcjxSZWc+IHJlZ0FyZ3MsIEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgY291bnQsIHNpemVf
dCYgc3RhY2tPZmZzZXQpIGNvbnN0CisgICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJndW1lbnRJ
bXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0
YWNrT2Zmc2V0KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGNvdW50IDwgcmVnQXJncy5zaXpl
KCkpCiAgICAgICAgICAgICByZXR1cm4gQjM6OlZhbHVlUmVwOjpyZWcocmVnQXJnc1tjb3VudCsr
XSk7CiAKICAgICAgICAgY291bnQrKzsKICAgICAgICAgQjM6OlZhbHVlUmVwIHJlc3VsdCA9IEIz
OjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zm
c2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0LCB0eXBlKTsKKyAgICAgICAgc3RhY2tPZmZz
ZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIApAQCAtNzMsMTAgKzczLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAodHlw
ZSkgewogICAgICAgICBjYXNlIEIzOjpJbnQzMjoKICAgICAgICAgY2FzZSBCMzo6SW50NjQ6Ci0g
ICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCB0eXBlLCBn
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFs
bEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwog
ICAgICAgICBjYXNlIEIzOjpGbG9hdDoKICAgICAgICAgY2FzZSBCMzo6RG91YmxlOgotICAgICAg
ICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlwZSwgZnBBcmd1
bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1
bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAg
ICAgY2FzZSBCMzo6Vm9pZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xODks
MTkgKzE4OSwxNDEgQEAgcHVibGljOgogICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVyU2F2
ZVJlZ2lzdGVyczsKIH07CiAKLWlubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0KHVuc2lnbmVk
IGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlKQordGVtcGxhdGU8dW5zaWduZWQgaGVhZGVyU2l6ZSwg
TmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CitjbGFzcyBDYWxsaW5nQ29udmVudGlvbkFpciB7Citw
dWJsaWM6CisgICAgQ2FsbGluZ0NvbnZlbnRpb25BaXIoVmVjdG9yPFJlZz4mJiBncHJBcmdzLCBW
ZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lzdGVycykK
KyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBtX2ZwckFy
Z3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoV1RG
TW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHNj
cmF0Y2ggPSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICBzY3JhdGNoLmV4Y2x1ZGUo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgc2NyYXRjaC5l
eGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgICAg
ICBmb3IgKFJlZyByZWcgOiBtX2dwckFyZ3MpCisgICAgICAgICAgICBzY3JhdGNoLmNsZWFyKHJl
Zyk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IHNjcmF0Y2gpCisgICAgICAgICAgICBtX3NjcmF0
Y2hHUFJzLmFwcGVuZChyZWcpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NjcmF0Y2hHUFJz
LnNpemUoKSA+PSAzKTsKKyAgICB9CisKKyAgICBHUFJSZWcgcHJvbG9ndWVTY3JhdGNoKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBtX3NjcmF0Y2hHUFJzW2ldLmdwcigpOyB9CisKK3ByaXZhdGU6
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0YWNrRnVuYz4KKyAg
ICB2b2lkIG1hcnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBz
aXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdGdW5jJiByZWdGdW5j
LCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChj
b3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICByZWdGdW5jKHJlZ0FyZ3NbY291
bnQrK10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY291bnQr
KzsKKyAgICAgICAgc3RhY2tGdW5jKHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgc3RhY2tPZmZzZXQg
PSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBSZWdGdW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAgdm9pZCBtYXJzaGFsbEFyZ3Vt
ZW50KFR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291bnQsIHNpemVfdCYgZnBBcmd1bWVu
dENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdGdW5jJiByZWdGdW5jLCBjb25z
dCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6Cisg
ICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIHR5cGUsIGdwQXJndW1l
bnRDb3VudCwgc3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVuYyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0Ogor
ICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCB0eXBlLCBmcEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCByZWdGdW5jLCBzdGFja0Z1bmMpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGljIHVuc2ln
bmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGxvYWRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgewor
ICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJn
dW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRlclNpemU7
CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQoc2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsCisg
ICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0
b3IoQjM6OkFpcjo6VG1wKHJlZyksIGkpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgWyZdIChzaXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVu
Y3RvcihCMzo6QWlyOjpBcmc6OmFkZHIoQjM6OkFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwgc3RhY2tPZmZzZXQpLCBpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3Rv
ciBzZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0dXBDYWxsKEIzOjpBaXI6OkNvZGUmIGNv
ZGUsIFR5cGUgcmV0dXJuVHlwZSwgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCwgY29u
c3QgVmVjdG9yPEIzOjpBaXI6OlRtcD4mIGFyZ3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNv
bnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAg
c2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9
IGhlYWRlclNpemUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgZm9yIChh
dXRvIHRtcCA6IGFyZ3MpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQodG1wLmlzR1Ao
KSA/IFR5cGU6Okk2NCA6IFR5cGU6OkY2NCwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291
bnQsIHN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAg
ICAgICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpyZWcocmVnKSk7CisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09mZnNldCkg
eworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpzdGFja0Fy
Z3VtZW50KHN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKwor
ICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisKKyAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2
b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKworICAgICAgICBzd2l0Y2ggKHJldHVyblR5
cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAg
IHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJlZyhGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
OjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+
cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNv
bnN0IFZlY3RvcjxSZWc+IG1fZ3ByQXJnczsKKyAgICBjb25zdCBWZWN0b3I8UmVnPiBtX2ZwckFy
Z3M7CisgICAgVmVjdG9yPFJlZz4gbV9zY3JhdGNoR1BSczsKKyAgICBjb25zdCBSZWdpc3RlclNl
dCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJT
YXZlUmVnaXN0ZXJzOworfTsKKworaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWdu
ZWQgY3VycmVudE9mZnNldCkKIHsKICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNpemVvZihS
ZWdpc3Rlcik7CiB9CiAKIGNvbnN0ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0gRXhlY1N0
YXRlOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwotdHlwZWRlZiBD
YWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0NDYWxsaW5n
Q29udmVudGlvbjsKLQotdHlwZWRlZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb247CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uID0gQ2FsbGluZ0NvbnZlbnRp
b248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2FsbGluZ0NvbnZl
bnRpb24gPSBKU0NDYWxsaW5nQ29udmVudGlvbjsKIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9u
JiBqc2NDYWxsaW5nQ29udmVudGlvbigpOwogY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXIg
PSBDYWxsaW5nQ29udmVudGlvbkFpcjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3Vz
aW5nIFdhc21DYWxsaW5nQ29udmVudGlvbkFpciA9IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyOwor
Y29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9uQWlyKCk7
Citjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29udmVudGlvbkFp
cigpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360400</attachid>
            <date>2019-01-28 16:49:13 -0800</date>
            <delta_ts>2019-01-28 18:52:08 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>157913</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJl
dmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICBS
ZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKICAg
ICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0JikgZmluYWw7CiAKLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJ
bXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gTm90ZSB0aGF0
IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1w
SW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRo
YXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKICAgICAgICAgdW5zaWduZWQgbnVtSWdub3Jl
ZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDExIEBAIENvZGU6On5Db2RlKCkKIHsKIH0KIAordm9pZCBDb2RlOjplbWl0RGVmYXVsdFBy
b2xvZ3VlKENDYWxsSGVscGVycyYgaml0KQoreworICAgIGRlZmF1bHRQcm9sb2d1ZUdlbmVyYXRv
cihqaXQsICp0aGlzKTsKK30KKwogdm9pZCBDb2RlOjpzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKEJh
bmsgYmFuaywgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MpCiB7CiAgICAgcmVnc0luUHJpb3JpdHlP
cmRlckltcGwoYmFuaykgPSByZWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNiArMzM1LDggQEAgcHVibGljOgog
ICAgIFJlZ2lzdGVyU2V0IHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVk
UmVnczsgfQogICAgIAogICAgIFdlYWtSYW5kb20mIHdlYWtSYW5kb20oKSB7IHJldHVybiBtX3dl
YWtSYW5kb207IH0KKworICAgIHZvaWQgZW1pdERlZmF1bHRQcm9sb2d1ZShDQ2FsbEhlbHBlcnMm
KTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIDo6SlNDOjpCMzo6UHJvY2VkdXJl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIENvZGU7CiAKIGNsYXNzIFRtcCB7CiBwdWJsaWM6
Ci0gICAgVG1wKCkKKyAgICBjb25zdGV4cHIgVG1wKCkKICAgICAgICAgOiBtX3ZhbHVlKDApCiAg
ICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzMwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtQWlySVJHZW5lcmF0b3IuaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJB
aXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVkZSAiQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5o
IgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFNwZWNpYWwuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRl
ICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMu
aCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlv
blBhcnNlci5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21NZW1v
cnkuaCIKKyNpbmNsdWRlICJXYXNtT01HUGxhbi5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVPcmln
aW4uaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21U
aHVua3MuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20geworCit1c2luZyBuYW1lc3BhY2UgQjM6OkFpcjsKKworc3RydWN0IENvbnN0cmFpbmVk
VG1wIHsKKyAgICBDb25zdHJhaW5lZFRtcChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwID0gQjM6
OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpCisgICAgICAgIDogdG1wKHRtcCkKKyAgICAgICAgLCBy
ZXAocmVwKQorICAgIHsgfQorCisgICAgVG1wIHRtcDsKKyAgICBCMzo6VmFsdWVSZXAgcmVwOwor
fTsKKworY2xhc3MgQWlySVJHZW5lcmF0b3IgeworcHVibGljOgorICAgIHN0cnVjdCBDb250cm9s
RGF0YSB7CisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBUeXBlIHJldHVy
blR5cGUsIFRtcCByZXN1bHRUbXAsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQorICAgICAgICAgICAgOiBibG9j
a1R5cGUodHlwZSkKKyAgICAgICAgICAgICwgY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKKyAg
ICAgICAgICAgICwgc3BlY2lhbChzcGVjaWFsKQorICAgICAgICAgICAgLCByZXR1cm5UeXBlKHJl
dHVyblR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOyAv
LyBPT1BTCisgICAgICAgICAgICBpZiAocmVzdWx0VG1wKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChyZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNT
RVJUKHJldHVyblR5cGUgPT0gVHlwZTo6Vm9pZCk7CisgICAgICAgIH0KKworICAgICAgICBDb250
cm9sRGF0YSgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiSWY6ICAgICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBCbG9ja1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxv
Y2s6ICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9j
a1R5cGU6Okxvb3A6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJMb29wOiAgICAgIik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2
ZWw6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbnRp
bnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7CisgICAgICAgICAgICBp
ZiAoc3BlY2lhbCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoKnNwZWNpYWwpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTm9uZSIpOworICAgICAgICB9
CisKKyAgICAgICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBibG9ja1R5cGU7IH0K
KworICAgICAgICBUeXBlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5cGU7IH0K
KworICAgICAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiByZXN1
bHQuc2l6ZSgpOyB9CisKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2go
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAgIHJldHVybiBjb250
aW51YXRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRJZlRvQmxvY2soKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOwor
ICAgICAgICAgICAgYmxvY2tUeXBlID0gQmxvY2tUeXBlOjpCbG9jazsKKyAgICAgICAgICAgIHNw
ZWNpYWwgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogV2hhdCBpcyB0
aGlzPworICAgICAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPFRtcCwgMT47IC8vIFZhbHVl
IG11c3QgYmUgYSBQaGkKKworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdEZvckJyYW5jaCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29w
KQorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRMaXN0KCk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xh
c3MgQWlySVJHZW5lcmF0b3I7CisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGU7CisgICAgICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsK
KyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHQ7CisgICAgICAgIFR5cGUgcmV0dXJuVHlwZTsKKyAg
ICB9OworCisgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUbXA7CisgICAgdXNpbmcgQ29udHJv
bFR5cGUgPSBDb250cm9sRGF0YTsKKyAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxF
eHByZXNzaW9uVHlwZSwgMT47CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9IENvbnRyb2xEYXRhOjpS
ZXN1bHRMaXN0OworICAgIHVzaW5nIENvbnRyb2xFbnRyeSA9IEZ1bmN0aW9uUGFyc2VyPEFpcklS
R2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OworCisgICAgc3RhdGljIGNvbnN0IEV4cHJlc3Npb25U
eXBlIGVtcHR5RXhwcmVzc2lvbjsKKworICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmluZzsKKyAg
ICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBlY3RlZDxFcnJvclR5cGU+OworICAgIHVz
aW5nIFJlc3VsdCA9IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
RXJyb3JUeXBlPjsKKyAgICB1c2luZyBQYXJ0aWFsUmVzdWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJy
b3JUeXBlPjsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lO
TElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJn
cykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAv
LyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNlci5oLgorICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGlu
ZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CisgICAgfQorCisjZGVmaW5lIFdBU01fQ09N
UElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZ
KGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhaWwo
X19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworICAgIEFpcklS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVy
bmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2Rl
LCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50Kiwg
VGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKTsKKworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJf
dCk7CisgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOworCisg
ICAgLy8gTG9jYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9j
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBHbG9iYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAgIC8vIE1lbW9yeQor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zm
c2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9w
VHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQz
Ml90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jv
d01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVudE1lbW9yeShFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIEJhc2ljIG9wZXJhdG9ycworICAgIHRlbXBs
YXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIHRlbXBsYXRl
PE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHBy
ZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU2VsZWN0KEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lv
blR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBDb250cm9sIGZs
b3cKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVG9wTGV2ZWwoVHlwZSBz
aWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCbG9jayhU
eXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExv
b3AoVHlwZSBzaWduYXR1cmUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xE
YXRhJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVs
c2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7
CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3Qg
Q29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBF
eHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1
ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRz
LCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHBy
ZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJs
b2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29u
dHJvbEVudHJ5Jik7CisKKyAgICAvLyBDYWxscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJl
YWNoYWJsZSgpOworCisgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChCMzo6QWlyOjpPcGNvZGUs
IEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRlZ2VyU3ViKEIzOjpBaXI6Ok9w
Y29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQb2ludEFicyhCMzo6
QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRCaW5PcChCMzo6QWlyOjpPcGNv
ZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKworICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYg
Y29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsKKyAg
ICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIHBhcnNlcikg
eyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQmFzaWNCbG9jayogYmxvY2ssIEtpbmQg
a2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgLy8gT09QUzog
QWRkIG9yaWdpbgorICAgICAgICBibG9jay0+YXBwZW5kKGtpbmQsIG51bGxwdHIsIHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChLaW5kIGtpbmQsIEFyZ3VtZW50
cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywg
a2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisg
ICAgVG1wIHRtcChCMzo6QmFuayBiYW5rKSB7IHJldHVybiBtX2NvZGUubmV3VG1wKGJhbmspOyB9
CisgICAgVG1wIGdwcigpIHsgcmV0dXJuIHRtcChCMzo6R1ApOyB9CisgICAgVG1wIGZwcigpIHsg
cmV0dXJuIHRtcChCMzo6RlApOyB9CisgICAgVG1wIHRtcEZvclR5cGUoVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAg
ICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAg
Y2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0
dXJuIGZwcigpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRtcCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogYWRkUGF0Y2hwb2lu
dChCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGQ8QjM6OlBh
dGNocG9pbnRWYWx1ZT4odHlwZSwgQjM6Ok9yaWdpbigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEIzOjpQYXRjaHBv
aW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAg
ICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIHJlc3VsdCwgc3RkOjpm
b3J3YXJkPEFyZ3M+KHRoZUFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxv
Y2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFy
Z3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgcmVz
dWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIHNpemVvZi4uLihBcmdzKT46OmZyb20odGhlQXJn
cy4uLikpOworICAgIH0KKworICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFz
aWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQpCisgICAgewor
ICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgcmVzdWx0LCBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxzaXplX3QgaW5saW5l
U2l6ZT4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRU
bXAsIGlubGluZVNpemU+JiYgYXJncykKKyAgICB7CisgICAgICAgIGlmICghbV9wYXRjaHBvaW50
U3BlY2lhbCkKKyAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxC
Mzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVl
PEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOworCisgICAgICAgIEluc3QgaW5zdChQYXRjaCwg
cGF0Y2gsIEFyZzo6c3BlY2lhbChtX3BhdGNocG9pbnRTcGVjaWFsKSk7CisgICAgICAgIEluc3Qg
cmVzdWx0TW92OworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBBU1NFUlQocGF0
Y2gtPnR5cGUoKSAhPSBCMzo6Vm9pZCk7CisgICAgICAgICAgICBzd2l0Y2ggKHBhdGNoLT5yZXN1
bHRDb25zdHJhaW50LmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJl
Z2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKHBhdGNoLT5yZXN1
bHRDb25zdHJhaW50LnJlZygpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0TW92ID0gSW5zdChy
ZXN1bHQuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChwYXRjaC0+cmVz
dWx0Q29uc3RyYWludC5yZWcoKSksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAg
ICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NF
UlQocGF0Y2gtPnR5cGUoKSA9PSBCMzo6Vm9pZCk7CisgICAgICAgIAorICAgICAgICBmb3IgKENv
bnN0cmFpbmVkVG1wJiB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBVZ2gsIHRo
aXMgaXMgc3VwZXIgY3JhcHB5IHRvIGp1c3QgdXNlIG51bGxwdHIgZm9yIEIzOjpWYWx1ZSogaGVy
ZS4KKyAgICAgICAgICAgIC8vIEkgdGhpbmsgdGhpcyB3aWxsIGp1c3Qgd29yaywgYnV0IG91ciBh
bHRlcm5hdGl2ZSBvcHRpb25zIGlzIHRvIGFic3RyYWN0CisgICAgICAgICAgICAvLyBvciByZWlu
dmVudCBwYXJ0IG9mIFBhdGNocG9pbnRTcGVjaWFsLgorICAgICAgICAgICAgcGF0Y2gtPmFwcGVu
ZChudWxscHRyLCB0bXAucmVwKTsKKyAgICAgICAgICAgIHN3aXRjaCAodG1wLnJlcC5raW5kKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAudG1wKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAg
ICAgICAvLyBPT1BTOiBJIHRoaW5rIHdlIHdhbnQgdHlwZSBoZXJlIHRvIGRpc3Rpbmd1aXNoIGkz
Mi9pNjMgYW5kIGYzMi9mNjQKKyAgICAgICAgICAgICAgICBhcHBlbmQoYmFzaWNCbG9jaywgdG1w
LnRtcC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgdG1wLnRtcCwgdG1wLnJlcC5yZWcoKSk7
CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAodG1wLnJlcC5yZWcoKSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlN0
YWNrQXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBJIHRoaW5rIHdlIHdhbnQg
dHlwZSBoZXJlIHRvIGRpc3Rpbmd1aXNoIGkzMi9pNjMgYW5kIGYzMi9mNjQKKyAgICAgICAgICAg
ICAgICBhdXRvIGFyZyA9IEFyZzo6Y2FsbEFyZyh0bXAucmVwLm9mZnNldEZyb21TUCgpKTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmQoYmFzaWNCbG9jaywgdG1wLnRtcC5pc0dQKCkgPyBNb3ZlIDog
TW92ZURvdWJsZSwgdG1wLnRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF0Y2gtPnJlc3Vs
dENvbnN0cmFpbnQuaXNSZWcoKSkKKyAgICAgICAgICAgIHBhdGNoLT5sYXRlQ2xvYmJlcmVkKCku
Y2xlYXIocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBwYXRjaC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZChncHIoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNo
LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKGZwcigpKTsKKworICAgICAgICBiYXNpY0Jsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7
CisgICAgICAgIGlmIChyZXN1bHRNb3YpCisgICAgICAgICAgICBiYXNpY0Jsb2NrLT5hcHBlbmQo
V1RGTW92ZShyZXN1bHRNb3YpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnJh
bmNoLCB0eXBlbmFtZSBHZW5lcmF0b3I+CisgICAgdm9pZCBlbWl0Q2hlY2soY29uc3QgQnJhbmNo
JiBlbWl0QnJhbmNoLCBjb25zdCBHZW5lcmF0b3ImIGdlbmVyYXRvcikKKyAgICB7CisgICAgICAg
IC8vIFdlIGZhaWwgYWxvbmcgdGhlICJ0cnV0aHkiIGVkZ2Ugb2YgJ2JyYW5jaCcKKworICAgICAg
ICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAg
QmFzaWNCbG9jayogZmFpbGVkID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAgICAg
ICBlbWl0QnJhbmNoKCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGZh
aWxlZCwgY29udGludWF0aW9uKTsKKworICAgICAgICBhdXRvKiBmYWlsZWRQYXRjaHBvaW50ID0g
YWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIGZhaWxlZFBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihnZW5lcmF0b3IpOworICAgICAgICBlbWl0UGF0Y2hwb2ludChmYWlsZWQsIGZhaWxl
ZFBhdGNocG9pbnQsIFRtcCgpKTsKKyAgICAgICAgYXBwZW5kKGZhaWxlZCwgT29wcyk7CisKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0Q0NhbGwo
RnVuYyBmdW5jLCBUbXAgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBlbWl0
Q0NhbGwobV9jdXJyZW50QmxvY2ssIGZ1bmMsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKKyAgICB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIC4u
LkFyZ3M+CisgICAgdm9pZCBlbWl0Q0NhbGwoQmFzaWNCbG9jayogYmxvY2ssIEZ1bmMgZnVuYywg
VG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgSW5zdCBpbnN0KEND
YWxsLCBudWxscHRyKTsKKworICAgICAgICBUbXAgY2FsbGVlID0gZ3ByKCk7CisgICAgICAgIGFw
cGVuZChNb3ZlLCBBcmc6OmltbVB0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMsIEIzQ0Nh
bGxQdHJUYWcpKSwgY2FsbGVlKTsKKyAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChjYWxsZWUpOwor
CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3Vs
dCk7CisKKyAgICAgICAgZm9yIChUbXAgdG1wIDogVmVjdG9yPFRtcCwgc2l6ZW9mLi4uKEFyZ3Mp
Pjo6ZnJvbSh0aGVBcmdzLi4uKSkKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKTsK
KworICAgICAgICBibG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgIH0KKworICAgIHN0
YXRpYyBCMzo6QWlyOjpPcGNvZGUgbW92ZU9wRm9yVmFsdWVUeXBlKFR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlMzI7CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAg
ICAgcmV0dXJuIE1vdmU7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgcmV0
dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICByZXR1
cm4gTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRUaHJv
d0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKKworICAgIHZvaWQgZW1p
dFRpZXJVcENoZWNrKHVpbnQzMl90IGRlY3JlbWVudENvdW50LCBCMzo6T3JpZ2luKTsKKworICAg
IEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOworICAgIEV4cHJl
c3Npb25UeXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
dWludDMyX3Qgb2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0
KTsKKworICAgIHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhw
cmVzc2lvblR5cGUmIHNvdXJjZSk7CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsK
KworICAgIHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUsIEV4cHJlc3Npb25U
eXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKworICAgIGludDMyX3QgV0FSTl9VTlVT
RURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50MzJf
dCk7CisKKyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sqLCBU
bXApOworICAgIGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVzIH07
CisgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBUbXAgaW5zdGFuY2UsIEJhc2ljQmxv
Y2sqKTsKKworICAgIEIzOjpPcmlnaW4gb3JpZ2luKCk7IC8vIE9PUFM6IFdlIG5lZWQgdG8gbWFr
ZSBhbiBBaXI6Ok9yaWdpbiBzaW5jZSB3ZSdyZSBub3QgZ2VuZXJhdGluZyBmcm9tIEIzIGNvZGUu
CisKKyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0
ciB9OworICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgY29uc3QgTWVt
b3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIGNvbnN0
IENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9uTW9kZTo6QkJR
TW9kZSB9OworICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07
CisgICAgY29uc3QgVGllclVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9OworCisgICAgQjM6
OlByb2NlZHVyZSYgbV9wcm9jOworICAgIENvZGUmIG1fY29kZTsKKyAgICBCYXNpY0Jsb2NrKiBt
X2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7
IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFRtcCwgVHlwZT4+IG1fbG9jYWxzOwor
ICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3Nl
IGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBHUFJSZWcgbV9tZW1vcnlC
YXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJ
bnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CisKKyAgICBU
bXAgbV9pbnN0YW5jZVZhbHVlOyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0byBl
bnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCisgICAg
Ym9vbCBtX3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBUbXAgaW5zdGFuY2VWYWx1
ZSgpCisgICAgeworICAgICAgICBtX3VzZXNJbnN0YW5jZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIG1faW5zdGFuY2VWYWx1ZTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBtX21heE51bUpT
Q2FsbEFyZ3VtZW50cyB7IDAgfTsKKworICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCogbV9wYXRj
aHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKK307CisKK2NvbnN0IFRtcCBBaXJJUkdlbmVyYXRv
cjo6ZW1wdHlFeHByZXNzaW9uID0gVG1wKCk7CisKKy8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJB
c3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBz
aWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCitpbnQzMl90IEFpcklSR2VuZXJhdG9yOjpmaXh1
cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnNldCkK
K3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAg
IFRtcCBwcmV2aW91c1B0ciA9IHB0cjsKKyAgICAgICAgcHRyID0gZ3ByKCk7CisgICAgICAgIFRt
cCBjb25zdGFudCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zm
c2V0KSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNvbnN0YW50LCBwcmV2aW91
c1B0ciwgcHRyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBvZmZzZXQ7
Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJh
c2ljQmxvY2sqIGJsb2NrLCBUbXAgaW5zdGFuY2UpCit7CisgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkgeworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6
Vm9pZCk7CisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5j
ZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOwor
ICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRt
cCgpLCBpbnN0YW5jZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTog
QmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdp
c3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRo
ZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1l
bnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAg
IGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBCMzo6RWZm
ZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBlZmZlY3RzLndyaXRlc1Bp
bm5lZCA9IHRydWU7CisgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwor
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOworICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOworICAgIEdQUlJl
ZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgeworICAgICAgICBqaXQubW92ZShw
YXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisgICAgfSk7CisgICAgZW1p
dFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7Cit9CisKK0Fp
cklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlv
biwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKKyAgICA6
IG1faW5mbyhpbmZvKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2NvbXBpbGF0aW9uTW9k
ZShjb21waWxhdGlvbk1vZGUpCisgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkK
KyAgICAsIG1fdGllclVwKHRpZXJVcCkKKyAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCisgICAgLCBt
X2NvZGUobV9wcm9jLmNvZGUoKSkKKyAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMpCit7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX2NvZGUuYWRk
QmxvY2soKTsKKyAgICBtX3Jvb3RCbG9jayA9IG1fY3VycmVudEJsb2NrOworCisgICAgLy8gRklY
TUUgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGluIHJlZ2lzdGVycyBoZXJlIGlmIHRoZXJlJ3Mg
bm8gbWVtb3J5LiBJdCBtYWtlcyB3YXNtIC0+IHdhc20gdGh1bmtzIHNpbXBsZXIgZm9yIG5vdy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjYyMworICAgIGNvbnN0
IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCk7CisKKyAgICBtX21lbW9yeUJhc2VHUFIgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVy
OworICAgIG1fY29kZS5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOworCisgICAgbV93YXNt
Q29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRl
cjsKKyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgbV9jb2RlLnBpblJl
Z2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisKKyAgICBpZiAobW9kZSAhPSBNZW1v
cnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdp
c3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IHBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7CisgICAgICAgIGZvciAoY29uc3QgUGlu
bmVkU2l6ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVycykK
KyAgICAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7Cisg
ICAgfQorCisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICAgICAgVGh1bmtzOjpzaW5n
bGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKKworICAg
IGlmIChpbmZvLm1lbW9yeSkgeworICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIpIHsKKyAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVk
R1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBJbnZhbGlkR1BSUmVnID09IHBpbm5lZEdQUik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9y
eUFjY2Vzcyk7CisgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAg
ICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAvLyBNb3N0
IG1lbW9yeSBhY2Nlc3NlcyBpbiBzaWduYWxpbmcgbW9kZSBkb24ndCBkbyBhbiBleHBsaWNpdAor
ICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2UgdGhleSBjYW4gcmVseSBvbiBm
YXVsdCBoYW5kbGluZyB0byBkZXRlY3QKKyAgICAgICAgICAgIC8vIG91dC1vZi1ib3VuZHMgYWNj
ZXNzZXMuIEZhdWx0U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVkcyB0aGUKKyAgICAgICAg
ICAgIC8vIHRodW5rIHRvIGV4aXN0IHNvIHRoYXQgaXQgY2FuIGp1bXAgdG8gdGhhdCB0aHVuay4K
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93
RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQorICAgICAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY29kZS5z
ZXROdW1FbnRyeXBvaW50cygxKTsKKworICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250
ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNj
cmF0Y2goMikgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisKKyAgICBSZWY8QjM6OkFpcjo6
UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxC
Mzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgY29kZS5lbWl0RGVmYXVsdFByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICAgICAgICAg
IGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW2NvbXBpbGF0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY2Fs
bGVlR1BSLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgaml0LmVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAg
ICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3
YXNtRnJhbWVTaXplID0gbV9jb2RlLmZyYW1lU2l6ZSgpOworICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgbWluaW11bVBhcmVudENoZWNrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIDEwMjQpOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
ZXh0cmFGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCBzdGQ6Om1heDx1aW50MzJfdD4oCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxv
d3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hlY2tzIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgdGVybWlu
YWwgbm9kZXMgaW4gdGhlIGNhbGwKKyAgICAgICAgICAgICAgICAvLyB0cmVlLCAoZS5nIHRoZXkg
ZG9uJ3QgbWFrZSBhbnkgY2FsbHMpIGFuZCBoYXZlIGEgc21hbGwgZW5vdWdoIGZyYW1lIHNpemUu
IFRoaXMgd29ya3MgYnkKKyAgICAgICAgICAgICAgICAvLyBoYXZpbmcgYW55IHN1Y2ggdGVybWlu
YWwgbm9kZSBoYXZlIGl0cyBwYXJlbnQgY2FsbGVyIGluY2x1ZGUgc29tZSBleHRyYSBzaXplIGlu
IGl0cworICAgICAgICAgICAgICAgIC8vIG93biBjaGVjayBmb3IgaXQuIFRoZSBnb2FsIGhlcmUg
aXMgdHdvZm9sZDoKKyAgICAgICAgICAgICAgICAvLyAxLiBFbWl0IGxlc3MgY29kZS4KKyAgICAg
ICAgICAgICAgICAvLyAyLiBUcnkgdG8gc3BlZWQgdGhpbmdzIHVwIGJ5IHNraXBwaW5nIHN0YWNr
IGNoZWNrcy4KKyAgICAgICAgICAgICAgICBtaW5pbXVtUGFyZW50Q2hlY2tTaXplLAorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBpbiB0aGUg
V2FzbSAtPiBFbWJlZGRlciBjYWxsIElDIHN0dWIuIFNpbmNlIHRoZXNlIHdpbGwKKyAgICAgICAg
ICAgICAgICAvLyBzcGlsbCBhbGwgYXJndW1lbnRzIHRvIHRoZSBzdGFjaywgd2UgZW5zdXJlIHRo
YXQgYSBzdGFjayBjaGVjayBoZXJlIGNvdmVycyB0aGUKKyAgICAgICAgICAgICAgICAvLyBzdGFj
ayB0aGF0IHN1Y2ggYSBzdHViIHdvdWxkIHVzZS4KKyAgICAgICAgICAgICAgICAoQ2hlY2tlZDx1
aW50MzJfdD4obV9tYXhOdW1KU0NhbGxBcmd1bWVudHMpICogc2l6ZW9mKFJlZ2lzdGVyKSArIGpz
Y0NhbGxpbmdDb252ZW50aW9uKCkuaGVhZGVyU2l6ZUluQnl0ZXMoKSkudW5zYWZlR2V0KCkKKyAg
ICAgICAgICAgICkpOworICAgICAgICAgICAgY29uc3QgaW50MzJfdCBjaGVja1NpemUgPSBtX21h
a2VzQ2FsbHMgPyAod2FzbUZyYW1lU2l6ZSArIGV4dHJhRnJhbWVTaXplKS51bnNhZmVHZXQoKSA6
IHdhc21GcmFtZVNpemUudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZs
b3dDaGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVz
ZXJ2ZWRab25lU2l6ZSgpOworICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBt
X21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8
IG5lZWRVbmRlcmZsb3dDaGVjazsKKworICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgbGVhZiBm
dW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXplIGlzIHdp
dGhpbgorICAgICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2FsbGVyIHdv
dWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVjay4KKyAgICAgICAgICAgIGlmIChuZWVkc092
ZXJmbG93Q2hlY2spIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnBy
b2xvZ3VlU2NyYXRjaCgxKTsKKworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0
VExTKCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShj
b250ZXh0SW5zdGFuY2UpOworCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGNvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6ZSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IG92ZXJmbG93OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hl
Y2spKQorICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoMSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKyAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6OkJlbG93LCBzY3JhdGNoMSwgc2NyYXRjaDIpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJm
bG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6
dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMg
bmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0
LgorICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93
U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01h
Y3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRl
eHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJuIGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0
dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVzZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBj
b25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3RzIChwb3RlbnRpYWwgc3RhY2sgY2hlY2sp
IHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJlbW92ZWQuCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9KTsKKworICAgIG1fY29kZS5zZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQo
MCwgV1RGTW92ZShwcm9sb2d1ZUdlbmVyYXRvcikpOworCisgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkgeworICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBncHIoKTsKKyAgICAgICAgLy8g
T09QUzogV291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRoaXMgaWYgd2UgdXNlIGluc3RhbmNlIHZh
bHVlLgorICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNvbnRleHRJbnN0YW5jZSksIG1faW5zdGFu
Y2VWYWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IFRtcChjb250
ZXh0SW5zdGFuY2UpOworCisgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOworICAgIG1fbG9j
YWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBUeXBl
IHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAg
ICAgICBtX2xvY2Fsc1tpXSA9IHsgZ3ByKCksIHR5cGUgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAg
ICAgICBtX2xvY2Fsc1tpXSA9IHsgZnByKCksIHR5cGUgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLmxv
YWRBcmd1bWVudHMoc2lnbmF0dXJlLCBbJl0gKGNvbnN0IEFyZyYgYXJnLCB1bnNpZ25lZCBpKSB7
CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2Ug
VHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgYXJnLCBtX2xvY2Fsc1tpXS5m
aXJzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAg
ICAgICAgICBhcHBlbmQoTW92ZSwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92
ZUZsb2F0LCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBhcmcs
IG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0pOworCisgICAgZW1pdFRpZXJVcENoZWNrKFRpZXJVcENvdW50OjpmdW5jdGlvbkVudHJ5
RGVjcmVtZW50KCksIEIzOjpPcmlnaW4oKSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBUbXAg
aW5zdGFuY2UsIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJlc3RvcmVXYXNtQ29udGV4dElu
c3RhbmNlKGJsb2NrLCBpbnN0YW5jZSk7CisKKyAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGlt
aXQgPT0gUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgeworICAgICAgICAvLyBUaGUgSW5z
dGFuY2UgY2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNh
bm9uaWNhbCBsb2NhdGlvbiBpcy4KKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5
cGUoc3RhdGljX2Nhc3Q8SW5zdGFuY2UqPihudWxscHRyKS0+Y2FjaGVkU3RhY2tMaW1pdCgpKSkg
PT0gc2l6ZW9mKHVpbnQ2NF90KSwgIiIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6
aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGlt
aXQoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlk
QWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2
NCkpOworICAgICAgICBUbXAgdGVtcCA9IGdwcigpOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1v
dmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJU
b0FjdHVhbFN0YWNrTGltaXQoKSksIHRlbXApOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUs
IEFyZzo6YWRkcih0ZW1wKSwgdGVtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgdGVt
cCwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSk7CisgICAgfQorCisgICAgaWYgKCEhbWVtb3J5KSB7CisgICAgICAgIGNvbnN0
IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86Omdl
dCgpOworICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyczsKKyAgICAgICAgY2xvYmJlcnMuc2V0
KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsKKyAgICAgICAgZm9yIChhdXRvIGluZm8g
OiBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzKQorICAgICAgICAgICAgY2xvYmJlcnMuc2V0KGlu
Zm8uc2l6ZVJlZ2lzdGVyKTsKKworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludChCMzo6Vm9pZCk7CisgICAgICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0
czo6bm9uZSgpOworICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAg
IGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJl
cnMpOworCisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcGlubmVkUmVnc10gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1l
bW9yeVBvaW50ZXI7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJl
Z3MtPnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49
IDEpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhl
IGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vi
c2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXpl
UmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tp
XS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChw
YXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOworICAgIH0KK30KKwordm9pZCBBaXJJUkdlbmVy
YXRvcjo6ZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYgaml0LCBFeGNlcHRpb25UeXBl
IHR5cGUpCit7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBhdXRv
IGp1bXBUb0V4Y2VwdGlvblN0dWIgPSBqaXQuanVtcCgpOworCisgICAgaml0LmFkZExpbmtUYXNr
KFtqdW1wVG9FeGNlcHRpb25TdHViXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRXhjZXB0aW9uU3R1YiwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIH0pOworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0
ZXNDaGVja2VkID0gY291bnQ7CisgICAgdG90YWxCeXRlc0NoZWNrZWQgKz0gbV9sb2NhbHMuc2l6
ZSgpOworICAgIHVpbnQzMl90IHRvdGFsQnl0ZXM7CisgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYo
KHRvdGFsQnl0ZXNDaGVja2VkLnNhZmVHZXQodG90YWxCeXRlcykgPT0gQ2hlY2tlZFN0YXRlOjpE
aWRPdmVyZmxvdykgfHwgIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eSh0b3RhbEJ5dGVzKSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgdG90YWxCeXRlcywgIiBsb2NhbHMiKTsKKwor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJ
NjQ6IHsKKyAgICAgICAgICAgIFRtcCBsb2NhbCA9IGdwcigpOworICAgICAgICAgICAgbV9sb2Nh
bHMudW5jaGVja2VkQXBwZW5kKHsgbG9jYWwsIHR5cGUgfSk7CisgICAgICAgICAgICBhcHBlbmQo
WG9yNjQsIGxvY2FsLCBsb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6IHsKKyAgICAgICAg
ICAgIFRtcCBsb2NhbCA9IGZwcigpOworICAgICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBw
ZW5kKHsgbG9jYWwsIHR5cGUgfSk7CisgICAgICAgICAgICBUbXAgdGVtcCA9IGdwcigpOworICAg
ICAgICAgICAgLy8gSUVFRSA3NTQgIjAiIGlzIGp1c3QgaW50MzIvNjQgemVyby4KKyAgICAgICAg
ICAgIGFwcGVuZChYb3I2NCwgdGVtcCwgdGVtcCk7CisgICAgICAgICAgICBhcHBlbmQodHlwZSA9
PSBUeXBlOjpGMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9Eb3VibGUsIHRlbXAsIGxvY2Fs
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTOiBJcyB0aGlzIGNv
cnJlY3Q/CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkgLT4gRXhw
cmVzc2lvblR5cGUKK3sKKyAgICBUbXAgcmVzdWx0OworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHZhbHVlKSwgcmVzdWx0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6
IHsKKyAgICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAgIFRtcCB0bXAgPSBncHIoKTsKKyAg
ICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHZhbHVlKSwgdG1wKTsKKyAgICAgICAgYXBw
ZW5kKHR5cGUgPT0gVHlwZTo6RjMyID8gTW92ZTMyVG9GbG9hdCA6IE1vdmU2NFRvRG91YmxlLCB0
bXAsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdDsKKworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2xvY2Fscy5zaXplKCkgPT0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7IC8vIFdlIGhh
bmRsZSBhcmd1bWVudHMgaW4gdGhlIHByb2xvZ3VlCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhd
LmZpcnN0KTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVU
eXBlKG1fbG9jYWxzW2luZGV4XS5zZWNvbmQpLCBtX2xvY2Fsc1tpbmRleF0uZmlyc3QsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVW5yZWFj
aGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogdW5y
ZWFjaGFibGUgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICB1bnJlYWNoYWJsZS0+c2V0
R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6OlVucmVhY2hhYmxlKTsKKyAgICB9KTsKKyAgICB1bnJlYWNoYWJsZS0+
ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGludDMyX3QgKCpncm93TWVt
b3J5KSh2b2lkKiwgSW5zdGFuY2UqLCBpbnQzMl90KSA9IFtdICh2b2lkKiBjYWxsRnJhbWUsIElu
c3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7CisgICAgICAgIGlu
c3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOworCisgICAgICAgIGlmIChkZWx0
YSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgYXV0byBncm93biA9IGlu
c3RhbmNlLT5tZW1vcnkoKS0+Z3JvdyhQYWdlQ291bnQoZGVsdGEpKTsKKyAgICAgICAgaWYgKCFn
cm93bikgeworICAgICAgICAgICAgc3dpdGNoIChncm93bi5lcnJvcigpKSB7CisgICAgICAgICAg
ICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWREZWx0YToKKyAgICAgICAgICAg
IGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZEdyb3dTaXplOgorICAgICAgICAg
ICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAg
ICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZ3Jvd24u
dmFsdWUoKS5wYWdlQ291bnQoKTsKKyAgICB9OworCisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
ZW1pdENDYWxsKGdyb3dNZW1vcnksIHJlc3VsdCwgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKSwgaW5zdGFuY2VWYWx1ZSgpLCBkZWx0YSk7CisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Ok5vLCBtX2luZm8ubWVtb3J5LCBpbnN0
YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHN0YXRpY19jYXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0
X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisKKyAgICBUbXAgdGVtcDEgPSBn
cHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6
aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSwgQjM6
OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwg
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgdGVtcDEpOworICAgIGNvbnN0
ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291
bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0
aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6Omlt
bSgxNiksIHRlbXAyKTsKKyAgICBhZGRTaGlmdChVcnNoaWZ0NjQsIHRlbXAxLCB0ZW1wMiwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoTW92ZTMyLCByZXN1bHQsIHJlc3VsdCk7CisKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobV9s
b2NhbHNbaW5kZXhdLmZpcnN0KTsKKyAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKG1fbG9j
YWxzW2luZGV4XS5zZWNvbmQpLCB2YWx1ZSwgbV9sb2NhbHNbaW5kZXhdLmZpcnN0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBU
eXBlIHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKworICAgIHJlc3VsdCA9IHRt
cEZvclR5cGUodHlwZSk7CisKKyAgICBUbXAgdGVtcCA9IGdwcigpOworCisgICAgUkVMRUFTRV9B
U1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpLCBC
Mzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgp
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpLCB0ZW1wKTsKKworICAgIGludDMyX3Qgb2Zm
c2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBp
ZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHRvQjNUeXBl
KHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6
YWRkcih0ZW1wLCBvZmZzZXQpLCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBUbXAgdGVt
cDIgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIHRl
bXAyKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwgdGVtcCwgdGVtcCk7CisgICAgICAg
IGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6YWRkcih0ZW1wKSwgcmVzdWx0
KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c2V0
R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6
OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0
KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNl
OjpvZmZzZXRPZkdsb2JhbHMoKSksIHRlbXApOworCisgICAgVHlwZSB0eXBlID0gbV9pbmZvLmds
b2JhbHNbaW5kZXhdLnR5cGU7CisKKyAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVDYXN0PGludDMy
X3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJG
b3JtKG9mZnNldCwgQjM6OndpZHRoRm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQorICAgICAgICBh
cHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCB2YWx1ZSwgQXJnOjphZGRyKHRlbXAsIG9m
ZnNldCkpOworICAgIGVsc2UgeworICAgICAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIHRlbXAyKTsKKyAgICAgICAgYXBwZW5k
KEFkZDY0LCB0ZW1wMiwgdGVtcCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1
ZVR5cGUodHlwZSksIHZhbHVlLCBBcmc6OmFkZHIodGVtcCkpOworICAgIH0KKworICAgIHJldHVy
biB7IH07Cit9CisKK2lubGluZSBBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQWlySVJH
ZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQoreworICAgIEFT
U0VSVChtX21lbW9yeUJhc2VHUFIpOworICAgIFVOVVNFRF9QQVJBTShzaXplT2ZPcGVyYXRpb24p
OyAvLyBPT1BTCisKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmc6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gT09QUyEKKworICAgICAgICAvLyBXZSdyZSBub3QgdXNpbmcgc2lnbmFsIGhhbmRsaW5nIGF0
IGFsbCwgd2UgbXVzdCB0aGVyZWZvcmUgY2hlY2sgdGhhdCBubyBtZW1vcnkgYWNjZXNzIGV4Y2Vl
ZHMgdGhlIGN1cnJlbnQgbWVtb3J5IHNpemUuCisgICAgICAgIC8vQVNTRVJUKG1fbWVtb3J5U2l6
ZUdQUik7CisgICAgICAgIC8vQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNl
dCk7CisgICAgICAgIC8vbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgbV9tZW1vcnlTaXplR1BSLCBwb2ludGVyLCBzaXplT2ZP
cGVyYXRpb24gKyBvZmZzZXQgLSAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHsKKyAgICAgICAgLy8gV2UndmUgdmlydHVhbGx5IG1h
cHBlZCA0R2lCK3JlZHpvbmUgZm9yIHRoaXMgbWVtb3J5LiBPbmx5IHRoZSB1c2VyLWFsbG9jYXRl
ZCBwYWdlcyBhcmUgYWRkcmVzc2FibGUsIGNvbnRpZ3VvdXNseSBpbiByYW5nZSBbMCwgY3VycmVu
dF0sCisgICAgICAgIC8vIGFuZCBldmVyeXRoaW5nIGFib3ZlIGlzIG1hcHBlZCBQUk9UX05PTkUu
IFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgZXhwbGljaXQgYm91bmRzIGNoZWNrIGluIHRo
ZSA0R2lCIHJhbmdlIGJlY2F1c2UgV2ViQXNzZW1ibHkgcmVnaXN0ZXIKKyAgICAgICAgLy8gbWVt
b3J5IGFjY2Vzc2VzIGFyZSAzMi1iaXQuIEhvd2V2ZXIgV2ViQXNzZW1ibHkgcmVnaXN0ZXIgKyBv
ZmZzZXQgYWNjZXNzZXMgcGVyZm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNoIGNhbiBw
dXNoIGFuIGFjY2VzcyBhYm92ZQorICAgICAgICAvLyB0aGUgMzItYml0IGxpbWl0ICh0aGUgb2Zm
c2V0IGlzIHVuc2lnbmVkIDMyLWJpdCkuIFRoZSByZWR6b25lIHdpbGwgY2F0Y2ggbW9zdCBzbWFs
bCBvZmZzZXRzLCBhbmQgd2UnbGwgZXhwbGljaXRseSBib3VuZHMgY2hlY2sgYW55CisgICAgICAg
IC8vIHJlZ2lzdGVyICsgbGFyZ2Ugb2Zmc2V0IGFjY2Vzcy4gV2UgZG9uJ3QgdGhpbmsgdGhpcyB3
aWxsIGJlIGdlbmVyYXRlZCBmcmVxdWVudGx5LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBj
b3VsZCBjaGVjayB0aGF0IHJlZ2lzdGVyICsgbGFyZ2Ugb2Zmc2V0IGRvZXNuJ3QgZXhjZWVkIDRH
aUIrcmVkem9uZSBzaW5jZSB0aGF0J3MgdGVjaG5pY2FsbHkgdGhlIGxpbWl0IHdlIG5lZWQgdG8g
YXZvaWQgb3ZlcmZsb3dpbmcgdGhlCisgICAgICAgIC8vIFBST1RfTk9ORSByZWdpb24sIGJ1dCBp
dCdzIGJldHRlciBpZiB3ZSB1c2UgYSBzbWFsbGVyIGltbWVkaWF0ZSBiZWNhdXNlIGl0IGNhbiBj
b2RlZ2VucyBiZXR0ZXIuIFdlIGtub3cgdGhhdCBhbnl0aGluZyBlcXVhbCB0byBvciBncmVhdGVy
CisgICAgICAgIC8vIHRoYW4gdGhlIGRlY2xhcmVkICdtYXhpbXVtJyB3aWxsIHRyYXAsIHNvIHdl
IGNhbiBjb21wYXJlIGFnYWluc3QgdGhhdCBudW1iZXIuIElmIHRoZXJlIHdhcyBubyBkZWNsYXJl
ZCAnbWF4aW11bScgdGhlbiB3ZSBzdGlsbCBrbm93IHRoYXQKKyAgICAgICAgLy8gYW55IGFjY2Vz
cyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gNEdpQiB3aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRk
IHRoZSByZWR6b25lLgorICAgICAgICBpZiAob2Zmc2V0ID49IE1lbW9yeTo6ZmFzdE1hcHBlZFJl
ZHpvbmVCeXRlcygpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBPT1BTIQorICAgICAgICAgICAgLy9zaXplX3QgbWF4aW11bSA9IG1faW5mby5tZW1vcnku
bWF4aW11bSgpID8gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkuYnl0ZXMoKSA6IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAgICAgIC8vbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxXYXNtQm91bmRzQ2hlY2tWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRl
ciwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSwgbWF4aW11bSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIFRtcCByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoTW92ZTMyLCBwb2ludGVyLCByZXN1bHQpOworICAgIGFwcGVuZChBZGQ2NCwgVG1w
KG1fbWVtb3J5QmFzZUdQUiksIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQ4VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQ4VToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzoKKyAg
ICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkMTZVOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDMyVToKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6CisgICAgICAgIHJldHVy
biA0OworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6
OkY2NExvYWQ6CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgVG1wIEFpcklSR2VuZXJhdG9yOjplbWl0TG9hZE9w
KExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQp
Cit7CisgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIs
IHVvZmZzZXQpOworCisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworICAgIFRtcCBy
ZXN1bHQ7CisKKyAgICBhdXRvIGxvYWRBcmcgPSBbJl0gKCkgeworICAgICAgICBpZiAoQXJnOjpp
c1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JCeXRlcyhzaXplT2ZMb2FkT3Aob3Ap
KSkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9mZnNldCk7CisgICAg
ICAgIGltbVRtcCA9IGdwcigpOworICAgICAgICBuZXdQdHIgPSBncHIoKTsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgIGFwcGVuZChB
ZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQdHIpOworICAgICAgICByZXR1cm4gQXJnOjphZGRy
KG5ld1B0cik7CisgICAgfTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQ4UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5k
KExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzogeworICAgICAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbG9h
ZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHJlc3Vs
dCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOFU6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChM
b2FkOCwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VTogeworICAgICAgICAvLyBPT1BTOiBEbyBJIG5lZWQg
YW5vdGhlciB6ZXh0IGhlcmU/CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBl
bmQoTG9hZDgsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1
bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQxNlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkMTZT
aWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWdu
RXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgICAgIGFwcGVuZChMb2FkMTYsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOiB7CisgICAg
ICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90aGVyIHpleHQgaGVyZT8KKyAgICAgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkMTYsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVTogeworICAgICAgICByZXN1bHQgPSBncHIoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6IHsKKyAgICAgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzIsIGxvYWRBcmcoKSwgcmVzdWx0
KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3VsdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDogewor
ICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIGxvYWRBcmcoKSwg
cmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpG
MzJMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBhcHBlbmQoTW92ZUZs
b2F0LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgTG9hZE9wVHlwZTo6RjY0TG9hZDogeworICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmVEb3VibGUsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgQVNTRVJUKHBvaW50ZXIuaXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxv
d3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBFdmVuIHRob3VnaCB0aGlzIGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90
IGEgdmFsaWRhdGlvbiBlcnJvciwgc28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8g
YXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIGF1dG8qIHBh
dGNoID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIHBhdGNoLT5zZXRHZW5lcmF0
b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4
Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSk7CisKKyAgICAgICAgLy8gV2Ugd29uJ3Qg
cmVhY2ggaGVyZSwgc28gd2UganVzdCBwaWNrIGEgcmFuZG9tIHJlZy4KKyAgICAgICAgc3dpdGNo
IChvcCkgeworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICAgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAgICAgICAgY2FzZSBM
b2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhT
OgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VToKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6
CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6Cisg
ICAgICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9h
ZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBlbWl0
Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkp
LCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIHVpbnQzMl90IHNpemVP
ZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2Ug
U3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6
CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3Rv
cmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgcmV0dXJuIDQ7
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6
RjY0U3RvcmU6CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCisKK2lubGluZSB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0U3Rv
cmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCit7CisgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1
cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOworCisgICAgVG1wIGltbVRtcDsK
KyAgICBUbXAgbmV3UHRyOworCisgICAgYXV0byBzdG9yZUFyZyA9IFsmXSAoKSB7CisgICAgICAg
IGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNpemVP
ZlN0b3JlT3Aob3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9m
ZnNldCk7CisgICAgICAgIGltbVRtcCA9IGdwcigpOworICAgICAgICBuZXdQdHIgPSBncHIoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAg
ICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQdHIpOworICAgICAgICByZXR1
cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBj
YXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3Rv
cmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4LCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICAgICAgYXBwZW5kKFN0b3JlMTYsIHZhbHVlLCBz
dG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0
U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKKyAgICAgICAgYXBwZW5k
KE1vdmUzMiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCBzdG9y
ZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3Rv
cmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIGFw
cGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIEFTU0VSVChwb2ludGVyLmlzR1AoKSk7CisKKyAgICBpZiAoVU5MSUtFTFkoc3VtT3Zl
cmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3ApKSkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQn
cyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAg
ICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0
byogdGhyb3dFeGNlcHRpb24gPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgdGhy
b3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nl
c3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQodGhyb3dFeGNlcHRpb24s
IFRtcCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlT3Aob3AsIGVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1
ZSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblpl
cm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobm9uWmVyby5pc0dQKCkgPT0gemVyby5pc0dQKCkpOwor
ICAgIHJlc3VsdCA9IG5vblplcm8uaXNHUCgpID8gZ3ByKCkgOiBmcHIoKTsKKyAgICBpZiAobm9u
WmVyby5pc0dQKCkpCisgICAgICAgIGFwcGVuZChNb3ZlLCBub25aZXJvLCByZXN1bHQpOworICAg
IGVsc2UKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIG5vblplcm8sIHJlc3VsdCk7CisKKyAg
ICBCYXNpY0Jsb2NrKiBpc1plcm8gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChCcmFuY2hU
ZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGNvbmRpdGlvbiwgY29u
ZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1plcm8sIGNvbnRp
bnVhdGlvbik7CisKKyAgICBpZiAoemVyby5pc0dQKCkpCisgICAgICAgIGFwcGVuZChpc1plcm8s
IE1vdmUsIHplcm8sIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQoaXNaZXJvLCBN
b3ZlRG91YmxlLCB6ZXJvLCByZXN1bHQpOworICAgIGFwcGVuZChpc1plcm8sIEp1bXApOworICAg
IGlzWmVyby0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50Qmxv
Y2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2Vu
ZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmln
aW4gb3JpZ2luKQoreworICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOyAvLyBPT1BTCisKKyAgICBp
ZiAoIW1fdGllclVwKQorICAgICAgICByZXR1cm47CisKKyAgICBUbXAgY291bnRkb3duUHRyID0g
Z3ByKCk7CisgICAgVG1wIG9sZENvdW50ZG93biA9IGdwcigpOworICAgIFRtcCBuZXdDb3VudGRv
d24gPSBncHIoKTsKKworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShyZWludGVycHJldF9j
YXN0PHVpbnQ2NF90PihtX3RpZXJVcCkpLCBjb3VudGRvd25QdHIpOworICAgIGFwcGVuZChNb3Zl
MzIsIEFyZzo6YWRkcihjb3VudGRvd25QdHIpLCBvbGRDb3VudGRvd24pOworCisgICAgUkVMRUFT
RV9BU1NFUlQoQXJnOjppc1ZhbGlkSW1tRm9ybShkZWNyZW1lbnRDb3VudCkpOworICAgIGFwcGVu
ZChNb3ZlMzIsIG9sZENvdW50ZG93biwgbmV3Q291bnRkb3duKTsKKyAgICBhcHBlbmQoU3ViMzIs
IEFyZzo6aW1tKGRlY3JlbWVudENvdW50KSwgbmV3Q291bnRkb3duKTsKKyAgICBhcHBlbmQoTW92
ZTMyLCBuZXdDb3VudGRvd24sIEFyZzo6YWRkcihjb3VudGRvd25QdHIpKTsKKworICAgIGF1dG8q
IHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgQjM6OkVmZmVjdHMgZWZmZWN0
cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFu
Z2U6OnRvcCgpOworICAgIGVmZmVjdHMud3JpdGVzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7Cisg
ICAgcGF0Y2gtPmVmZmVjdHMgPSBlZmZlY3RzOworCisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdGllclVwID0gaml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0u
Z3ByKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0
LmxhYmVsKCk7CisKKyAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgIHRpZXJVcC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBleHRyYVBhZGRpbmdCeXRlcyA9IDA7CisgICAgICAgICAgICBSZWdpc3Rl
clNldCByZWdpc3RlcnNUb1NwaWxsID0geyB9OworICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGls
bC5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVy
c1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKKworICAgICAgICAgICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2Z1bmN0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOworCisgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3Rv
cmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0
ZXJTZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBl
eHRyYVBhZGRpbmdCeXRlcyk7CisgICAgICAgICAgICBqaXQuanVtcCh0aWVyVXBSZXN1bWUpOwor
CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxOb1B0clRhZz4oY2FsbCksIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodHJpZ2dlck9NR1Rp
ZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworCisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2gsIFRtcCgpLCBuZXdDb3Vu
dGRvd24sIG9sZENvdW50ZG93bik7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBB
aXJJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICBCYXNpY0Jsb2Nr
KiBib2R5ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoYm9keSk7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7
CisgICAgZW1pdFRpZXJVcENoZWNrKFRpZXJVcENvdW50Ojpsb29wRGVjcmVtZW50KCksIG9yaWdp
bigpKTsKKworICAgIHJldHVybiBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBG
b3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsK
K30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRUb3BM
ZXZlbChUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEoQjM6Ok9yaWdp
bigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpUb3BMZXZl
bCwgbV9jb2RlLmFkZEJsb2NrKCkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEg
QWlySVJHZW5lcmF0b3I6OmFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBD
b250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJs
b2NrVHlwZTo6QmxvY2ssIG1fY29kZS5hZGRCbG9jaygpKTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29u
dHJvbFR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEJhc2ljQmxvY2sqIHRh
a2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRk
QmxvY2soKTsKKyAgICAKKyAgICAvLyBXYXNtIGJvb2xzIGFyZSBpMzIuCisgICAgYXBwZW5kKEJy
YW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgY29uZGl0
aW9uLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRha2Vu
LCBub3RUYWtlbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IHRha2VuOworICAgIHJlc3VsdCA9
IENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwg
QmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7CisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YS5yZXN1bHQpOworICAgIGFw
cGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRp
bnVhdGlvbik7CisgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEpOworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0
YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5
cGU6OklmKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKKyAgICBkYXRhLmNv
bnZlcnRJZlRvQmxvY2soKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocmV0dXJu
VmFsdWVzLnNpemUoKSA8PSAxKTsKKyAgICBpZiAocmV0dXJuVmFsdWVzLnNpemUoKSkgeworICAg
ICAgICBUbXAgcmV0dXJuVmFsdWVHUFIgPSBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICBUbXAgcmV0dXJuVmFsdWVGUFIgPSBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
OworICAgICAgICBzd2l0Y2ggKGRhdGEuc2lnbmF0dXJlKCkpIHsKKyAgICAgICAgY2FzZSBUeXBl
OjpJMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXQzMiwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAg
ICAgYXBwZW5kKFJldDY0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCByZXR1
cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9h
dCwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHJldHVyblZhbHVlc1swXSwg
cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5WYWx1
ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgYXBwZW5kKFJldFZvaWQpOworICAgIHJldHVybiB7IH07Cit9CisKKy8vIE5PVEU6IEFs
bCBicmFuY2hlcyBpbiBXYXNtIGFyZSBvbiAzMi1iaXQgaW50cworCithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHRGb3JC
cmFuY2goKSk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9y
QnJhbmNoKCk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3Qz
MiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgY29uZGl0aW9uLCBjb25k
aXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAg
IH0gZWxzZSB7CisgICAgICAgIGFwcGVuZChKdW1wKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PnNldFN1Y2Nlc3NvcnModGFyZ2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBj
b25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRU
YXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tp
XS0+cmVzdWx0Rm9yQnJhbmNoKCkpOworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Np
b25TdGFjaywgZGVmYXVsdFRhcmdldC5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQmFzaWNCbG9j
ayogdGFyZ2V0ID0gdGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICAgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIGlm
IChBcmc6OmlzVmFsaWRJbW1Gb3JtKGkpKQorICAgICAgICAgICAgYXBwZW5kKEJyYW5jaDMyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgQXJnOjppbW0oaSksIGNvbmRpdGlv
bik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7Cisg
ICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oaSksIGNvbnN0YW50KTsKKyAgICAg
ICAgICAgIGFwcGVuZChCcmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCksIGNvbnN0YW50LCBjb25kaXRpb24pOworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9uKTsKKworICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBhcHBlbmQoSnVtcCk7Cisg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGVmYXVsdFRhcmdldC50YXJnZXRCbG9j
a0ZvckJyYW5jaCgpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNz
aW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVu
dHJ5LmNvbnRyb2xEYXRhOworCisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0
YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2Nr
LT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKworICAgIHJldHVybiBhZGRFbmRU
b1VucmVhY2hhYmxlKGVudHJ5KTsKK30KKworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworICAgIG1fY3VycmVudEJs
b2NrID0gZGF0YS5jb250aW51YXRpb247CisKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tU
eXBlOjpJZikgeworICAgICAgICBhcHBlbmQoZGF0YS5zcGVjaWFsLCBKdW1wKTsKKyAgICAgICAg
ZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKG1fY3VycmVudEJsb2NrKTsKKyAgICB9CisKKyAg
ICBmb3IgKFRtcCByZXN1bHQgOiBkYXRhLnJlc3VsdCkKKyAgICAgICAgZW50cnkuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAvLyBUb3BMZXZlbCBkb2VzIG5v
dCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1p
dCBhIHJldHVybiBoZXJlLgorICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExl
dmVsKQorICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisgICAgVHlw
ZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBzd2l0Y2ggKHJldHVy
blR5cGUpIHsKKyAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICByZXN1bHQgPSBncHIoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6
CisgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKKworICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0
aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KSkgeworICAgICAgICBtX21h
eE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKKworICAgICAgICAvLyBGSVhNRSBp
bXBvcnRzIGNhbiBiZSBsaW5rZWQgaGVyZSwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hw
b2ludCwgYmVjYXVzZSBhbGwgaW1wb3J0IHN0dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNv
bXBpbGF0aW9uIHN0YXJ0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NjQ2MgorICAgICAgICBUbXAgdGFyZ2V0SW5zdGFuY2UgPSBncHIoKTsKKyAgICAgICAgLy8g
T09QUzogVHJ5IHRvIGlzZWwgdGhpcyBiZXR0ZXIKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YmlnSW1tKEluc3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGZ1bmN0aW9uSW5kZXgpKSwg
dGFyZ2V0SW5zdGFuY2UpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGluc3RhbmNlVmFsdWUoKSwg
dGFyZ2V0SW5zdGFuY2UpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKHRhcmdldElu
c3RhbmNlKSwgdGFyZ2V0SW5zdGFuY2UpOworCisgICAgICAgIEJhc2ljQmxvY2sqIGlzV2FzbUJs
b2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJC
bG9jayA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDY0LCBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0YXJnZXRJbnN0YW5jZSwgdGFy
Z2V0SW5zdGFuY2UpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1dh
c21CbG9jaywgaXNFbWJlZGRlckJsb2NrKTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRv
KiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2lu
Y2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBw
ZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRo
YXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzIxODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKwor
ICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgICAgICAg
ICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBl
LCBwYXRjaHBvaW50LCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAg
ICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNh
bGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rp
b25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICBlbWl0UGF0Y2hwb2ludChpc1dhc21CbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBX
VEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAgICAgYXBwZW5kKGlzV2FzbUJsb2NrLCBKdW1w
KTsKKyAgICAgICAgICAgIGlzV2FzbUJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBUbXAganVtcERlc3RpbmF0aW9u
ID0gZ3ByKCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oSW5zdGFuY2U6
Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5kZXgpKSwganVtcERlc3RpbmF0
aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCBqdW1wRGVz
dGluYXRpb24pOworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihqdW1wRGVzdGlu
YXRpb24pLCBqdW1wRGVzdGluYXRpb24pOworCisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQg
YmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2Fs
bHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRz
IGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRv
IHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAgICAgICAgICAgIFZl
Y3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAgICAgICAgICAgcGF0Y2hBcmdzLmFw
cGVuZChqdW1wRGVzdGluYXRpb24pOworCisgICAgICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRp
b25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBb
Jl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgICAgICBwYXRjaEFy
Z3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6
IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIGVtaXRQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBX
VEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywg
SnVtcCk7CisgICAgICAgICAgICBpc0VtYmVkZGVyQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworICAgICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJB
c3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5
LgorICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIGNvbnRpbnVhdGlv
bik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndy
aXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5u
ZWQgPSB0cnVlOworCisgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOwor
ICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1
cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXAp
IHsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5j
dGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJs
b2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgRXhwcmVz
c2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAgQVNTRVJUKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9tYWtlc0NhbGxz
ID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGluZGlyZWN0IGNhbiBjYWxsIGVpdGhlciBXZWJB
c3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLiBCZWNhdXNlCisg
ICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gaXMgbGlrZSBjYWxsaW5nIGludG8gdGhl
IGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgYWxsIGNhbGwgaW5kaXJlY3RzCisg
ICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1bGF0
aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0Nh
bGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOworCisgICAg
RXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IGdwcigpOworICAgIEV4cHJl
c3Npb25UeXBlIGluc3RhbmNlc0J1ZmZlciA9IGdwcigpOworICAgIEV4cHJlc3Npb25UeXBlIGNh
bGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGggPSBncHIoKTsKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCks
IEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJG
b3JtKFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5j
ZXMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlk
QWRkckZvcm0oVGFibGU6Om9mZnNldE9mTGVuZ3RoKCksIEIzOjpXaWR0aDY0KSk7CisKKyAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZz
ZXRPZlRhYmxlKCkpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6
b2Zmc2V0T2ZGdW5jdGlvbnMoKSksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIpOworICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxl
OjpvZmZzZXRPZkluc3RhbmNlcygpKSwgaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAgICAgYXBwZW5k
KE1vdmUzMiwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpv
ZmZzZXRPZkxlbmd0aCgpKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfQor
CisgICAgYXBwZW5kKE1vdmUzMiwgY2FsbGVlSW5kZXgsIGNhbGxlZUluZGV4KTsKKworICAgIC8v
IENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCisgICAgZW1pdENo
ZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChCcmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBjYWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ckxlbmd0aCk7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9u
KGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNDYWxsSW5kaXJlY3QpOworICAgIH0pOwor
CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IGdwcigpOworICAgIHsKKyAgICAgICAg
RXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBncHIoKTsKKyAgICAgICAgLy8g
Q29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2lu
ZyBmb3IuCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbShzaXplb2YoV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbikpLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIGFwcGVu
ZChNdWw2NCwgY2FsbGVlSW5kZXgsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBw
ZW5kKEFkZDY0LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7
CisgICAgICAgIAorICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVy
ZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRM
b2FkTG9jYXRpb24oKSksIGNhbGxlZUNvZGUpOyAvLyBQb2ludGVyIHRvIGNhbGxlZSBjb2RlLgor
CisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24g
aXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1
cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCisgICAgICAgIC8vIEZJWE1F
OiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZh
aWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXpl
b2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTY0Iik7CisgICAgICAgIC8vIE9P
UFM6IFRoaXMgc2VlbXMgZHVtYiB0byBkbyB0d28gY2hlY2tzIGp1c3QgZm9yIGEgbmljZXIgZXJy
b3IgaGVyZS4uLgorCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0
dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJl
SW5kZXgoKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggPT0g
MCwgIiIpOworICAgICAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGNhbGxlZVNpZ25hdHVy
ZUluZGV4KTsKKyAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4
Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok51bGxUYWJsZUVudHJ5KTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBl
eHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gZ3ByKCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0oU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmUpKSwgZXhwZWN0
ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoNjQsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhw
ZWN0ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpCYWRTaWduYXR1cmUpOwor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBEbyBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRl
ZC4KKyAgICB7CisgICAgICAgIFRtcCBuZXdDb250ZXh0SW5zdGFuY2UgPSBncHIoKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6aW5kZXgoaW5zdGFuY2VzQnVmZmVyLCBjYWxsZWVJbmRleCwg
OCwgMCksIG5ld0NvbnRleHRJbnN0YW5jZSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4
dFN3aXRjaCA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgICAgIGFwcGVuZChCcmFuY2g2NCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIG5ld0NvbnRleHRJbnN0YW5jZSwg
aW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
Y29udGludWF0aW9uLCBkb0NvbnRleHRTd2l0Y2gpOworCisgICAgICAgIGF1dG8qIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNz
dW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdpdGggQm91bmRzQ2hlY2tpbmcgbWVtb3J5Lgor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICBwYXRjaHBvaW50
LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0
YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0SW5z
dGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3Rl
ckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgICAgICAg
ICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CisgICAg
ICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7
CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJ
bnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9y
eSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tM
aW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKG5ld0Nv
bnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lz
dGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBw
b3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vICAg
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCisgICAg
ICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNTRVJU
KHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAg
ICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7
IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAgfSk7CisKKyAgICAg
ICAgZW1pdFBhdGNocG9pbnQoZG9Db250ZXh0U3dpdGNoLCBwYXRjaHBvaW50LCBUbXAoKSwgbmV3
Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAgICBhcHBlbmQoZG9Db250
ZXh0U3dpdGNoLCBKdW1wKTsKKyAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5zZXRTdWNjZXNzb3Jz
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247
CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVDb2RlKSwgY2FsbGVl
Q29kZSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwor
ICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAg
IHJlc3VsdCA9IGdwcigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAg
ICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5
cGUpKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIHBhdGNo
LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIg
YWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcg
dGhlIGluc3RhbmNlLgorICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgYWx3
YXlzIGNhbGxpbmcgc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nIHNvCisgICAgLy8g
YmVjYXVzZSB0aGUgd2FzbS0+d2FzbSB0aHVuayB1bmNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVzIHRo
ZSBzaXplIHJlZ2lzdGVycy4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRv
IHRoaXMsIGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHViIGFzc3VtZXMgaXQgY2FuCisgICAgLy8gdXNl
IGFsbCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhcyBzY3JhdGNoOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgcGF0Y2gtPmNsb2JiZXJMYXRlKFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7
CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRBcmdzOworICAgIGVtaXRBcmdzLmFw
cGVuZChjYWxsZWVDb2RlKTsKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENh
bGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaCwgYXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFs
dWVSZXAgcmVwKSB7CisgICAgICAgIGVtaXRBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAg
IH0pOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0
LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5
UHRyVGFnKTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBw
YXRjaCwgcmVzdWx0LCBXVEZNb3ZlKGVtaXRBcmdzKSk7CisKKyAgICAvLyBUaGUgY2FsbCBjb3Vs
ZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291
bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2Jh
bFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3Rh
bmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9p
ZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3Qg
RXhwcmVzc2lvblR5cGUmIHNvdXJjZSkKK3sKKyAgICAvLyBPT1BTOiBXZSBraW5kYSB3YW50IHR5
cGVzIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2NC9mMzIvZjY0IQorICAgIFJFTEVBU0VfQVNT
RVJUKGRzdC5pc0dQKCkgPT0gc291cmNlLmlzR1AoKSk7CisgICAgYXBwZW5kKGRzdC5pc0dQKCkg
PyBNb3ZlIDogTW92ZURvdWJsZSwgc291cmNlLCBkc3QpOworfQorCit2b2lkIEFpcklSR2VuZXJh
dG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3Rh
Y2ssIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQocmVzdWx0LnNpemUo
KSA8PSByZXN1bHRTdGFjay5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZXN1bHQuc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0g
MSAtIGldLCByZXN1bHRTdGFja1tyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaV0pOworfQorCisv
L3N0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21t
YSwgY29uc3QgQWlySVJHZW5lcmF0b3I6OkV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sp
CisvL3sKKy8vICAgIGRhdGFMb2coY29tbWEsICJFeHByZXNzaW9uU3RhY2s6Iik7CisvLyAgICBm
b3IgKGNvbnN0IGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisvLyAgICAgICAg
ZGF0YUxvZyhjb21tYSwgKmV4cHJlc3Npb24pOworLy99CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6
OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhw
cmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjaykKK3sKKyAgICBVTlVTRURfUEFSQU0oY29udHJv
bFN0YWNrKTsKKyAgICBVTlVTRURfUEFSQU0oZXhwcmVzc2lvblN0YWNrKTsKKworICAgIC8vIE9P
UFMhCisgICAgLyoKKyAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgR3JhcGg6Iik7CisgICAgZGF0
YUxvZyhtX2NvZGUpOworICAgIGRhdGFMb2dMbigiV2l0aCBjdXJyZW50IGJsb2NrOiIsICptX2N1
cnJlbnRCbG9jayk7CisgICAgZGF0YUxvZ0xuKCJDb250cm9sIHN0YWNrOiIpOworICAgIEFTU0VS
VChjb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gY29udHJvbFN0YWNr
LnNpemUoKTsgaS0tOykgeworICAgICAgICBkYXRhTG9nKCIgICIsIGNvbnRyb2xTdGFja1tpXS5j
b250cm9sRGF0YSwgIjogIik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAiIik7
CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEsICpleHByZXNzaW9uU3RhY2spOwor
ICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29udHJvbFN0YWNrW2ldLmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrOworICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCk7
CisgICAgKi8KK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdp
bgoreworICAgIHJldHVybiBCMzo6T3JpZ2luKCk7CisgICAgLy9PcGNvZGVPcmlnaW4gb3JpZ2lu
KG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRp
bmdPZmZzZXQoKSk7CisgICAgLy9BU1NFUlQoaXNWYWxpZE9wVHlwZShzdGF0aWNfY2FzdDx1aW50
OF90PihvcmlnaW4ub3Bjb2RlKCkpKSk7CisgICAgLy9yZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdp
bj4ob3JpZ2luKTsKK30KKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBp
bGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0
aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9u
TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dX
YXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0
ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKworICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVy
cz4oKTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1h
a2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKworICAgIEIzOjpQcm9jZWR1cmUgcHJvY2VkdXJl
OworICAgIENvZGUmIGNvZGUgPSBwcm9jZWR1cmUuY29kZSgpOworCisgICAgcHJvY2VkdXJlLnNl
dE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2luKSB7
CisgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCJXYXNt
OiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2luPihvcmlnaW4pKTsKKyAgICB9KTsKKyAgICAK
KyAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1c2UgZWl0aGVyIFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCisgICAgLy8gU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zOjp1bmF2YWlsYWJsZVJlZ2lzdGVycygpLiBJbiBleGNoYW5nZSBmb3IgdGhpcyBjb25jZXNz
aW9uLCB3ZQorICAgIC8vIGRvbid0IHN0cmljdGx5IG5lZWQgdG8gcnVuIEFpcjo6cmVwb3J0VXNl
ZFJlZ2lzdGVycygpLCB3aGljaCBzYXZlcyBhIGJpdCBvZiBDUFUgdGltZSBhdAorICAgIC8vIG9w
dExldmVsPTEuCisgICAgLy8gT09QUzogRG8gd2UgbmVlZCB0aGlzPyBTaG91bGQgd2UganVzdCBz
ZXQgaXQgZGlyZWN0bHkgb24gQ29kZT8KKyAgICBwcm9jZWR1cmUuc2V0TmVlZHNVc2VkUmVnaXN0
ZXJzKGZhbHNlKTsKKyAgICAKKyAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoY29tcGlsYXRpb25N
b2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZQorICAgICAgICA/IE9wdGlvbnM6OndlYkFz
c2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQorICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2Vt
Ymx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CisKKyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVy
YXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dh
c21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNp
Z25hdHVyZSwgaW5mbyk7CisgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFy
c2UoKSk7CisKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQorICAg
ICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpLT5hZGRQcmVkZWNlc3NvcihibG9jayk7
CisgICAgfQorICAgIC8vIE9PUFM6IFZhbGlkYXRlICdjb2RlJyBoZXJlIQorICAgIAorICAgIHsK
KyAgICAgICAgQjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNt
RW50cnlwb2ludEpJVCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAgICAgICAgcmVz
dWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdCgpOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7
Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bj
b2RlIG9wZXJhdGlvbiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQp
Cit7CisgICAgLy9BU1NFUlQob3BlcmF0aW9uID09IERpdiB8fCBvcGVyYXRpb24gPT0gTW9kIHx8
IG9wZXJhdGlvbiA9PSBVRGl2IHx8IG9wZXJhdGlvbiA9PSBVTW9kKTsgLy8gT09QUworICAgIC8v
Y29uc3QgQjM6OlR5cGUgdHlwZSA9IGxlZnQtPnR5cGUoKTsKKyAgICBVTlVTRURfUEFSQU0ob3Bl
cmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKKworICAgIC8qCisgICAgeworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAg
IC8vIE9PUFM6IE5lZWQgdHlwZXMgZm9yIGJyYW5jaCBoZXJlIQorICAgICAgICAgICAgS2luZCBv
cCA9IEJyYW5jaFRlc3Q2NCA6IEJyYW5jaFRlc3QzMjsKKyAgICAgICAgICAgIGFwcGVuZChvcCwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgcmlnaHQsIHJpZ2h0KTsKKyAgICAg
ICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4
Y2VwdGlvblR5cGU6OkRpdmlzaW9uQnlaZXJvKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
aWYgKG9wZXJhdGlvbiA9PSBEaXYpIHsKKyAgICAgICAgLy8gT09QUzogTmVlZCB0eXBlcyBoZXJl
IQorICAgICAgICAvL2ludDY0X3QgbWluID0gdHlwZSA9PSBJbnQzMiA/IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50MzJfdD46Om1pbigpIDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCk7CisKKyAgICAgICAgaW50NjRfdCBtaW4gPSB0eXBlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpOworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIC8v
IE9PUFM6IFRyeSB0byBlbWl0IG5pY2UgY29tcGFyZSB3LyBpbW1zLgorICAgICAgICAgICAgVG1w
IG1pblRtcCA9IGdwcigpOworICAgICAgICAgICAgVG1wIG5lZ09uZSA9IGdwcigpOworCisgICAg
ICAgICAgICBLaW5kIG9wID0gaXM2NEJpdE9wKG9wZXJhdGlvbikgPyBDb21wYXJlNjQgOiBDb21w
YXJlMzI7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0obWluKSwgbWluVG1w
KTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCksIGxlZnQsIG1pblRtcCwgbWluVG1wKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmltbSgtMSksIG5lZ09uZSk7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdodCwgbmVnT25lLCBuZWdPbmUpOworICAgICAg
ICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvKSwgbWluVG1wLCBuZWdPbmUpOworICAgICAgICB9LAorICAgICAgICBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6SW50
ZWdlck92ZXJmbG93KTsKKyAgICAgICAgfSk7CisgICAgfQorICAgICovCit9CisKKy8vIE9PUFM6
IEltcGxlbWVudCB0aGVzZSBkaXYgb3BzISEhCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsKKyAgICBV
TlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVTRURf
UEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgLy9l
bWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHBy
ZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5V
U0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAg
IC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAg
Q1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3Ag
PSBVRGl2OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Cisg
ICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAg
ICAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0o
cmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29k
ZSBvcCA9IFVNb2Q7CisgICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0
KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
Yywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZTPihFeHBy
ZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIp
CisgICAgICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9Q
QVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6
T3Bjb2RlIG9wID0gRGl2OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCBy
aWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4o
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlm
IChiKQorICAgICAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVT
RURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vY29uc3Qg
QjM6Ok9wY29kZSBvcCA9IE1vZDsKKyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRpdihvcCwgbGVm
dCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBjaGlsbChvcCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGJvb2wgYiA9IHRy
dWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQp
OworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Cisg
ICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICAvL2VtaXRDaGVja3NGb3JNb2RP
ckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYm9vbCBi
ID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0o
bGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0
KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAgIC8vZW1pdENoZWNrc0Zv
ck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0
Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0
czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBd
LmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2lu
dChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9z
NjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNp
ZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVs
YXRpb24oKSkgeworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6
SW50MzIpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJl
c3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKworICAgIHVp
bnQzMl90ICgqcG9wY291bnQpKGludDMyX3QpID0gW10gKGludDMyX3QgdmFsdWUpIC0+IHVpbnQz
Ml90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxs
KHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hw
b2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGppdC5jb3VudFBvcHVsYXRpb242NChwYXJh
bXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0
UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRfdCAoKnBvcGNvdW50KShpbnQ2NF90KSA9IFtd
IChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRs
bCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6
bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNl
bHNlCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBw
YXJhbXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7Cisg
ICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpu
b25lKCk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRj
aFJlZ2lzdGVycyA9IDE7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworI2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJh
bXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisjZWxz
ZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJh
bXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6
OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7
CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQu
cm91bmRUb3dhcmROZWFyZXN0SW50RG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZw
cigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChw
YXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVz
dEludEZsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2lu
dCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFtc1sxXS5mcHIo
KSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJU
cnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZs
b2F0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3Vu
ZFRvd2FyZFplcm9GbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAg
fSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwg
cmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBVTlVT
RURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBib29sIGIgPSB0
cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhp
cyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0
PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJn
LCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwg
b3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3Jp
Z2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9y
aWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3By
KCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9u
ZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRy
dW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgVU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFN
KHJlc3VsdCk7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0go
KTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25z
dGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25z
dGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRz
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdp
bigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExl
c3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7
CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7Cisg
ICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNbMV0u
ZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAq
LworICAgIHJldHVybiB7IH07Cit9CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShh
cmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIGJvb2wgYiA9IHRydWU7CisgICAg
aWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAg
LyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
ICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFy
ZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9j
LCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwg
b3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3Jp
Z2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9y
aWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5v
bmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJU
cnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJB
TShyZXN1bHQpOworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNI
KCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29u
c3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0Pigt
Mi4wKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQz
Ml90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCks
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1Ro
YW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAg
IG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBF
cXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENo
ZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1f
cHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIEludDMyLCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFs
dWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIo
KSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShhcmcpOwor
ICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIp
CisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAg
ICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0
aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOwor
ICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3Rh
dGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsK
KyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBv
cmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29u
c3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3Vu
ZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9
KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBh
dGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91
YmxlVG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0
ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBi
b29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBs
ZW1lbnQgdGhpcyEKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERvdWJs
ZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigp
LAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NU
aGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAg
ICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBD
aGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPiht
X3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29u
c3RhbnQ7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3Qg
aGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25l
ZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAg
ICAgICAvLyB0aGUgbnVtYmVycyBhcmUgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2ln
bmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBm
cHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBu
ZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkp
OworICAgIH0KKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOwor
ICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAg
IGlmIChpc1g4NigpKSB7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChzaWduQml0Q29uc3Rh
bnQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNj
cmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOwor
ICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNY
ODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAg
ICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBq
aXQudHJ1bmNhdGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIo
KSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8K
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVU5VU0VEX1BBUkFNKGFyZyk7
CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpZiAo
YikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogSW1wbGVtZW50IHRoaXMhCisgICAgLyoKKyAg
ICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRp
Y19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAg
ICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAg
IFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIG9yaWdp
bigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91dE9mQm91bmRzLCBjb25zdGFu
dChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4
Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOwor
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
SW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBh
dGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
VU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgYm9vbCBi
ID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50
IHRoaXMKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0
PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGNv
bnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0Pigt
MS4wKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVy
VGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3Vu
ZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91
dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+
ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7
CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0YW50OworICAgIGlmIChpc1g4NigpKSB7
CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29u
dmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRy
eSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIG51bWJlcnMgd291bGQg
YmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBt
YXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAg
Ly8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFu
dCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZs
b2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsKKyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBz
Y3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxp
ZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBw
YXJhbXMuZnBTY3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnBy
KCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQ2NChwYXJhbXNb
MV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0pOwor
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3Vs
dCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRTaGlmdChCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3Jt
KG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3As
IHZhbHVlLCBzaGlmdCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAg
CisgICAgVG1wIGVjeCA9IFRtcChYODZSZWdpc3RlcnM6OmVjeCk7CisgICAgYXBwZW5kKE1vdmUs
IHZhbHVlLCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlLCBzaGlmdCwgZWN4KTsKKyAgICBhcHBl
bmQob3AsIGVjeCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRJbnRlZ2VyU3ViKEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhwcmVzc2lvblR5cGUg
bGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShv
cCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKG9wLCBs
aHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAvLyBTdWIgYSwgYgorICAgIC8vIG1lYW5zCisgICAg
Ly8gYiA9IGIgU3ViIGEKKyAgICBhcHBlbmQoTW92ZSwgbGhzLCByZXN1bHQpOworICAgIGFwcGVu
ZChvcCwgcmhzLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlIG9wLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IEFic0Zsb2F0IHx8IG9wID09IEFic0RvdWJsZSk7CisK
KyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShvcCwgQXJnOjpUbXAs
IEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIHZhbHVlLCByZXN1bHQpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworCisg
ICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAgaWYgKG9wID09IEFic0Zsb2F0KSB7CisgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSh+KDF1bGwgPDwgMzEpKSwgY29uc3RhbnQpOworICAg
ICAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFw
cGVuZChBbmRGbG9hdCwgdmFsdWUsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKH4oMXVsbCA8PCA2MykpLCBjb25zdGFudCk7CisgICAgICAg
IGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgY29uc3RhbnQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVu
ZChBbmREb3VibGUsIHZhbHVlLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QmluT3AoQjM6OkFpcjo6T3Bj
b2RlIG9wLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
CisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkg
eworICAgICAgICBhcHBlbmQob3AsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworCisgICAgLy8gT3Ag
YSwgYgorICAgIC8vIG1lYW5zCisgICAgLy8gYiA9IGIgT3AgYQorICAgIC8vIE9PUFM6IHZlcmlm
eQorICAgIGFwcGVuZChNb3ZlRG91YmxlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKG9wLCBy
aHMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBhcHBlbmQoQ2VpbEZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoTXVsMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlN1
Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRJbnRlZ2VyU3Vi
KFN1YjMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpk
b3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEZW1vdGVGNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydERvdWJsZVRvRmxvYXQsIGFyZzAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMk1pbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBh
cHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2st
PnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWws
IE9yRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXAp
OworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVu
ZChub3RFcXVhbCwgTW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVh
bCwgQnJhbmNoRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVx
dWFsLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JF
cXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRp
bnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZU5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjY0THQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk1h
eD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisg
ICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbGVzc1Ro
YW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxv
YXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBh
cmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVh
bCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgQW5kRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMo
Y29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZUZsb2F0LCBhcmcwLCBy
ZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRmxvYXQsIEFyZzo6ZG91YmxlQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RF
cXVhbC0+c2V0U3VjY2Vzc29ycyhsZXNzVGhhbiwgY29udGludWF0aW9uKTsKKworICAgIGFwcGVu
ZChsZXNzVGhhbiwgTW92ZUZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhh
biwgSnVtcCk7CisgICAgbGVzc1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKwor
ICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE11bD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50
QmluT3AoTXVsRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChEaXZGbG9hdCwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMkNsej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb3VudExlYWRpbmdaZXJvczMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdl
IGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFu
ZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcDEgPSBncHIo
KTsKKyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2YWx1ZSA9IGdwcigpOworCisgICAg
Ly8gT09QUzogQ2FuIGZpdCBpbiBJbW0vQml0SW1tIGluc3RlYWQgb2YgQmlnSW1tPworICAgIGFw
cGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YmlnSW1tKDB4ODAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5kMzIsIHRlbXAxLCBzaWdu
LCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVu
ZChBbmQzMiwgdGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3IzMiwgc2lnbiwg
dmFsdWUsIHZhbHVlKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdmFsdWUsIHJlc3VsdCk7
CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBUbXAgdGVtcCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHRlbXAp
OworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyUmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QW5k
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKEFuZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90
RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHdD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21w
YXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJU
aGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3FydD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0RmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NEdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NEd0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
QWJvdmUpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcXo+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFj
cm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRE
aXY+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiB3aGF0IGFib3V0
IGNoaWxsLW5lc3MgaGVyZS4uLj8KKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKERp
dkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChBZGRGbG9hdCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0T3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3I2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyTGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJMZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE5l
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NENsej4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczY0LCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJOZWc+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoTmVnYXRlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFuZD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChBbmQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRVPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUm90YXRlUmlnaHQ2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NEFicz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0RvdWJs
ZSwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMkx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJF
cT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2Vu
IGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9IGdwcigp
OworICAgIFRtcCB2YWx1ZSA9IGdwcigpOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBh
cmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAwMDAwMDAw
MDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQ2NCwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisg
ICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUs
IEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmZmZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBlbmQoQW5k
NjQsIHRlbXAxLCB2YWx1ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9yNjQsIHNpZ24sIHZhbHVl
LCB2YWx1ZSk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNo
aWZ0KFJvdGF0ZUxlZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkx0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9h
dCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRG91YmxlLCBhcmcwLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJs
ZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyTGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFVyc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRV
STMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSBncHIoKTsK
KyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0
VG9GbG9hdCwgdGVtcCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyUz4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSc2hpZnQzMiwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChCcmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDZWls
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENlaWxEb3VibGUsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkdlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KExzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Rmxvb3I+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoRmxvb3JEb3VibGUsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlhvcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChYb3IzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5n
UG9pbnRBYnMoQWJzRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91
YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBh
cHBlbmQoaXNFcXVhbCwgT3JEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5k
KGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9u
KTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAg
ICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRT
dWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVu
ZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBw
ZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5z
ZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRp
bnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoTXVsRmxvYXQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJldHVybiBhZGRJbnRlZ2VyU3ViKFN1YjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVp
bnRlcnByZXRGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92
ZUZsb2F0VG8zMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQWRkPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFkZDMy
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTdWI+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoU3ViRG91Ymxl
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJPcj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjMyLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0THRTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZl
cnRTSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJ
bnQ2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRYb3I+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9y
NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlVT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
NjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE11bDY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoU3ViRmxvYXQsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NFByb21vdGVGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEZsb2F0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NEFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGFwcGVuZChBZGREb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NEdlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0RXh0ZW5kVUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChNb3ZlMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk5lPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUz
MiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NFJlaW50ZXJwcmV0STY0PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJGbG9vcj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChGbG9vckZsb2F0LCBhcmcwLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJFcXo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDMy
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRSZWludGVycHJldEY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0U2hyUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRT
aGlmdChSc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVXJzaGlmdDY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0U3FydD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0NjQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJHdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJXcmFwSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1v
dmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90bD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0MzIsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyR3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5l
Zz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChOZWdhdGVEb3VibGUs
IGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAg
IGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1
YWwsIEFuZERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwg
SnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAg
YXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChu
b3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMo
bGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3Vi
bGUsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNz
VGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sg
PSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRMZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChBZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUIzSVJH
ZW5lcmF0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0g
bnVsbHB0cik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
NSw3ICszMTUsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluCiAg
ICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBlZmZlY3RzOwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVy
U2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOwotICAgIHBhdGNocG9pbnQtPmFwcGVuZChp
bnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQt
PmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOyAvLyBPT1BT
OiBQcm9iYWJseSBzaG91bGQgYmUgdXNpbmcgYXJnIQogICAgIEdQUlJlZyB3YXNtQ29udGV4dElu
c3RhbmNlR1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtKSB7CiAgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNt
Q29udGV4dEluc3RhbmNlR1BSKTsKQEAgLTQ1OSw5ICs0NTksOSBAQCB2b2lkIEIzSVJHZW5lcmF0
b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsCiAKICAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGlt
aXQgPT0gUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgewogICAgICAgICAvLyBUaGUgSW5z
dGFuY2UgY2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNh
bm9uaWNhbCBsb2NhdGlvbiBpcy4KLSAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0YWNr
TGltaXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGlu
dDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOwot
ICAgICAgICBWYWx1ZSogYWN0dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBv
aW50ZXJUb0FjdHVhbFN0YWNrTGltaXQpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1p
dCwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0YWNr
TGltaXQgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KElu
c3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOworICAgICAgICBW
YWx1ZSogYWN0dWFsU3RhY2tMaW1pdCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJUb0FjdHVhbFN0YWNr
TGltaXQpOworICAgICAgICBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0
b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1pdCwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsgLy8gT09Q
Uzogc2hvdWxkIGJlIGJsb2NrIQogICAgIH0KIAogICAgIGlmICghIW1lbW9yeSkgewpAQCAtMTgz
OCw3ICsxODM4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydQog
ICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIH0KICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7IC8vIE9PUFM6IFRoaXMgbG9v
a3Mgc3VwZXIgd3JvbmcgZ2l2ZW4gd2UgZG9uJ3Qgc2F5IHdlIGNsb2JiZXIgdGhpcyEKICAgICAg
ICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOwogICAgICAgICBGUFJSZWcgY29uc3Rh
bnQgPSBJbnZhbGlkRlBSUmVnOwogICAgICAgICBpZiAoaXNYODYoKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwzNiBAQCBjb25z
dCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5nCiAgICAgcmV0dXJuIHN0YXRpY1dh
c21DYWxsaW5nQ29udmVudGlvbjsKIH0KIAorY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXIm
IGpzY0NhbGxpbmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFn
OworICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10g
KCkgeworICAgICAgICBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9y
PFJlZz4oKSwgVmVjdG9yPFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Cit9
CisKK2NvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbkFpciYgd2FzbUNhbGxpbmdDb252ZW50aW9u
QWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcj4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9v
bmNlKHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgVmVj
dG9yPFJlZz4gZ3ByQXJndW1lbnRSZWdpc3RlcnMoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJl
Z2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1i
ZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBncHJBcmd1bWVudFJlZ2lz
dGVyc1tpXSA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKworICAgICAgICBWZWN0
b3I8UmVnPiBmcHJBcmd1bWVudFJlZ2lzdGVycyhGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgICAgIGZwckFyZ3VtZW50UmVnaXN0
ZXJzW2ldID0gRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIHN0YXRp
Y1dhc21DYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoV1RGTW92ZShncHJBcmd1bWVudFJlZ2lz
dGVycyksIFdURk1vdmUoZnByQXJndW1lbnRSZWdpc3RlcnMpLCBSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGlu
Z0NvbnZlbnRpb247Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgi
CiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
LmgiCkBAIC00NCwyNyArNDUsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAotdHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZz
ZXQsIEIzOjpUeXBlIHR5cGUpOwordHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2ln
bmVkIGN1cnJlbnRPZmZzZXQpOwogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0
T2Zmc2V0IHVwZGF0ZU9mZnNldD4KIGNsYXNzIENhbGxpbmdDb252ZW50aW9uIHsKIHB1YmxpYzoK
ICAgICBDYWxsaW5nQ29udmVudGlvbihWZWN0b3I8UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+
JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotICAgICAgICA6
IG1fZ3ByQXJncyhncHJBcmdzKQotICAgICAgICAsIG1fZnByQXJncyhmcHJBcmdzKQotICAgICAg
ICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhjYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICA6
IG1fZ3ByQXJncyhXVEZNb3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnByQXJncyhXVEZNb3Zl
KGZwckFyZ3MpKQorICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKGNhbGxl
ZVNhdmVSZWdpc3RlcnMpKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQjM6OlZhbHVl
UmVwIG1hcnNoYWxsQXJndW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3MsIEIzOjpUeXBlIHR5
cGUsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CisgICAgQjM6OlZh
bHVlUmVwIG1hcnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBz
aXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAogICAgIHsKICAgICAgICAg
aWYgKGNvdW50IDwgcmVnQXJncy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gQjM6OlZhbHVl
UmVwOjpyZWcocmVnQXJnc1tjb3VudCsrXSk7CiAKICAgICAgICAgY291bnQrKzsKICAgICAgICAg
QjM6OlZhbHVlUmVwIHJlc3VsdCA9IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09m
ZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0LCB0
eXBlKTsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNzMsMTAgKzc0LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEIzOjpJbnQzMjoKICAg
ICAgICAgY2FzZSBCMzo6SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVu
dEltcGwobV9ncHJBcmdzLCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAg
ICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1l
bnRDb3VudCwgc3RhY2tPZmZzZXQpOwogICAgICAgICBjYXNlIEIzOjpGbG9hdDoKICAgICAgICAg
Y2FzZSBCMzo6RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBs
KG1fZnByQXJncywgdHlwZSwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAg
ICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291
bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAgICAgY2FzZSBCMzo6Vm9pZDoKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0xODksMTkgKzE5MCwxNDEgQEAgcHVibGljOgogICAgIGNvbnN0
IFJlZ2lzdGVyU2V0IG1fY2FsbGVyU2F2ZVJlZ2lzdGVyczsKIH07CiAKLWlubGluZSB1bnNpZ25l
ZCBuZXh0SlNDT2Zmc2V0KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlKQordGVtcGxh
dGU8dW5zaWduZWQgaGVhZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CitjbGFzcyBD
YWxsaW5nQ29udmVudGlvbkFpciB7CitwdWJsaWM6CisgICAgQ2FsbGluZ0NvbnZlbnRpb25BaXIo
VmVjdG9yPFJlZz4mJiBncHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0
JiYgY2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJB
cmdzKSkKKyAgICAgICAgLCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBt
X2NhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVyU2V0IHNjcmF0Y2ggPSBSZWdpc3RlclNldDo6YWxsR1BScygpOwor
ICAgICAgICBzY3JhdGNoLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVy
cygpKTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3
YXJlUmVnaXN0ZXJzKCkpOworICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2dwckFyZ3MpCisgICAg
ICAgICAgICBzY3JhdGNoLmNsZWFyKHJlZyk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IHNjcmF0
Y2gpCisgICAgICAgICAgICBtX3NjcmF0Y2hHUFJzLmFwcGVuZChyZWcpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX3NjcmF0Y2hHUFJzLnNpemUoKSA+PSAzKTsKKyAgICB9CisKKyAgICBHUFJS
ZWcgcHJvbG9ndWVTY3JhdGNoKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX3NjcmF0Y2hHUFJz
W2ldLmdwcigpOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMs
IHR5cGVuYW1lIFN0YWNrRnVuYz4KKyAgICB2b2lkIG1hcnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0
IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0
LCBjb25zdCBSZWdGdW5jJiByZWdGdW5jLCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKSB7CisgICAgICAg
ICAgICByZWdGdW5jKHJlZ0FyZ3NbY291bnQrK10pOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgc3RhY2tGdW5jKHN0YWNrT2Zmc2V0
KTsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOworICAg
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWdGdW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+
CisgICAgdm9pZCBtYXJzaGFsbEFyZ3VtZW50KFR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50
Q291bnQsIHNpemVfdCYgZnBBcmd1bWVudENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25z
dCBSZWdGdW5jJiByZWdGdW5jLCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbCht
X2dwckFyZ3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVu
Yyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAg
IGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJB
cmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCByZWdGdW5jLCBzdGFja0Z1bmMpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCitwdWJsaWM6CisgICAg
c3RhdGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGxvYWRBcmd1bWVu
dHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNv
bnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAg
c2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9
IGhlYWRlclNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQoc2ln
bmF0dXJlLmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3Rh
Y2tPZmZzZXQsCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0b3IoQjM6OkFpcjo6VG1wKHJlZyksIGkpOworICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgWyZdIChzaXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3RvcihCMzo6QWlyOjpBcmc6OmFkZHIoQjM6OkFpcjo6VG1wKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKSwgc3RhY2tPZmZzZXQpLCBpKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFj
aHBvaW50RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0dXBDYWxsKEIzOjpB
aXI6OkNvZGUmIGNvZGUsIFR5cGUgcmV0dXJuVHlwZSwgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCwgY29uc3QgVmVjdG9yPEIzOjpBaXI6OlRtcD4mIGFyZ3MsIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0g
MDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBz
dGFja09mZnNldCA9IGhlYWRlclNpemUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAg
ICAgICAgZm9yIChhdXRvIHRtcCA6IGFyZ3MpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1l
bnQodG1wLmlzR1AoKSA/IFR5cGU6Okk2NCA6IFR5cGU6OkY2NCwgZ3BBcmd1bWVudENvdW50LCBm
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJl
ZykgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpyZWco
cmVnKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBz
dGFja09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVl
UmVwOjpzdGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKworICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0
KSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNy
b1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJl
Z2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKworICAgICAgICBzd2l0
Y2ggKHJldHVyblR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6
OnJlZyhGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAg
cGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZ3ByQXJnczsKKyAgICBjb25zdCBWZWN0b3I8
UmVnPiBtX2ZwckFyZ3M7CisgICAgVmVjdG9yPFJlZz4gbV9zY3JhdGNoR1BSczsKKyAgICBjb25z
dCBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgY29uc3QgUmVnaXN0ZXJT
ZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJzOworfTsKKworaW5saW5lIHVuc2lnbmVkIG5leHRKU0NP
ZmZzZXQodW5zaWduZWQgY3VycmVudE9mZnNldCkKIHsKICAgICByZXR1cm4gY3VycmVudE9mZnNl
dCArIHNpemVvZihSZWdpc3Rlcik7CiB9CiAKIGNvbnN0ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJT
aXplID0gRXhlY1N0YXRlOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
OwotdHlwZWRlZiBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0
PiBKU0NDYWxsaW5nQ29udmVudGlvbjsKLQotdHlwZWRlZiBKU0NDYWxsaW5nQ29udmVudGlvbiBX
YXNtQ2FsbGluZ0NvbnZlbnRpb247CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uID0gQ2Fs
bGluZ0NvbnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNt
Q2FsbGluZ0NvbnZlbnRpb24gPSBKU0NDYWxsaW5nQ29udmVudGlvbjsKIGNvbnN0IEpTQ0NhbGxp
bmdDb252ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVudGlvbigpOwogY29uc3QgV2FzbUNhbGxpbmdD
b252ZW50aW9uJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKIAordXNpbmcgSlNDQ2FsbGluZ0Nv
bnZlbnRpb25BaXIgPSBDYWxsaW5nQ29udmVudGlvbkFpcjxqc2NIZWFkZXJTaXplLCBuZXh0SlND
T2Zmc2V0PjsKK3VzaW5nIFdhc21DYWxsaW5nQ29udmVudGlvbkFpciA9IEpTQ0NhbGxpbmdDb252
ZW50aW9uQWlyOworY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252
ZW50aW9uQWlyKCk7Citjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5n
Q29udmVudGlvbkFpcigpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360415</attachid>
            <date>2019-01-28 18:52:08 -0800</date>
            <delta_ts>2019-01-28 19:21:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>163306</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDkgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgICAgICBicmVhazsKICAgICB9CiAK
KyAgICBpZiAoIXZhbHVlKSAvLyBPT1BTCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xv
YmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlk
ZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQog
ICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hB
cmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUo
KQogewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2
b2lkIENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8
UmVnPiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVk
UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vh
a1JhbmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9p
ZCBlbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0
ZXhwciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVk
ZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1
cmUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9j
ZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUV4
Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRl
ICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2Fz
bU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiV2Fz
bVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSA8
bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25zdHJhaW5lZFRtcCB7CisgICAgQ29uc3RyYWlu
ZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25zdHJhaW5lZFRtcCh0bXAsIHRtcC5pc1JlZygp
ID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygpKSA6IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCwgQjM6OlZhbHVlUmVw
IHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAgICAgICAsIHJlcChyZXApCisgICAgeworICAg
IH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZhbHVlUmVwIHJlcDsKK307CisKK2NsYXNzIEFp
cklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAg
ICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdpbiwgVHlwZSByZXR1cm5UeXBlLCBUbXAgcmVz
dWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Js
b2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisg
ICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAgICAgICAgICAsIHNw
ZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwgcmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAg
ICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsgLy8gT09QUworICAgICAg
ICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBl
ICE9IFR5cGU6OlZvaWQpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1w
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBl
ID09IFR5cGU6OlZvaWQpOworICAgICAgICB9CisKKyAgICAgICAgQ29udHJvbERhdGEoKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIklmOiAg
ICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tU
eXBlOjpCbG9jazoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgor
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9vcDogICAgICIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVsOgorICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpj
b250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOworICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCpzcGVjaWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUiKTsKKyAgICAgICAgfQorCisgICAgICAgIEJs
b2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gYmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlw
ZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiByZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9v
bCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQor
CisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrRm9yQnJhbmNoKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJs
b2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7CisgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0
cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAg
dXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAsIDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhp
CisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRGb3JCcmFuY2goKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJh
dG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tUeXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3Vs
dExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHJldHVyblR5cGU7CisgICAgfTsKKworICAgIHVz
aW5nIEV4cHJlc3Npb25UeXBlID0gVG1wOworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJv
bERhdGE7CisgICAgdXNpbmcgRXhwcmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUs
IDE+OworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBDb250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAg
ICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNv
bnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25zdCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJl
c3Npb247CisKKyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBl
Y3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47Cisg
ICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3Rl
ZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAg
eworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21t
ZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFr
ZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0
cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2RlZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihj
b25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsg
ICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25N
b2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2Vw
dGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOworICAgIEV4cHJl
c3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KTsKKworICAgIC8vIExvY2Fscwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUp
OworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVz
c2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRvcnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93CisgICAgQ29udHJv
bERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAg
ICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUp
OworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0
dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRh
JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOworCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEm
IGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50
cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwor
CisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
YWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKwor
ICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Np
b25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlLCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlh
bFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3AoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9u
VHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisK
KyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywg
Y29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJz
ZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBw
YXJzZXI7IH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NlcnRJc1ZhbGlkSW5zdChJbnN0JiBp
bnN0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAg
IGlmICghaW5zdC5pc1ZhbGlkRm9ybSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGlu
c3QpOworICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBw
ZW5kKEJhc2ljQmxvY2sqIGJsb2NrLCBLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKKyAgICB7CisgICAgICAgIC8vIE9PUFM6IEFkZCBvcmlnaW4KKyAgICAgICAgYXV0byYgaW5z
dCA9IGJsb2NrLT5hcHBlbmQoa2luZCwgbnVsbHB0ciwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4o
YXJndW1lbnRzKS4uLik7CisgICAgICAgIGFzc2VydElzVmFsaWRJbnN0KGluc3QpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChL
aW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFwcGVu
ZChtX2N1cnJlbnRCbG9jaywga2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRz
KS4uLik7CisgICAgfQorCisgICAgVG1wIHRtcChCMzo6QmFuayBiYW5rKSB7IHJldHVybiBtX2Nv
ZGUubmV3VG1wKGJhbmspOyB9CisgICAgVG1wIGdwcigpIHsgcmV0dXJuIHRtcChCMzo6R1ApOyB9
CisgICAgVG1wIGZwcigpIHsgcmV0dXJuIHRtcChCMzo6RlApOyB9CisgICAgVG1wIHRtcEZvclR5
cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVy
biBncHIoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0
OgorICAgICAgICAgICAgcmV0dXJuIGZwcigpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQjM6OlBhdGNocG9pbnRW
YWx1ZSogYWRkUGF0Y2hwb2ludChCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcHJvYy5hZGQ8QjM6OlBhdGNocG9pbnRWYWx1ZT4odHlwZSwgQjM6Ok9yaWdpbigpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRj
aHBvaW50KEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRo
ZUFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0
Y2gsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KHRoZUFyZ3MpLi4uKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJh
c2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVz
dWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNp
Y0Jsb2NrLCBwYXRjaCwgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIHNpemVvZi4uLihB
cmdzKT46OmZyb20odGhlQXJncy4uLikpOworICAgIH0KKworICAgIHZvaWQgZW1pdFBhdGNocG9p
bnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRt
cCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRj
aCwgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+KCkpOworICAgIH0KKworICAgIHRlbXBs
YXRlIDxzaXplX3QgaW5saW5lU2l6ZT4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxv
Y2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBW
ZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKKyAgICB7CisgICAgICAg
IGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkKKyAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNp
YWwgPSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lh
bChzdGQ6Om1ha2VfdW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOworCisgICAgICAg
IEluc3QgaW5zdChQYXRjaCwgcGF0Y2gsIEFyZzo6c3BlY2lhbChtX3BhdGNocG9pbnRTcGVjaWFs
KSk7CisgICAgICAgIEluc3QgcmVzdWx0TW92OworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAg
ICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSAhPSBCMzo6Vm9pZCk7CisgICAgICAgICAgICBz
d2l0Y2ggKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LmtpbmQoKSkgeworICAgICAgICAgICAgY2Fz
ZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBl
bmQoVG1wKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKSk7CisgICAgICAgICAgICAgICAg
cmVzdWx0TW92ID0gSW5zdChyZXN1bHQuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIG51bGxw
dHIsIFRtcChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSksIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSA9PSBCMzo6Vm9pZCk7CisgICAgICAg
IAorICAgICAgICBmb3IgKENvbnN0cmFpbmVkVG1wJiB0bXAgOiBhcmdzKSB7CisgICAgICAgICAg
ICAvLyBPT1BTOiBVZ2gsIHRoaXMgaXMgc3VwZXIgY3JhcHB5IHRvIGp1c3QgdXNlIG51bGxwdHIg
Zm9yIEIzOjpWYWx1ZSogaGVyZS4KKyAgICAgICAgICAgIC8vIEkgdGhpbmsgdGhpcyB3aWxsIGp1
c3Qgd29yaywgYnV0IG91ciBhbHRlcm5hdGl2ZSBvcHRpb25zIGlzIHRvIGFic3RyYWN0CisgICAg
ICAgICAgICAvLyBvciByZWludmVudCBwYXJ0IG9mIFBhdGNocG9pbnRTcGVjaWFsLgorICAgICAg
ICAgICAgQjM6OlZhbHVlKiBkdW1teVZhbHVlID0gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmln
aW4oKSwgdG1wLnRtcC5pc0dQKCkgPyBCMzo6SW50NjQgOiBCMzo6RG91YmxlLCAwKTsKKyAgICAg
ICAgICAgIHBhdGNoLT5hcHBlbmQoZHVtbXlWYWx1ZSwgdG1wLnJlcCk7CisgICAgICAgICAgICBz
d2l0Y2ggKHRtcC5yZXAua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wLnRtcCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6
UmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgLy8gT09QUzogSSB0aGluayB3ZSB3YW50IHR5cGUg
aGVyZSB0byBkaXN0aW5ndWlzaCBpMzIvaTYzIGFuZCBmMzIvZjY0CisgICAgICAgICAgICAgICAg
cGF0Y2gtPmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodG1wLnRtcC5yZWcoKSk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKGJhc2ljQmxvY2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3Vi
bGUsIHRtcC50bXAsIHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoVG1wKHRtcC5yZXAucmVnKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OiB7CisgICAgICAgICAgICAg
ICAgLy8gT09QUzogSSB0aGluayB3ZSB3YW50IHR5cGUgaGVyZSB0byBkaXN0aW5ndWlzaCBpMzIv
aTYzIGFuZCBmMzIvZjY0CisgICAgICAgICAgICAgICAgYXV0byBhcmcgPSBBcmc6OmNhbGxBcmco
dG1wLnJlcC5vZmZzZXRGcm9tU1AoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKGJhc2ljQmxv
Y2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIHRtcC50bXAsIGFyZyk7Cisg
ICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAg
ICAgICBwYXRjaC0+bGF0ZUNsb2JiZXJlZCgpLmNsZWFyKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50
LnJlZygpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2gtPm51bUdQU2NyYXRjaFJl
Z2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoZ3ByKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRjaC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07
KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChmcHIoKSk7CisKKyAgICAgICAgYXNzZXJ0
SXNWYWxpZEluc3QoaW5zdCk7CisgICAgICAgIGJhc2ljQmxvY2stPmFwcGVuZChXVEZNb3ZlKGlu
c3QpKTsKKyAgICAgICAgaWYgKHJlc3VsdE1vdikgeworICAgICAgICAgICAgYXNzZXJ0SXNWYWxp
ZEluc3QocmVzdWx0TW92KTsKKyAgICAgICAgICAgIGJhc2ljQmxvY2stPmFwcGVuZChXVEZNb3Zl
KHJlc3VsdE1vdikpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJyYW5jaCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdENoZWNrKGNvbnN0IEJy
YW5jaCYgZW1pdEJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCisgICAgeworICAg
ICAgICAvLyBXZSBmYWlsIGFsb25nIHRoZSAidHJ1dGh5IiBlZGdlIG9mICdicmFuY2gnCisKKyAg
ICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGZhaWxlZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICAKKyAg
ICAgICAgZW1pdEJyYW5jaCgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29y
cyhmYWlsZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgYXV0byogZmFpbGVkUGF0Y2hwb2lu
dCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBmYWlsZWRQYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZmFpbGVkLCBm
YWlsZWRQYXRjaHBvaW50LCBUbXAoKSk7CisgICAgICAgIGFwcGVuZChmYWlsZWQsIE9vcHMpOwor
CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdEND
YWxsKEZ1bmMgZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAg
ZW1pdENDYWxsKG1fY3VycmVudEJsb2NrLCBmdW5jLCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFt
ZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2ljQmxvY2sqIGJsb2NrLCBGdW5jIGZ1
bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAgICB7CisgICAgICAgIEluc3QgaW5z
dChDQ2FsbCwgbnVsbHB0cik7CisKKyAgICAgICAgVG1wIGNhbGxlZSA9IGdwcigpOworICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjppbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLCBC
M0NDYWxsUHRyVGFnKSksIGNhbGxlZSk7CisgICAgICAgIGluc3QuYXJncy5hcHBlbmQoY2FsbGVl
KTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChy
ZXN1bHQpOworCisgICAgICAgIGZvciAoVG1wIHRtcCA6IFZlY3RvcjxUbXAsIHNpemVvZi4uLihB
cmdzKT46OmZyb20odGhlQXJncy4uLikpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRt
cCk7CisKKyAgICAgICAgYmxvY2stPmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQjM6OkFpcjo6T3Bjb2RlIG1vdmVPcEZvclZhbHVlVHlwZShUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6Cisg
ICAgICAgICAgICByZXR1cm4gTW92ZTMyOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAg
IHJldHVybiBNb3ZlRmxvYXQ7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAg
cmV0dXJuIE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBlbWl0
VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisKKyAgICB2b2lk
IGVtaXRUaWVyVXBDaGVjayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbik7CisK
KyAgICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBF
eHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIHVpbnQzMl90IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9m
ZnNldCk7CisKKyAgICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlJiBkc3QsIGNvbnN0
IEV4cHJlc3Npb25UeXBlJiBzb3VyY2UpOworICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
Y29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiBzdGFj
ayk7CisKKyAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRpdihCMzo6T3Bjb2RlLCBFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCk7CisKKyAgICBpbnQzMl90IFdBUk5f
VU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWlu
dDMyX3QpOworCisgICAgdm9pZCByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2Nr
KiwgVG1wKTsKKyAgICBlbnVtIGNsYXNzIFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHsgTm8sIFll
cyB9OworICAgIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hl
ZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgVG1wIGluc3RhbmNlLCBCYXNp
Y0Jsb2NrKik7CisKKyAgICBCMzo6T3JpZ2luIG9yaWdpbigpOyAvLyBPT1BTOiBXZSBuZWVkIHRv
IG1ha2UgYW4gQWlyOjpPcmlnaW4gc2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgZnJvbSBCMyBj
b2RlLgorCisgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51
bGxwdHIgfTsKKyAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIGNvbnN0
IE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKKyAgICBj
b25zdCBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGUgeyBDb21waWxhdGlvbk1vZGU6
OkJCUU1vZGUgfTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXggeyBVSU5UX01B
WCB9OworICAgIGNvbnN0IFRpZXJVcENvdW50KiBtX3RpZXJVcCB7IG51bGxwdHIgfTsKKworICAg
IEIzOjpQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFzaWNCbG9j
ayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9yb290Qmxv
Y2sgeyBudWxscHRyIH07CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxUbXAsIFR5cGU+PiBtX2xvY2Fs
czsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3
aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgR1BSUmVnIG1fbWVt
b3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BS
IHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisg
ICAgVG1wIG1faW5zdGFuY2VWYWx1ZTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cg
dG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgor
ICAgIGJvb2wgbV91c2VzSW5zdGFuY2VWYWx1ZSB7IGZhbHNlIH07CisgICAgVG1wIGluc3RhbmNl
VmFsdWUoKQorICAgIHsKKyAgICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7CisgICAg
ICAgIHJldHVybiBtX2luc3RhbmNlVmFsdWU7CisgICAgfQorCisgICAgdWludDMyX3QgbV9tYXhO
dW1KU0NhbGxBcmd1bWVudHMgeyAwIH07CisKKyAgICBCMzo6UGF0Y2hwb2ludFNwZWNpYWwqIG1f
cGF0Y2hwb2ludFNwZWNpYWwgeyBudWxscHRyIH07Cit9OworCitjb25zdCBUbXAgQWlySVJHZW5l
cmF0b3I6OmVtcHR5RXhwcmVzc2lvbiA9IFRtcCgpOworCisvLyBNZW1vcnkgYWNjZXNzZXMgaW4g
V2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhh
dmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgoraW50MzJfdCBBaXJJUkdlbmVyYXRvcjo6
Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZz
ZXQpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgeworICAg
ICAgICBUbXAgcHJldmlvdXNQdHIgPSBwdHI7CisgICAgICAgIHB0ciA9IGdwcigpOworICAgICAg
ICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1t
KG9mZnNldCksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjb25zdGFudCwgcHJl
dmlvdXNQdHIsIHB0cik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gb2Zm
c2V0OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5j
ZShCYXNpY0Jsb2NrKiBibG9jaywgVG1wIGluc3RhbmNlKQoreworICAgIGlmIChDb250ZXh0Ojp1
c2VGYXN0VExTKCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQo
QjM6OlZvaWQpOworICAgICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5z
dGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBwYXRjaHBvaW50
LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVy
czo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigp
KTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50
LCBUbXAoKSwgaW5zdGFuY2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklY
TUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2Ug
cmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBp
biB0aGUgY2FsbGVyIHNpZGUuCisgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFy
Z3VtZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4K
KyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgQjM6
OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgZWZmZWN0cy53cml0
ZXNQaW5uZWQgPSB0cnVlOworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3Ao
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKKyAgICBwYXRjaHBvaW50LT5j
bG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKKyAgICBH
UFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsK
KyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKKyAgICAgICAgaml0Lm1v
dmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgIH0pOworICAg
IGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOworfQor
CitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGls
YXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwg
dW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCisg
ICAgOiBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9jb21waWxhdGlv
bk1vZGUoY29tcGlsYXRpb25Nb2RlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5k
ZXgpCisgICAgLCBtX3RpZXJVcCh0aWVyVXApCisgICAgLCBtX3Byb2MocHJvY2VkdXJlKQorICAg
ICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCisgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
KHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQoreworICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgbV9yb290QmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKworICAgIC8v
IEZJWE1FIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0aGVy
ZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMgd2FzbSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZvciBu
b3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKKyAgICBj
b25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86
OmdldCgpOworCisgICAgbV9tZW1vcnlCYXNlR1BSID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9p
bnRlcjsKKyAgICBtX2NvZGUucGluUmVnaXN0ZXIobV9tZW1vcnlCYXNlR1BSKTsKKworICAgIG1f
d2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBv
aW50ZXI7CisgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIG1fY29kZS5w
aW5SZWdpc3RlcihtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpOworCisgICAgaWYgKG1vZGUgIT0g
TWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOworICAgICAgICBmb3IgKGNvbnN0
IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3Rl
cnMpCisgICAgICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIp
OworICAgIH0KKworICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5rczo6
c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisK
KyAgICBpZiAoaW5mby5tZW1vcnkpIHsKKyAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVj
a0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7Cisg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgICAgICAgICAgY2FzZSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBp
bm5lZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgSW52YWxpZEdQUlJlZyA9PSBwaW5uZWRH
UFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNN
ZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgewor
ICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAgICAgLy8g
TW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8gYW4gZXhwbGlj
aXQKKyAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJlbHkg
b24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0CisgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRz
IGFjY2Vzc2VzLiBGYXVsdFNpZ25hbEhhbmRsZXIgbm9uZXRoZWxlc3MgbmVlZHMgdGhlCisgICAg
ICAgICAgICAvLyB0aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRvIHRoYXQgdGh1
bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2Nv
ZGUuc2V0TnVtRW50cnlwb2ludHMoMSk7CisKKyAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0g
Q29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9n
dWVTY3JhdGNoKDIpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworCisgICAgUmVmPEIzOjpB
aXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRh
c2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQ
cm9sb2d1ZShqaXQpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisgICAgICAg
ICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KGNhbGxlZUdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgIGppdC5lbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IENoZWNrZWQ8aW50MzJf
dD4gd2FzbUZyYW1lU2l6ZSA9IG1fY29kZS5mcmFtZVNpemUoKTsKKyAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIG1pbmltdW1QYXJlbnRDaGVja1NpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCAxMDI0KTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGV4dHJhRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgc3RkOjptYXg8dWludDMyX3Q+KAorICAgICAgICAgICAgICAgIC8vIFRoaXMg
YWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIHRl
cm1pbmFsIG5vZGVzIGluIHRoZSBjYWxsCisgICAgICAgICAgICAgICAgLy8gdHJlZSwgKGUuZyB0
aGV5IGRvbid0IG1ha2UgYW55IGNhbGxzKSBhbmQgaGF2ZSBhIHNtYWxsIGVub3VnaCBmcmFtZSBz
aXplLiBUaGlzIHdvcmtzIGJ5CisgICAgICAgICAgICAgICAgLy8gaGF2aW5nIGFueSBzdWNoIHRl
cm1pbmFsIG5vZGUgaGF2ZSBpdHMgcGFyZW50IGNhbGxlciBpbmNsdWRlIHNvbWUgZXh0cmEgc2l6
ZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAvLyBvd24gY2hlY2sgZm9yIGl0LiBUaGUgZ29hbCBo
ZXJlIGlzIHR3b2ZvbGQ6CisgICAgICAgICAgICAgICAgLy8gMS4gRW1pdCBsZXNzIGNvZGUuCisg
ICAgICAgICAgICAgICAgLy8gMi4gVHJ5IHRvIHNwZWVkIHRoaW5ncyB1cCBieSBza2lwcGluZyBz
dGFjayBjaGVja3MuCisgICAgICAgICAgICAgICAgbWluaW11bVBhcmVudENoZWNrU2l6ZSwKKyAg
ICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgaW4g
dGhlIFdhc20gLT4gRW1iZWRkZXIgY2FsbCBJQyBzdHViLiBTaW5jZSB0aGVzZSB3aWxsCisgICAg
ICAgICAgICAgICAgLy8gc3BpbGwgYWxsIGFyZ3VtZW50cyB0byB0aGUgc3RhY2ssIHdlIGVuc3Vy
ZSB0aGF0IGEgc3RhY2sgY2hlY2sgaGVyZSBjb3ZlcnMgdGhlCisgICAgICAgICAgICAgICAgLy8g
c3RhY2sgdGhhdCBzdWNoIGEgc3R1YiB3b3VsZCB1c2UuCisgICAgICAgICAgICAgICAgKENoZWNr
ZWQ8dWludDMyX3Q+KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzKSAqIHNpemVvZihSZWdpc3Rlcikg
KyBqc2NDYWxsaW5nQ29udmVudGlvbigpLmhlYWRlclNpemVJbkJ5dGVzKCkpLnVuc2FmZUdldCgp
CisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGNvbnN0IGludDMyX3QgY2hlY2tTaXplID0g
bV9tYWtlc0NhbGxzID8gKHdhc21GcmFtZVNpemUgKyBleHRyYUZyYW1lU2l6ZSkudW5zYWZlR2V0
KCkgOiB3YXNtRnJhbWVTaXplLnVuc2FmZUdldCgpOworICAgICAgICAgICAgYm9vbCBuZWVkVW5k
ZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6
OnJlc2VydmVkWm9uZVNpemUoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNr
ID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6
ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CisKKyAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGxl
YWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6ZSBp
cyB3aXRoaW4KKyAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNhbGxl
ciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCisgICAgICAgICAgICBpZiAobmVl
ZHNPdmVyZmxvd0NoZWNrKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIo
KS5wcm9sb2d1ZVNjcmF0Y2goMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNl
RmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFu
Y2UoY29udGV4dEluc3RhbmNlKTsKKworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBvdmVyZmxvdzsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobmVlZFVuZGVyZmxv
d0NoZWNrKSkKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaDEsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tP
dmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNr
IGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29y
cmVjdC4KKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBh
bGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVl
ZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0
IGFjdHVhbGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9p
bnQgY29uc2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNo
ZWNrKSB3aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSk7CisKKyAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBv
aW50KDAsIFdURk1vdmUocHJvbG9ndWVHZW5lcmF0b3IpKTsKKworICAgIGlmIChDb250ZXh0Ojp1
c2VGYXN0VExTKCkpIHsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZ3ByKCk7CisgICAgICAg
IC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gb25seSBkbyB0aGlzIGlmIHdlIHVzZSBpbnN0YW5j
ZSB2YWx1ZS4KKyAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChjb250ZXh0SW5zdGFuY2UpLCBtX2lu
c3RhbmNlVmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBUbXAo
Y29udGV4dEluc3RhbmNlKTsKKworICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKKyAgICBt
X2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
VHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAg
ICAgICAgICAgbV9sb2NhbHNbaV0gPSB7IGdwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAg
ICAgICAgICAgbV9sb2NhbHNbaV0gPSB7IGZwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIo
KS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZSwgWyZdIChjb25zdCBBcmcmIGFyZywgdW5zaWduZWQg
aSkgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICBj
YXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIGFyZywgbV9sb2NhbHNb
aV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6STY0Ogor
ICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgYXBwZW5k
KE1vdmVGbG9hdCwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwg
YXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICB9KTsKKworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25F
bnRyeURlY3JlbWVudCgpLCBCMzo6T3JpZ2luKCkpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9y
OjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCBy
ZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwg
VG1wIGluc3RhbmNlLCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZShibG9jaywgaW5zdGFuY2UpOworCisgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFj
a0xpbWl0ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKKyAgICAgICAgLy8gVGhl
IEluc3RhbmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0
cyBjYW5vbmljYWwgbG9jYXRpb24gaXMuCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRl
Y2x0eXBlKHN0YXRpY19jYXN0PEluc3RhbmNlKj4obnVsbHB0ciktPmNhY2hlZFN0YWNrTGltaXQo
KSkpID09IHNpemVvZih1aW50NjRfdCksICIiKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChB
cmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0KCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNW
YWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSwgQjM6Oldp
ZHRoNjQpKTsKKyAgICAgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKGJsb2Nr
LCBNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZQb2lu
dGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBN
b3ZlLCBBcmc6OmFkZHIodGVtcCksIHRlbXApOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUs
IHRlbXAsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSkpOworICAgIH0KKworICAgIGlmICghIW1lbW9yeSkgeworICAgICAgICBj
b25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CisgICAgICAgIGNsb2JiZXJz
LnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgIGZvciAoYXV0byBp
bmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIGNsb2JiZXJzLnNl
dChpbmZvLnNpemVSZWdpc3Rlcik7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBh
dGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVm
ZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAg
ICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNs
b2JiZXJzKTsKKworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJlZ3Nd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MtPmJh
c2VNZW1vcnlQb2ludGVyOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5u
ZWRSZWdzLT5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUo
KSA+PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8v
IFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVz
IHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBd
LmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigt
c2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJl
Z3NbaV0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9p
bnQocGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgQWlySVJH
ZW5lcmF0b3I6OmVtaXRUaHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9u
VHlwZSB0eXBlKQoreworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAg
YXV0byBqdW1wVG9FeGNlcHRpb25TdHViID0gaml0Lmp1bXAoKTsKKworICAgIGppdC5hZGRMaW5r
VGFzayhbanVtcFRvRXhjZXB0aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICB9KTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0b3Rh
bEJ5dGVzQ2hlY2tlZCA9IGNvdW50OworICAgIHRvdGFsQnl0ZXNDaGVja2VkICs9IG1fbG9jYWxz
LnNpemUoKTsKKyAgICB1aW50MzJfdCB0b3RhbEJ5dGVzOworICAgIFdBU01fQ09NUElMRV9GQUlM
X0lGKCh0b3RhbEJ5dGVzQ2hlY2tlZC5zYWZlR2V0KHRvdGFsQnl0ZXMpID09IENoZWNrZWRTdGF0
ZTo6RGlkT3ZlcmZsb3cpIHx8ICFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxCeXRl
cyksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFsQnl0ZXMsICIgbG9jYWxzIik7
CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlw
ZTo6STY0OiB7CisgICAgICAgICAgICBUbXAgbG9jYWwgPSBncHIoKTsKKyAgICAgICAgICAgIG1f
bG9jYWxzLnVuY2hlY2tlZEFwcGVuZCh7IGxvY2FsLCB0eXBlIH0pOworICAgICAgICAgICAgYXBw
ZW5kKFhvcjY0LCBsb2NhbCwgbG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OiB7CisgICAg
ICAgICAgICBUbXAgbG9jYWwgPSBmcHIoKTsKKyAgICAgICAgICAgIG1fbG9jYWxzLnVuY2hlY2tl
ZEFwcGVuZCh7IGxvY2FsLCB0eXBlIH0pOworICAgICAgICAgICAgVG1wIHRlbXAgPSBncHIoKTsK
KyAgICAgICAgICAgIC8vIElFRUUgNzU0ICIwIiBpcyBqdXN0IGludDMyLzY0IHplcm8uCisgICAg
ICAgICAgICBhcHBlbmQoWG9yNjQsIHRlbXAsIHRlbXApOworICAgICAgICAgICAgYXBwZW5kKHR5
cGUgPT0gVHlwZTo6RjMyID8gTW92ZTMyVG9GbG9hdCA6IE1vdmU2NFRvRG91YmxlLCB0ZW1wLCBs
b2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUzogSXMgdGhp
cyBjb3JyZWN0PworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZENvbnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpIC0+
IEV4cHJlc3Npb25UeXBlCit7CisgICAgVG1wIHJlc3VsdDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSh2YWx1ZSksIHJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjMyOgorICAgIGNhc2UgVHlwZTo6
RjY0OiB7CisgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBUbXAgdG1wID0gZ3ByKCk7
CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSh2YWx1ZSksIHRtcCk7CisgICAgICAg
IGFwcGVuZCh0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJs
ZSwgdG1wLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7CisKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9sb2NhbHMuc2l6ZSgpID09IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOyAvLyBX
ZSBoYW5kbGUgYXJndW1lbnRzIGluIHRoZSBwcm9sb2d1ZQorICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2lu
ZGV4XS5maXJzdCk7CisgICAgcmVzdWx0ID0gbV9sb2NhbHNbaW5kZXhdLmZpcnN0LmlzR1AoKSA/
IGdwcigpIDogZnByKCk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZShtX2xvY2Fsc1tp
bmRleF0uc2Vjb25kKSwgbV9sb2NhbHNbaW5kZXhdLmZpcnN0LCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVucmVhY2hhYmxlID0gYWRk
UGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgdW5yZWFjaGFibGUtPnNldEdlbmVyYXRvcihbdGhp
c10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBl
OjpVbnJlYWNoYWJsZSk7CisgICAgfSk7CisgICAgdW5yZWFjaGFibGUtPmVmZmVjdHMudGVybWlu
YWwgPSB0cnVlOworICAgIGVtaXRQYXRjaHBvaW50KHVucmVhY2hhYmxlLCBUbXAoKSk7CisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHBy
ZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGludDMyX3QgKCpncm93TWVtb3J5KSh2b2lkKiwgSW5zdGFuY2UqLCBpbnQzMl90
KSA9IFtdICh2b2lkKiBjYWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0
YSkgLT4gaW50MzJfdCB7CisgICAgICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxs
RnJhbWUpOworCisgICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7
CisKKyAgICAgICAgYXV0byBncm93biA9IGluc3RhbmNlLT5tZW1vcnkoKS0+Z3JvdyhQYWdlQ291
bnQoZGVsdGEpKTsKKyAgICAgICAgaWYgKCFncm93bikgeworICAgICAgICAgICAgc3dpdGNoIChn
cm93bi5lcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246
OkludmFsaWREZWx0YToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6
SW52YWxpZEdyb3dTaXplOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29u
OjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKKyAgICB9Owor
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdENDYWxsKGdyb3dNZW1vcnksIHJlc3VsdCwg
VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgaW5zdGFuY2VWYWx1ZSgpLCBkZWx0YSk7
CisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGlt
aXQ6Ok5vLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRN
ZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0YXRpY19jYXN0PE1lbW9yeSo+KG51bGxwdHIp
LT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBz
aXplIik7CisKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAgIFRtcCB0ZW1wMSA9IGdwcigpOwor
CisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkTWVtb3J5U2l6ZSgpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlT
aXplKCkpLCB0ZW1wMSk7CisgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsK
KyAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZh
bHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7
CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKDE2KSwgcmVzdWx0KTsKKyAgICBhZGRTaGlmdChV
cnNoaWZ0NjQsIHRlbXAxLCByZXN1bHQsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcmVz
dWx0LCByZXN1bHQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XS5maXJzdCk7CisgICAgYXBw
ZW5kKG1vdmVPcEZvclZhbHVlVHlwZShtX2xvY2Fsc1tpbmRleF0uc2Vjb25kKSwgdmFsdWUsIG1f
bG9jYWxzW2luZGV4XS5maXJzdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdl
bmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVHlwZSB0eXBlID0gbV9pbmZvLmdsb2JhbHNbaW5k
ZXhdLnR5cGU7CisKKyAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgVG1wIHRl
bXAgPSBncHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKElu
c3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygp
KSwgdGVtcCk7CisKKyAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVDYXN0PGludDMyX3Q+KGluZGV4
ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNl
dCwgQjM6OndpZHRoRm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQorICAgICAgICBhcHBlbmQobW92
ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgcmVzdWx0KTsK
KyAgICBlbHNlIHsKKyAgICAgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCB0ZW1wMik7CisgICAgICAgIGFwcGVuZChBZGQ2NCwg
dGVtcDIsIHRlbXAsIHRlbXApOworICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5
cGUpLCBBcmc6OmFkZHIodGVtcCksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgdGVtcCA9IGdwcigp
OworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9m
ZnNldE9mR2xvYmFscygpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFk
ZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpLCB0ZW1wKTsK
KworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOworCisgICAgaW50
MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3Rlcikp
OworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUo
dG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBl
KSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
VG1wIHRlbXAyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZz
ZXQpLCB0ZW1wMik7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgdGVtcDIsIHRlbXAsIHRlbXApOwor
ICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCB2YWx1ZSwgQXJnOjphZGRy
KHRlbXApKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCitpbmxpbmUgQWlySVJHZW5l
cmF0b3I6OkV4cHJlc3Npb25UeXBlIEFpcklSR2VuZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJl
UG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90
IHNpemVPZk9wZXJhdGlvbikKK3sKKyAgICBBU1NFUlQobV9tZW1vcnlCYXNlR1BSKTsKKyAgICBV
TlVTRURfUEFSQU0oc2l6ZU9mT3BlcmF0aW9uKTsgLy8gT09QUworCisgICAgc3dpdGNoIChtX21v
ZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMhCisKKyAgICAgICAgLy8gV2UncmUg
bm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3QgdGhlcmVmb3JlIGNoZWNr
IHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBzaXplLgor
ICAgICAgICAvL0FTU0VSVChtX21lbW9yeVNpemVHUFIpOworICAgICAgICAvL0FTU0VSVChzaXpl
T2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOworICAgICAgICAvL21fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG1fbWVt
b3J5U2l6ZUdQUiwgcG9pbnRlciwgc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0IC0gMSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7Cisg
ICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQgNEdpQityZWR6b25lIGZvciB0aGlzIG1l
bW9yeS4gT25seSB0aGUgdXNlci1hbGxvY2F0ZWQgcGFnZXMgYXJlIGFkZHJlc3NhYmxlLCBjb250
aWd1b3VzbHkgaW4gcmFuZ2UgWzAsIGN1cnJlbnRdLAorICAgICAgICAvLyBhbmQgZXZlcnl0aGlu
ZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05FLiBXZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55
IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0aGUgNEdpQiByYW5nZSBiZWNhdXNlIFdlYkFzc2Vt
Ymx5IHJlZ2lzdGVyCisgICAgICAgIC8vIG1lbW9yeSBhY2Nlc3NlcyBhcmUgMzItYml0LiBIb3dl
dmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyICsgb2Zmc2V0IGFjY2Vzc2VzIHBlcmZvcm0gdGhlIGFk
ZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nlc3MgYWJvdmUKKyAgICAgICAg
Ly8gdGhlIDMyLWJpdCBsaW1pdCAodGhlIG9mZnNldCBpcyB1bnNpZ25lZCAzMi1iaXQpLiBUaGUg
cmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgb2Zmc2V0cywgYW5kIHdlJ2xsIGV4cGxpY2l0
bHkgYm91bmRzIGNoZWNrIGFueQorICAgICAgICAvLyByZWdpc3RlciArIGxhcmdlIG9mZnNldCBh
Y2Nlc3MuIFdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBiZSBnZW5lcmF0ZWQgZnJlcXVlbnRseS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgdGhhdCByZWdpc3RlciArIGxh
cmdlIG9mZnNldCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3JlZHpvbmUgc2luY2UgdGhhdCdzIHRlY2hu
aWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lkIG92ZXJmbG93aW5nIHRoZQorICAgICAg
ICAvLyBQUk9UX05PTkUgcmVnaW9uLCBidXQgaXQncyBiZXR0ZXIgaWYgd2UgdXNlIGEgc21hbGxl
ciBpbW1lZGlhdGUgYmVjYXVzZSBpdCBjYW4gY29kZWdlbnMgYmV0dGVyLiBXZSBrbm93IHRoYXQg
YW55dGhpbmcgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICAvLyB0aGFuIHRoZSBkZWNsYXJl
ZCAnbWF4aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVt
YmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQgJ21heGltdW0nIHRoZW4gd2Ugc3RpbGwga25v
dyB0aGF0CisgICAgICAgIC8vIGFueSBhY2Nlc3MgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDRH
aUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUgcmVkem9uZS4KKyAgICAgICAgaWYgKG9m
ZnNldCA+PSBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKSkgeworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUyEKKyAgICAgICAgICAgIC8vc2l6
ZV90IG1heGltdW0gPSBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSA/IG1faW5mby5tZW1vcnkubWF4
aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Cisg
ICAgICAgICAgICAvL21fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHBvaW50ZXIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAt
IDEsIG1heGltdW0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisK
KyAgICBUbXAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcG9pbnRlciwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoQWRkNjQsIFRtcChtX21lbW9yeUJhc2VHUFIpLCByZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9h
ZE9wVHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
MzJMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAg
ICAgIHJldHVybiAxOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZV
OgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDMyUzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpGMzJMb2FkOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICByZXR1cm4gODsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFRt
cCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIGludDMyX3Qgb2Zmc2V0ID0gZml4
dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIFRtcCBpbW1UbXA7
CisgICAgVG1wIG5ld1B0cjsKKyAgICBUbXAgcmVzdWx0OworCisgICAgYXV0byBsb2FkQXJnID0g
WyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6Ondp
ZHRoRm9yQnl0ZXMoc2l6ZU9mTG9hZE9wKG9wKSkpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6
YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBpbW1UbXAgPSBncHIoKTsKKyAgICAgICAg
bmV3UHRyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQp
LCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIGltbVRtcCwgcG9pbnRlciwgbmV3UHRy
KTsKKyAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihuZXdQdHIpOworICAgIH07CisKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6IHsKKyAgICAgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOFM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVu
ZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBw
ZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOiB7CisgICAgICAgIHJlc3Vs
dCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDgsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsK
KyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVkIGFub3RoZXIgemV4dCBoZXJlPworICAgICAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4LCBsb2FkQXJnKCksIHJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2
UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25l
ZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOiB7CisgICAgICAgIHJlc3VsdCA9IGdw
cigpOworICAgICAgICBhcHBlbmQoTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCBy
ZXN1bHQpOworICAgICAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2Fk
MTZVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDE2LCBs
b2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDE2VTogeworICAgICAgICAvLyBPT1BTOiBEbyBJIG5lZWQgYW5vdGhl
ciB6ZXh0IGhlcmU/CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9h
ZDE2LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6
IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzIsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkMzJTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBl
bmQoTW92ZTMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0ZW5k
MzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
ICAgIGFwcGVuZChNb3ZlLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDogeworICAgICAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgbG9hZEFyZygpLCByZXN1bHQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBsb2FkQXJn
KCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9m
ZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLmlzR1AoKSk7CisK
KyAgICBpZiAoVU5MSUtFTFkoc3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZkxv
YWRPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2ggdGhpcyBpcyBwcm92
YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRpb24gZXJyb3IsIHNvIHdlIGhh
dmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVudGltZSBleGNlcHRpb24uIEhvd2V2
ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjQzNQorICAgICAgICBhdXRvKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQp
OworICAgICAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9y
eUFjY2Vzcyk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1w
KCkpOworCisgICAgICAgIC8vIFdlIHdvbid0IHJlYWNoIGhlcmUsIHNvIHdlIGp1c3QgcGljayBh
IHJhbmRvbSByZWcuCisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJMzJMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQxNlU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgICAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkOFU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzoKKyAgICAgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQzMlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDoKKyAgICAgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgorICAgICAgICAgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOgorICAg
ICAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6CisgICAgICAgICAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IGVsc2UKKyAgICAgICAg
cmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRl
ciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7IH07
Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQorewor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3Jl
MTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlOgor
ICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6
RjMyU3RvcmU6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgorICAgICAgICByZXR1cm4gODsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworCitpbmxpbmUg
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Np
b25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQor
eworICAgIGludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1
b2Zmc2V0KTsKKworICAgIFRtcCBpbW1UbXA7CisgICAgVG1wIG5ld1B0cjsKKworICAgIGF1dG8g
c3RvcmVBcmcgPSBbJl0gKCkgeworICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zm
c2V0LCBCMzo6d2lkdGhGb3JCeXRlcyhzaXplT2ZTdG9yZU9wKG9wKSkpKQorICAgICAgICAgICAg
cmV0dXJuIEFyZzo6YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBpbW1UbXAgPSBncHIo
KTsKKyAgICAgICAgbmV3UHRyID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJp
Z0ltbShvZmZzZXQpLCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIGltbVRtcCwgcG9p
bnRlciwgbmV3UHRyKTsKKyAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihuZXdQdHIpOworICAgIH07
CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4Ogor
ICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAgICAgICAgYXBwZW5kKFN0b3JlOCwg
dmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJNjRTdG9yZTE2OgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAg
ICAgIGFwcGVuZChTdG9yZTE2LCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6STMyU3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlMzIsIHZhbHVlLCBzdG9yZUFyZygpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAg
ICAgIGFwcGVuZChNb3ZlLCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZUZsb2F0
LCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVP
cFR5cGU6OkY2NFN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgdmFsdWUsIHN0b3Jl
QXJnKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5cGUg
b3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci5pc0dQKCkp
OworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXpl
T2ZTdG9yZU9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlz
IHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28g
d2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4g
SG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIGF1dG8qIHRocm93RXhjZXB0aW9uID0gYWRkUGF0Y2hw
b2ludChCMzo6Vm9pZCk7CisgICAgICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0b3IoW3Ro
aXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVt
aXRQYXRjaHBvaW50KHRocm93RXhjZXB0aW9uLCBUbXAoKSk7CisgICAgfSBlbHNlCisgICAgICAg
IGVtaXRTdG9yZU9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZz
ZXQsIHNpemVPZlN0b3JlT3Aob3ApKSwgdmFsdWUsIG9mZnNldCk7CisKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG5vblpl
cm8uaXNHUCgpID09IHplcm8uaXNHUCgpKTsKKyAgICByZXN1bHQgPSBub25aZXJvLmlzR1AoKSA/
IGdwcigpIDogZnByKCk7CisgICAgaWYgKG5vblplcm8uaXNHUCgpKQorICAgICAgICBhcHBlbmQo
TW92ZSwgbm9uWmVybywgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZChNb3ZlRG91
YmxlLCBub25aZXJvLCByZXN1bHQpOworCisgICAgQmFzaWNCbG9jayogaXNaZXJvID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisKKyAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2st
PnNldFN1Y2Nlc3NvcnMoaXNaZXJvLCBjb250aW51YXRpb24pOworCisgICAgaWYgKHplcm8uaXNH
UCgpKQorICAgICAgICBhcHBlbmQoaXNaZXJvLCBNb3ZlLCB6ZXJvLCByZXN1bHQpOworICAgIGVs
c2UKKyAgICAgICAgYXBwZW5kKGlzWmVybywgTW92ZURvdWJsZSwgemVybywgcmVzdWx0KTsKKyAg
ICBhcHBlbmQoaXNaZXJvLCBKdW1wKTsKKyAgICBpc1plcm8tPnNldFN1Y2Nlc3NvcnMoY29udGlu
dWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0
dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKHVpbnQz
Ml90IGRlY3JlbWVudENvdW50LCBCMzo6T3JpZ2luIG9yaWdpbikKK3sKKyAgICBVTlVTRURfUEFS
QU0ob3JpZ2luKTsgLy8gT09QUworCisgICAgaWYgKCFtX3RpZXJVcCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgVG1wIGNvdW50ZG93blB0ciA9IGdwcigpOworICAgIFRtcCBvbGRDb3VudGRvd24g
PSBncHIoKTsKKyAgICBUbXAgbmV3Q291bnRkb3duID0gZ3ByKCk7CisKKyAgICBhcHBlbmQoTW92
ZSwgQXJnOjpiaWdJbW0ocmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obV90aWVyVXApKSwgY291
bnRkb3duUHRyKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY291bnRkb3duUHRyKSwg
b2xkQ291bnRkb3duKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEltbUZvcm0o
ZGVjcmVtZW50Q291bnQpKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBvbGRDb3VudGRvd24sIG5ld0Nv
dW50ZG93bik7CisgICAgYXBwZW5kKFN1YjMyLCBBcmc6OmltbShkZWNyZW1lbnRDb3VudCksIG5l
d0NvdW50ZG93bik7CisgICAgYXBwZW5kKE1vdmUzMiwgbmV3Q291bnRkb3duLCBBcmc6OmFkZHIo
Y291bnRkb3duUHRyKSk7CisKKyAgICBhdXRvKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZv
aWQpOworICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAg
IGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBlZmZlY3RzLndyaXRl
cyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIHBhdGNoLT5lZmZlY3RzID0gZWZmZWN0czsK
KworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUs
IHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgIHBhcmFtcy5h
ZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICB0aWVyVXAu
bGluaygmaml0KTsKKworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0cmFQYWRkaW5nQnl0
ZXMgPSAwOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbCA9IHsgfTsK
KyAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGwuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQ
cmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJz
VG9TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBleHRyYVBhZGRpbmdCeXRlcyk7
CisKKyAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9m
dW5jdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChq
aXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1Vz
ZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOworICAgICAgICAg
ICAgaml0Lmp1bXAodGllclVwUmVzdW1lKTsKKworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8Tm9Q
dHJUYWc+KGNhbGwpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpz
aW5nbGV0b24oKS5zdHViKHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CisKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRj
aHBvaW50KHBhdGNoLCBUbXAoKSwgbmV3Q291bnRkb3duLCBvbGRDb3VudGRvd24pOworfQorCitB
aXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBz
aWduYXR1cmUpCit7CisgICAgQmFzaWNCbG9jayogYm9keSA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAg
YXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkpOwor
CisgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBD
b3VudDo6bG9vcERlY3JlbWVudCgpLCBvcmlnaW4oKSk7CisKKyAgICByZXR1cm4gQ29udHJvbERh
dGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6
Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9s
RGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpCit7CisgICAg
cmV0dXJuIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNp
Z25hdHVyZSksIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fY29kZS5hZGRCbG9jaygpKTsKK30KKwor
QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBl
IHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVy
ZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OkJsb2NrLCBtX2NvZGUuYWRkQmxv
Y2soKSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgCisgICAgLy8gV2FzbSBi
b29scyBhcmUgaTMyLgorICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJl
bnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YWtlbiwgbm90VGFrZW4pOworCisgICAgbV9jdXJyZW50
QmxvY2sgPSB0YWtlbjsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0
dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlvbiwg
bm90VGFrZW4pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3Rh
Y2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50
U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRFbHNl
VG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRv
VW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBB
U1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZik7CisgICAgbV9jdXJyZW50QmxvY2sg
PSBkYXRhLnNwZWNpYWw7CisgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xE
YXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAgaWYg
KHJldHVyblZhbHVlcy5zaXplKCkpIHsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlR1BSID0gVG1w
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0g
VG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgc3dpdGNoIChkYXRhLnNpZ25h
dHVyZSgpKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1v
dmUzMiwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBl
bmQoUmV0MzIsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCByZXR1cm5WYWx1ZXNbMF0s
IHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXQ2NCwgcmV0dXJuVmFsdWVH
UFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAg
ICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7
CisgICAgICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVuZChN
b3ZlRG91YmxlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAg
IGFwcGVuZChSZXRGbG9hdCwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGFwcGVuZChSZXRWb2lkKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCisvLyBOT1RFOiBBbGwgYnJhbmNoZXMgaW4gV2FzbSBhcmUgb24gMzIt
Yml0IGludHMKKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBk
YXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhy
ZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0Rm9yQnJhbmNoKCkpOworCisgICAgQmFzaWNCbG9jayog
dGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOworICAgIGlmIChjb25kaXRpb24p
IHsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0LCBjb250aW51YXRpb24pOworICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBlbmQoSnVt
cCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCk7CisgICAg
fQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNo
KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRh
cmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYg
ZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNbaV0tPnJlc3VsdEZvckJyYW5jaCgpKTsKKyAgICB1
bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQucmVzdWx0
Rm9yQnJhbmNoKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IHRhcmdldHNbaV0tPnRhcmdl
dEJsb2NrRm9yQnJhbmNoKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgICAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKGkpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChC
cmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGNvbnN0YW50LCBj
b25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQs
IGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247
CisgICAgfQorCisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNj
ZXNzb3JzKGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JCcmFuY2goKSk7CisKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkm
IGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKworICAgIHVu
aWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1bHQpOworICAgIGFw
cGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRp
bnVhdGlvbik7CisKKyAgICByZXR1cm4gYWRkRW5kVG9VbnJlYWNoYWJsZShlbnRyeSk7Cit9CisK
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkm
IGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRy
eS5jb250cm9sRGF0YTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOwor
CisgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKKyAgICAgICAgYXBwZW5k
KGRhdGEuc3BlY2lhbCwgSnVtcCk7CisgICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29y
cyhtX2N1cnJlbnRCbG9jayk7CisgICAgfQorCisgICAgZm9yIChUbXAgcmVzdWx0IDogZGF0YS5y
ZXN1bHQpCisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1
bHQpOworCisgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlz
IHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KKyAgICBpZiAo
ZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCkKKyAgICAgICAgcmV0dXJuIGFkZFJl
dHVybihkYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
QVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAg
bV9tYWtlc0NhbGxzID0gdHJ1ZTsKKworICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5y
ZXR1cm5UeXBlKCk7CisgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7CisgICAgY2FzZSBUeXBlOjpW
b2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICBjYXNlIFR5cGU6
Okk2NDoKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VHlwZTo6RjMyOgorICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICByZXN1bHQgPSBmcHIoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4q
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisK
KyAgICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6
Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Mu
c2l6ZSgpKSk7CisKKyAgICAgICAgLy8gRklYTUUgaW1wb3J0cyBjYW4gYmUgbGlua2VkIGhlcmUs
IGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQsIGJlY2F1c2UgYWxsIGltcG9ydCBz
dHVicyBhcmUgZ2VuZXJhdGVkIGJlZm9yZSBCMyBjb21waWxhdGlvbiBzdGFydHMuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKKyAgICAgICAgVG1wIHRhcmdl
dEluc3RhbmNlID0gZ3ByKCk7CisgICAgICAgIC8vIE9PUFM6IFRyeSB0byBpc2VsIHRoaXMgYmV0
dGVyCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShJbnN0YW5jZTo6b2Zmc2V0T2ZU
YXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSksIHRhcmdldEluc3RhbmNlKTsKKyAgICAgICAg
YXBwZW5kKEFkZDY0LCBpbnN0YW5jZVZhbHVlKCksIHRhcmdldEluc3RhbmNlKTsKKyAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YWRkcih0YXJnZXRJbnN0YW5jZSksIHRhcmdldEluc3RhbmNlKTsK
KworICAgICAgICBCYXNpY0Jsb2NrKiBpc1dhc21CbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgICAgICBCYXNpY0Jsb2NrKiBpc0VtYmVkZGVyQmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsK
KyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisK
KyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvKSwgdGFyZ2V0SW5zdGFuY2UsIHRhcmdldEluc3RhbmNlKTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNXYXNtQmxvY2ssIGlzRW1iZWRkZXJCbG9jayk7
CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5y
ZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxs
IHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhl
IGluc3RhbmNlLgorICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBj
b3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgICAgICBwYXRj
aHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisKKyAgICAgICAgICAgIFZlY3RvcjxDb25zdHJh
aW5lZFRtcD4gcGF0Y2hBcmdzOworICAgICAgICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWly
KCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2hwb2ludCwgYXJncywgWyZdIChU
bXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFw
cGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5k
ZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwg
PSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRl
eF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZW1pdFBhdGNocG9pbnQoaXNX
YXNtQmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICAg
ICAgICAgIGFwcGVuZChpc1dhc21CbG9jaywgSnVtcCk7CisgICAgICAgICAgICBpc1dhc21CbG9j
ay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgewor
ICAgICAgICAgICAgVG1wIGp1bXBEZXN0aW5hdGlvbiA9IGdwcigpOworICAgICAgICAgICAgYXBw
ZW5kKGlzRW1iZWRkZXJCbG9jaywgTW92ZSwgQXJnOjpiaWdJbW0oSW5zdGFuY2U6Om9mZnNldE9m
V2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5kZXgpKSwganVtcERlc3RpbmF0aW9uKTsKKyAg
ICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIEFkZDY0LCBpbnN0YW5jZVZhbHVlKCks
IGp1bXBEZXN0aW5hdGlvbik7CisgICAgICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBN
b3ZlLCBBcmc6OmFkZHIoanVtcERlc3RpbmF0aW9uKSwganVtcERlc3RpbmF0aW9uKTsKKworICAg
ICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJu
VHlwZSkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0
cnVlOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7
CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQg
cmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAg
ICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRv
IHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KKyAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0
ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVj
a2luZykpOworCisgICAgICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsK
KyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoanVtcERlc3RpbmF0aW9uKTsKKworICAgICAg
ICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJu
VHlwZSwgcGF0Y2hwb2ludCwgYXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7
CisgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcmV0dXJu
VHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1z
W3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChpc0VtYmVkZGVyQmxv
Y2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICAgICAgICAg
IGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIEp1bXApOworICAgICAgICAgICAgaXNFbWJlZGRlckJs
b2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBt
X2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgLy8gVGhlIGNhbGwgY291bGQg
aGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxk
IGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KKyAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5z
dGFuY2VWYWx1ZSgpLCBjb250aW51YXRpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKworICAgICAgICBWZWN0b3I8Q29u
c3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWly
KCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2hwb2ludCwgYXJncywgWyZdIChU
bXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5k
KHsgdG1wLCByZXAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRj
aGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVu
Y3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBl
bWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3Zl
KHBhdGNoQXJncykpOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtl
TGFzdCgpOworICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6
ZSgpKTsKKworICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CisgICAgLy8gTm90ZTogY2FsbCBpbmRp
cmVjdCBjYW4gY2FsbCBlaXRoZXIgV2ViQXNzZW1ibHlGdW5jdGlvbiBvciBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi4gQmVjYXVzZQorICAgIC8vIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
IGlzIGxpa2UgY2FsbGluZyBpbnRvIHRoZSBlbWJlZGRlciwgd2UgY29uc2VydmF0aXZlbHkgYXNz
dW1lIGFsbCBjYWxsIGluZGlyZWN0cworICAgIC8vIGNhbiBiZSB0byB0aGUgZW1iZWRkZXIgZm9y
IG91ciBzdGFjayBjaGVjayBjYWxjdWxhdGlvbi4KKyAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50
cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oYXJncy5zaXplKCkpKTsKKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25C
dWZmZXIgPSBncHIoKTsKKyAgICBFeHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXIgPSBncHIo
KTsKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoID0gZ3By
KCk7CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSwg
QjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZv
cm0oVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgp
LCBCMzo6V2lkdGg2NCkpOworCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFu
Y2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSwgY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlckxlbmd0aCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5j
dGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpLCBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSksIGluc3RhbmNl
c0J1ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3ZlMzIsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0
aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXJMZW5ndGgpOworICAgIH0KKworICAgIGFwcGVuZChNb3ZlMzIsIGNhbGxlZUluZGV4
LCBjYWxsZWVJbmRleCk7CisKKyAgICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcg
Zm9yIGlzIHZhbGlkLgorICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICBhcHBlbmQoQnJhbmNo
MzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgY2FsbGVlSW5k
ZXgsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
IHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
Q2FsbEluZGlyZWN0KTsKKyAgICB9KTsKKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUg
PSBncHIoKTsKKyAgICB7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25hdHVyZUlu
ZGV4ID0gZ3ByKCk7CisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUgdGFibGUg
aW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgorICAgICAgICBhcHBlbmQoTW92ZSwgQXJn
OjppbW0oc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pKSwgY2FsbGVlU2lnbmF0
dXJlSW5kZXgpOworICAgICAgICBhcHBlbmQoTXVsNjQsIGNhbGxlZUluZGV4LCBjYWxsZWVTaWdu
YXR1cmVJbmRleCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ciwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgYXBwZW5kKE1vdmUs
IEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpLCBjYWxsZWVDb2RlKTsgLy8g
UG9pbnRlciB0byBjYWxsZWUgY29kZS4KKworICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlz
bid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRp
YWxpemVkLgorICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdl
IGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5k
ZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
OjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29kZWdlbiBhc3N1
bWVzIGk2NCIpOworICAgICAgICAvLyBPT1BTOiBUaGlzIHNlZW1zIGR1bWIgdG8gZG8gdHdvIGNo
ZWNrcyBqdXN0IGZvciBhIG5pY2VyIGVycm9yIGhlcmUuLi4KKworICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkpLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7
CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KFNp
Z25hdHVyZTo6aW52YWxpZEluZGV4ID09IDAsICIiKTsKKyAgICAgICAgICAgIGFwcGVuZChCcmFu
Y2hUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGNhbGxlZVNpZ25h
dHVyZUluZGV4LCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIH0sIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpOdWxs
VGFibGVFbnRyeSk7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAg
ICAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IGdwcigpOwor
ICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKFNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoc2lnbmF0dXJlKSksIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAg
YXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwg
Y2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9
LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6QmFkU2lnbmF0dXJlKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gRG8g
YSBjb250ZXh0IHN3aXRjaCBpZiBuZWVkZWQuCisgICAgeworICAgICAgICBUbXAgbmV3Q29udGV4
dEluc3RhbmNlID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmluZGV4KGluc3Rh
bmNlc0J1ZmZlciwgY2FsbGVlSW5kZXgsIDgsIDApLCBuZXdDb250ZXh0SW5zdGFuY2UpOworCisg
ICAgICAgIEJhc2ljQmxvY2sqIGRvQ29udGV4dFN3aXRjaCA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKwor
ICAgICAgICBhcHBlbmQoQnJhbmNoNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwpLCBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNlVmFsdWUoKSk7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZG9Db250ZXh0U3dpdGNoKTsK
KworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAg
Ly8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBjYWxsaW5nIHNvbWV0aGluZyB3aXRo
IEJvdW5kc0NoZWNraW5nIG1lbW9yeS4KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBo
YXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzIxODEKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86Omdl
dCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgIEdQUlJlZyBuZXdDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgb2xkQ29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdwcigpOworICAgICAg
ICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVk
UmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5u
ZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHRJ
bnN0YW5jZSAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJh
c2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworICAgICAgICAgICAgaml0LnN0b3Jl
V2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJl
Z2lzdGVyCisgICAgICAgICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2Mjk1MgorICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9
PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3
Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9m
ZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3
Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9p
ZCouCisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50KGRvQ29udGV4dFN3aXRj
aCwgcGF0Y2hwb2ludCwgVG1wKCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgp
KTsKKyAgICAgICAgYXBwZW5kKGRvQ29udGV4dFN3aXRjaCwgSnVtcCk7CisgICAgICAgIGRvQ29u
dGV4dFN3aXRjaC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmFkZHIoY2FsbGVlQ29kZSksIGNhbGxlZUNvZGUpOworCisgICAgVHlwZSByZXR1cm5UeXBlID0g
c2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBj
YXNlIFR5cGU6OlZvaWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6STMyOgorICAg
IGNhc2UgVHlwZTo6STY0OgorICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIHJlc3Vs
dCA9IGZwcigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGF1dG8qIHBhdGNoID0gYWRkUGF0
Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMud3JpdGVz
UGlubmVkID0gdHJ1ZTsKKyAgICBwYXRjaC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7Cisg
ICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBz
aW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAvLyBXZSBwZXNzaW1p
c3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJv
dW5kcyBjaGVja2luZyBzbworICAgIC8vIGJlY2F1c2UgdGhlIHdhc20tPndhc20gdGh1bmsgdW5j
b25kaXRpb25hbGx5IG92ZXJyaWRlcyB0aGUgc2l6ZSByZWdpc3RlcnMuCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBub3QgaGF2ZSB0byBkbyB0aGlzLCBidXQgdGhlIHdhc20tPndhc20gc3R1YiBh
c3N1bWVzIGl0IGNhbgorICAgIC8vIHVzZSBhbGwgdGhlIHBpbm5lZCByZWdpc3RlcnMgYXMgc2Ny
YXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAg
IHBhdGNoLT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBl
bWl0QXJnczsKKyAgICBlbWl0QXJncy5hcHBlbmQoY2FsbGVlQ29kZSk7CisgICAgd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2gsIGFy
Z3MsIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICBlbWl0QXJncy5h
cHBlbmQoeyB0bXAsIHJlcCB9KTsKKyAgICB9KTsKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQg
PyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CisgICAgfSk7CisKKyAgICBlbWl0UGF0
Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIHJlc3VsdCwgV1RGTW92ZShlbWl0QXJncykp
OworCisgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1i
bHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KKyAg
ICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6
WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnVuaWZ5KGNvbnN0IEV4
cHJlc3Npb25UeXBlJiBkc3QsIGNvbnN0IEV4cHJlc3Npb25UeXBlJiBzb3VyY2UpCit7CisgICAg
Ly8gT09QUzogV2Uga2luZGEgd2FudCB0eXBlcyBoZXJlIHRvIGRpc3Rpbmd1aXNoIGkzMi9pNjQv
ZjMyL2Y2NCEKKyAgICBSRUxFQVNFX0FTU0VSVChkc3QuaXNHUCgpID09IHNvdXJjZS5pc0dQKCkp
OworICAgIGFwcGVuZChkc3QuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIHNvdXJjZSwgZHN0
KTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3Qg
RXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit7
CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICB1bmlm
eShyZXN1bHRbcmVzdWx0LnNpemUoKSAtIDEgLSBpXSwgcmVzdWx0U3RhY2tbcmVzdWx0U3RhY2su
c2l6ZSgpIC0gMSAtIGldKTsKK30KKworLy9zdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lvblN0YWNr
KGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEFpcklSR2VuZXJhdG9yOjpFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorLy97CisvLyAgICBkYXRhTG9nKGNvbW1hLCAiRXhw
cmVzc2lvblN0YWNrOiIpOworLy8gICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhw
cmVzc2lvblN0YWNrKQorLy8gICAgICAgIGRhdGFMb2coY29tbWEsICpleHByZXNzaW9uKTsKKy8v
fQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+
JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBleHByZXNzaW9uU3RhY2spCit7
CisgICAgVU5VU0VEX1BBUkFNKGNvbnRyb2xTdGFjayk7CisgICAgVU5VU0VEX1BBUkFNKGV4cHJl
c3Npb25TdGFjayk7CisKKyAgICAvLyBPT1BTIQorICAgIC8qCisgICAgZGF0YUxvZ0xuKCJQcm9j
ZXNzaW5nIEdyYXBoOiIpOworICAgIGRhdGFMb2cobV9jb2RlKTsKKyAgICBkYXRhTG9nTG4oIldp
dGggY3VycmVudCBibG9jazoiLCAqbV9jdXJyZW50QmxvY2spOworICAgIGRhdGFMb2dMbigiQ29u
dHJvbCBzdGFjazoiKTsKKyAgICBBU1NFUlQoY29udHJvbFN0YWNrLnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IGNvbnRyb2xTdGFjay5zaXplKCk7IGktLTspIHsKKyAgICAgICAgZGF0YUxv
ZygiICAiLCBjb250cm9sU3RhY2tbaV0uY29udHJvbERhdGEsICI6ICIpOworICAgICAgICBDb21t
YVByaW50ZXIgY29tbWEoIiwgIiwgIiIpOworICAgICAgICBkdW1wRXhwcmVzc2lvblN0YWNrKGNv
bW1hLCAqZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgZXhwcmVzc2lvblN0YWNrID0gJmNvbnRy
b2xTdGFja1tpXS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZGF0YUxvZ0xuKCk7
CisgICAgfQorICAgIGRhdGFMb2dMbigpOworICAgICovCit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KK3sKKyAgICByZXR1cm4gQjM6Ok9yaWdpbigpOwor
ICAgIC8vT3Bjb2RlT3JpZ2luIG9yaWdpbihtX3BhcnNlci0+Y3VycmVudE9wY29kZSgpLCBtX3Bh
cnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpOworICAgIC8vQVNTRVJUKGlzVmFs
aWRPcFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4ob3JpZ2luLm9wY29kZSgpKSkpOworICAgIC8v
cmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdpbik7Cit9CisKK0V4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIo
Q29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1
bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENv
bXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRp
ZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
Cit7CisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFsRnVuY3Rpb24+
KCk7CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50SklUID0gc3Rk
OjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisgICAgY29tcGlsYXRpb25Db250ZXh0Lndh
c21FbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisKKyAg
ICBCMzo6UHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBDb2RlJiBjb2RlID0gcHJvY2VkdXJlLmNv
ZGUoKTsKKworICAgIHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYg
b3V0LCBCMzo6T3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAob3JpZ2luLmRhdGEoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9jYXN0PE9wY29kZU9yaWdpbj4o
b3JpZ2luKSk7CisgICAgfSk7CisgICAgCisgICAgLy8gVGhpcyBtZWFucyB3ZSBjYW5ub3QgdXNl
IGVpdGhlciBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVzZWRSZWdpc3RlcnMoKSBvcgorICAg
IC8vIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dW5hdmFpbGFibGVSZWdpc3RlcnMoKS4gSW4g
ZXhjaGFuZ2UgZm9yIHRoaXMgY29uY2Vzc2lvbiwgd2UKKyAgICAvLyBkb24ndCBzdHJpY3RseSBu
ZWVkIHRvIHJ1biBBaXI6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKSwgd2hpY2ggc2F2ZXMgYSBiaXQg
b2YgQ1BVIHRpbWUgYXQKKyAgICAvLyBvcHRMZXZlbD0xLgorICAgIC8vIE9PUFM6IERvIHdlIG5l
ZWQgdGhpcz8gU2hvdWxkIHdlIGp1c3Qgc2V0IGl0IGRpcmVjdGx5IG9uIENvZGU/CisgICAgcHJv
Y2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhmYWxzZSk7CisgICAgCisgICAgcHJvY2VkdXJl
LnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUK
KyAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsKCkKKyAg
ICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkpOworCisg
ICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0
KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0
aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uLCBzaWduYXR1cmUpOworICAgIEZ1
bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9u
U3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAgIFdBU01fRkFJTF9J
Rl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOworCisKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JCbG9jayhp
KS0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOworICAgIH0KKyAgICAvL0IzOjpBaXI6OnZhbGlkYXRl
KGNvZGUpOworICAgIC8vIE9PUFM6IFZhbGlkYXRlICdjb2RlJyBoZXJlIQorICAgIAorICAgIHsK
KyAgICAgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7CisgICAgICAgIEIz
OjpBaXI6OmdlbmVyYXRlKGNvZGUsICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRK
SVQpOworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3Rz
ID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAgICAgIHJlc3VsdC0+ZW50cnlw
b2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNl
dExpc3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCit2b2lk
IEFpcklSR2VuZXJhdG9yOjplbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSBvcGVyYXRp
b24sIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KQoreworICAgIC8v
QVNTRVJUKG9wZXJhdGlvbiA9PSBEaXYgfHwgb3BlcmF0aW9uID09IE1vZCB8fCBvcGVyYXRpb24g
PT0gVURpdiB8fCBvcGVyYXRpb24gPT0gVU1vZCk7IC8vIE9PUFMKKyAgICAvL2NvbnN0IEIzOjpU
eXBlIHR5cGUgPSBsZWZ0LT50eXBlKCk7CisgICAgVU5VU0VEX1BBUkFNKG9wZXJhdGlvbik7Cisg
ICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisKKyAgICAv
KgorICAgIHsKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICAvLyBPT1BTOiBO
ZWVkIHR5cGVzIGZvciBicmFuY2ggaGVyZSEKKyAgICAgICAgICAgIEtpbmQgb3AgPSBCcmFuY2hU
ZXN0NjQgOiBCcmFuY2hUZXN0MzI7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVzQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJpZ2h0LCByaWdodCk7CisgICAgICAgIH0sIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBl
OjpEaXZpc2lvbkJ5WmVybyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGlmIChvcGVyYXRp
b24gPT0gRGl2KSB7CisgICAgICAgIC8vIE9PUFM6IE5lZWQgdHlwZXMgaGVyZSEKKyAgICAgICAg
Ly9pbnQ2NF90IG1pbiA9IHR5cGUgPT0gSW50MzIgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptaW4oKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpOworCisgICAg
ICAgIGludDY0X3QgbWluID0gdHlwZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKTsKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICAvLyBPT1BTOiBUcnkg
dG8gZW1pdCBuaWNlIGNvbXBhcmUgdy8gaW1tcy4KKyAgICAgICAgICAgIFRtcCBtaW5UbXAgPSBn
cHIoKTsKKyAgICAgICAgICAgIFRtcCBuZWdPbmUgPSBncHIoKTsKKworICAgICAgICAgICAgS2lu
ZCBvcCA9IGlzNjRCaXRPcChvcGVyYXRpb24pID8gQ29tcGFyZTY0IDogQ29tcGFyZTMyOworICAg
ICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG1pbiksIG1pblRtcCk7CisgICAgICAg
ICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBsZWZ0
LCBtaW5UbXAsIG1pblRtcCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW0oLTEp
LCBuZWdPbmUpOworICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsKSwgcmlnaHQsIG5lZ09uZSwgbmVnT25lKTsKKyAgICAgICAgICAgIGFwcGVu
ZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIG1p
blRtcCwgbmVnT25lKTsKKyAgICAgICAgfSwKKyAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRo
aXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6OkludGVnZXJPdmVyZmxv
dyk7CisgICAgICAgIH0pOworICAgIH0KKyAgICAqLworfQorCisvLyBPT1BTOiBJbXBsZW1lbnQg
dGhlc2UgZGl2IG9wcyEhIQordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGRhdGFM
b2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
Ly9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsKKyAgICBV
TlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVTRURf
UEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBEaXY7CisgICAgLy9l
bWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHBy
ZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAg
Q1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3Ag
PSBNb2Q7CisgICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAg
ICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgY2hp
bGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhw
cmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQg
aTMyZGl2cyIpOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAg
ICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwor
ICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAg
Ly9jb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICAvL2VtaXRDaGVja3NGb3JNb2RPckRp
dihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZGF0YUxvZ0xu
KCJ1bmltcGxlbWVudGVkIGkzMmRpdnMiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jv
b2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOworICAgIFVOVVNF
RF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJB
TShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7CisgICAgLy9lbWl0
Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JB
U0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsK
KyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBE
aXY7CisgICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAv
L3Jlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9y
aWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlw
ZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIp
CisgICAgLy8gICAgQ1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VE
X1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIz
OjpPcGNvZGUgb3AgPSBNb2Q7CisgICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQs
IHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgY2hpbGwob3ApLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVu
aW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBi
ID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BB
UkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJl
c3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gVURpdjsKKyAgICAvL2VtaXRDaGVj
a3NGb3JNb2RPckRpdihvcCwgbGVmdCwgcmlnaHQpOworICAgIC8vcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBvcCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgZGF0YUxvZ0xuKCJ1bmltcGxlbWVudGVkIGkzMmRpdnMiKTsKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICAvL2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgp
OworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAg
IFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVNb2Q7
CisgICAgLy9lbWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jl
c3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1z
WzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQo
QjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGpp
dC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyNlbmRpZgorCisgICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAoaW50
MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZhbHVl
KTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNpZiBDUFUoWDg2XzY0
KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgewor
ICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LmNv
dW50UG9wdWxhdGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQ2NF90ICgqcG9w
Y291bnQpKGludDY0X3QpID0gW10gKGludDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJu
IF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0
Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHBh
dGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgICAg
IGppdC5jb252ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnBy
KCksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50
NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAg
ICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50
LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
YXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBpZiAoaXNYODYoKSkKKyAg
ICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisjaWYgQ1BVKFg4Nl82NCkK
KyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1z
WzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252
ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5k
aWYKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRj
aHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJ
bnREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFyYW1zWzFd
LmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChC
Mzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGpp
dC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkp
OworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNo
cG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBh
dXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0Zsb2F0KHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIFVO
VVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vYm9vbCBi
ID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxl
bWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3
aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdp
bigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVl
KiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpP
dXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJ
bnQzMiwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZl
Y3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBVTlVTRURf
UEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2Jvb2wgYiA9IHRy
dWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQg
dGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nh
c3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nh
c3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcs
IG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBv
dXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmln
aW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgb3Jp
Z2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
aml0LnRydW5jYXRlRmxvYXRUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30K
KworCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRy
dW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgVU5VU0VEX1BBUkFNKGFy
Zyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9ib29sIGIgPSB0cnVlOworICAg
IC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRoaXMhCisK
KyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKSkgKiAtMi4wKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9j
YXN0PHVpbnQ2NF90PigtMS4wKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdp
bigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0
cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNr
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQz
Miwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0
czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgVU5VU0VEX1BB
UkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9ib29sIGIgPSB0cnVl
OworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVtZW50IHRo
aXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0
PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGNv
bnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0Pigt
MS4wKSkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwgb3JpZ2luKCksIGFyZywgbWF4KSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVy
VGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3Vu
ZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91
dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+
ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7
CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpKTsK
KyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVu
Y2F0ZUZsb2F0VG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAg
IH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAg
IHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4o
RXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgVU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7
CisgICAgZGF0YUxvZ0xuKCJ1bmltcGxlbWVudGVkIEk2NFRydW5jU0Y2NCIpOworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAg
IENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4
ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBUbXAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJp
dEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBvcmlnaW4oKSwg
YXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50
MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAg
IHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRp
b24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKyAgICBQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQ2
NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hw
b2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBh
cmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBVTlVT
RURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBib29sIGIgPSB0
cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhp
cyEKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+
OjptaW4oKSkgKiAtMi4wKSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmln
aW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJv
dW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVl
KiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpP
dXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29uc3RhbnQ7Cisg
ICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBp
bnN0cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vy
cywgd2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAgICAgICAvLyB0
aGUgbnVtYmVycyBhcmUgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVn
ZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhh
dmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCisg
ICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+
OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworICAgIH0K
KyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGlmIChpc1g4
NigpKSB7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChzaWduQml0Q29uc3RhbnQsIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdp
c3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBG
UFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgewor
ICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBj
b25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNh
dGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRj
aCwgY29uc3RhbnQpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZm
ZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5V
U0VEX1BBUkFNKHJlc3VsdCk7CisgICAgZGF0YUxvZ0xuKCJpbmltcGxlbWVudGVkIGk2NHRydW5j
c2YzMiIpOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAv
L2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7IC8vIE9PUFM6IEltcGxlbWVudCB0aGlzIQorICAg
IC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkp
KSk7CisgICAgVG1wIG1pbiA9IGNvbnN0YW50KEZsb2F0LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkp
KTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcsIG1heCksCisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFs
LCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLCBvdXRPZkJvdW5kcywg
Y29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwgb3V0T2ZC
b3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0
VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAg
ICB9KTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAg
IHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRl
RmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsK
KyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1
bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIFVOVVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAg
IGJvb2wgYiA9IHRydWU7CisgICAgaWYgKGIpCisgICAgICAgIENSQVNIKCk7IC8vIE9PUFM6IGlt
cGxlbWVudCB0aGlzCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50NjRfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcs
IG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91
dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
IHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
VHJ1bmMpOworICAgIH0pOworCisgICAgVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNY
ODYoKSkgeworICAgICAgICAvLyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9u
IHRvIGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBs
ZWFzdCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJz
IHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25lZCBpbnRlZ2VyLiBTaW5jZSB3ZSBj
YW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBycyB3ZSBoYXZlIGIzIGRvIGl0Cisg
ICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVlZGVkLgorICAgICAgICBzaWduQml0
Q29uc3RhbnQgPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNf
Y2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFy
ZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKHNpZ25CaXRDb25zdGFudCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAg
fQorICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBG
UFJSZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIEZQUlJlZyBjb25zdGFudCA9
IEludmFsaWRGUFJSZWc7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBzY3Jh
dGNoID0gcGFyYW1zLmZwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgIGNvbnN0YW50ID0gcGFyYW1z
WzJdLmZwcigpOworICAgICAgICB9CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50NjQo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAg
ICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAg
ICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkU2hpZnQoQjM6OkFpcjo6T3Bjb2RlIG9wLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAgIGlmIChpc1Zh
bGlkRm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBw
ZW5kKG9wLCB2YWx1ZSwgc2hpZnQsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorICAgIAorICAgIFRtcCBlY3ggPSBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpOworICAgIGFwcGVu
ZChNb3ZlLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoTW92ZSwgc2hpZnQsIGVjeCk7Cisg
ICAgYXBwZW5kKG9wLCBlY3gsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkSW50ZWdlclN1YihCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Np
b25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNWYWxp
ZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVu
ZChvcCwgbGhzLCByaHMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisgICAgLy8gU3ViIGEsIGIKKyAgICAvLyBtZWFu
cworICAgIC8vIGIgPSBiIFN1YiBhCisgICAgYXBwZW5kKE1vdmUsIGxocywgcmVzdWx0KTsKKyAg
ICBhcHBlbmQob3AsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QWJzKEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChvcCA9PSBBYnNGbG9hdCB8fCBvcCA9PSBBYnNEb3Vi
bGUpOworCisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFy
Zzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKG9wLCB2YWx1ZSwgcmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4Nigp
KTsKKworICAgIFRtcCBjb25zdGFudCA9IGdwcigpOworICAgIGlmIChvcCA9PSBBYnNGbG9hdCkg
eworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW0ofigxdWxsIDw8IDMxKSksIGNvbnN0YW50
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIGNvbnN0YW50LCByZXN1bHQpOworICAg
ICAgICBhcHBlbmQoQW5kRmxvYXQsIHZhbHVlLCByZXN1bHQpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSh+KDF1bGwgPDwgNjMpKSwgY29uc3RhbnQpOwor
ICAgICAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGNvbnN0YW50LCByZXN1bHQpOworICAgICAg
ICBhcHBlbmQoQW5kRG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEJpbk9wKEIzOjpB
aXI6Ok9wY29kZSBvcCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBm
cHIoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6
OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKG9wLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKworICAg
IC8vIE9wIGEsIGIKKyAgICAvLyBtZWFucworICAgIC8vIGIgPSBiIE9wIGEKKyAgICAvLyBPT1BT
OiB2ZXJpZnkKKyAgICBhcHBlbmQoTW92ZURvdWJsZSwgbGhzLCByZXN1bHQpOworICAgIGFwcGVu
ZChvcCwgcmhzLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDZWlsPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENlaWxGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyTXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKE11bDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50
ZWdlclN1YihTdWIzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NExlPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUs
IEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGVtb3RlRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnREb3VibGVUb0Zsb2F0LCBhcmcw
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNaW4+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOwor
CisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChp
c0VxdWFsLCBPckZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFs
LCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAg
ICBhcHBlbmQobm90RXF1YWwsIE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
bm90RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMo
Y29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwpOworCisgICAgYXBwZW5kKGdyZWF0ZXJU
aGFuT3JFcXVhbCwgTW92ZUZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChncmVhdGVy
VGhhbk9yRXF1YWwsIEp1bXApOworICAgIGdyZWF0ZXJUaGFuT3JFcXVhbC0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NEx0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJNYXg+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0
aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJy
YW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwg
YXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwg
bm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZEZsb2F0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVGbG9hdCwg
YXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6OmRv
dWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7Cisg
ICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAg
ICBhcHBlbmQobGVzc1RoYW4sIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
bGVzc1RoYW4sIEp1bXApOworICAgIGxlc3NUaGFuLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlv
bik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRp
bmdQb2ludEJpbk9wKE11bERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRpdj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2
RmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDbHo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoQ291bnRMZWFkaW5nWmVyb3MzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyQ29weXNpZ24+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBP
T1BTOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29kZWdlbiBoZXJlIGZvciB0aGUgaW1tcyBhbmQgdHdv
IG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAx
ID0gZ3ByKCk7CisgICAgVG1wIHNpZ24gPSBncHIoKTsKKyAgICBUbXAgdmFsdWUgPSBncHIoKTsK
KworICAgIC8vIE9PUFM6IENhbiBmaXQgaW4gSW1tL0JpdEltbSBpbnN0ZWFkIG9mIEJpZ0ltbT8K
KyAgICBhcHBlbmQoTW92ZUZsb2F0VG8zMiwgYXJnMSwgdGVtcDEpOworICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwKSwgc2lnbik7CisgICAgYXBwZW5kKEFuZDMyLCB0ZW1w
MSwgc2lnbiwgc2lnbik7CisKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAx
KTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg3ZmZmZmZmZiksIHZhbHVlKTsKKyAg
ICBhcHBlbmQoQW5kMzIsIHRlbXAxLCB2YWx1ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9yMzIs
IHNpZ24sIHZhbHVlLCB2YWx1ZSk7CisgICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIHZhbHVlLCBy
ZXN1bHQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcw
LCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9Eb3VibGUsIHRlbXAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMlJlaW50ZXJwcmV0STMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NEFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChBbmQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZU5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0R3Q+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVH
cmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlNxcnQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoU3FydEZsb2F0LCBhcmcwLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJs
ZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRHdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXF6PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFRlc3Q2NCwgQXJnOjpyZXND
b25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0RGl2PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gT09QUzogd2hh
dCBhYm91dCBjaGlsbC1uZXNzIGhlcmUuLi4/CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRC
aW5PcChEaXZEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBZGQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQWRkRmxvYXQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE9yPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE9yNjQsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyTGVTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDbHo+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ291bnRMZWFkaW5nWmVyb3M2NCwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVnPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKE5lZ2F0ZUZsb2F0LCBBcmc6OlRtcCwgQXJnOjpUbXAp
KQorICAgICAgICBhcHBlbmQoTmVnYXRlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgZWxzZSB7
CisgICAgICAgIFRtcCBjb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9j
YXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKyAgICAgICAgYXBwZW5k
KE11bEZsb2F0LCBjb25zdGFudCwgYXJnMCwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChBbmQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRV
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJvdHI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUm90YXRlUmlnaHQ2NCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NEFicz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFi
c0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBj
b2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9
IGdwcigpOworICAgIFRtcCB2YWx1ZSA9IGdwcigpOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVU
bzY0LCBhcmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAw
MDAwMDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQ2NCwgdGVtcDEsIHNpZ24sIHNpZ24p
OworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmZmZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBl
bmQoQW5kNjQsIHRlbXAxLCB2YWx1ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9yNjQsIHNpZ24s
IHZhbHVlLCB2YWx1ZSk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCB2YWx1ZSwgcmVzdWx0
KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZFNoaWZ0KFJvdGF0ZUxlZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkx0PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTMyPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRG91YmxlLCBh
cmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyTGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNv
bmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVD
b25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFVyc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNv
bnZlcnRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSBn
cHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVy
dEludDY0VG9GbG9hdCwgdGVtcCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyUz4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSc2hpZnQzMiwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMkdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjY0Q2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDZWlsRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEZs
b29yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEZsb29yRG91Ymxl
LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJYb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9yMzIsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRG
bG9hdGluZ1BvaW50QWJzKEFic0Zsb2F0LCBhcmcwLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWluPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBp
c0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwgPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUu
YWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRG91YmxlLCBB
cmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7
CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOwor
CisgICAgYXBwZW5kKGlzRXF1YWwsIE9yRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRp
bnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3Vs
dCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVh
bC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAg
ICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBNb3ZlRG91YmxlLCBhcmcxLCByZXN1bHQpOwor
ICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIEp1bXApOworICAgIGdyZWF0ZXJUaGFuT3JF
cXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sg
PSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE11bEZsb2F0LCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWI2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlJlaW50ZXJwcmV0RjMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFkZD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChBZGQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3ViPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgaWYgKGlzVmFs
aWRGb3JtKFN1YkRvdWJsZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAg
IGFwcGVuZChTdWJEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwg
YXJnMSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFN1YkRvdWJsZSwgcmVzdWx0LCBhcmcwKTsK
KyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMk9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE9yMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMdFM+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuKSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJNjQ+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9Eb3VibGUsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFhvcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChYb3I2NCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoTXVsNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMlN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGlmIChpc1ZhbGlkRm9ybShTdWJGbG9hdCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBB
cmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChTdWJGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisgICAgICAgIGFw
cGVuZChNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTdWJGbG9hdCwg
cmVzdWx0LCBhcmcwKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFByb21vdGVGMzI+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEZsb2F0VG9Eb3VibGUsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChBZGREb3VibGUsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kVUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk5l
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoYXJnMCAmJiBhcmcxKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0UmVpbnRlcnByZXRJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgYXBwZW5kKEZsb29yRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBw
ZW5kKENvbnZlcnRJbnQzMlRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVx
ej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0MzIsIEFyZzo6
cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFJlaW50ZXJwcmV0RjY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRT
aHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJz
aGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRT
cXJ0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnREb3VibGUs
IGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
Mkd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMldy
YXBJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBh
cmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZUxlZnQzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hp
ZnQoUm90YXRlUmlnaHQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0VT4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okdy
ZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVnPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKE5lZ2F0ZURvdWJs
ZSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKE5lZ2F0ZURvdWJsZSwgYXJn
MCwgcmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgVG1wIGNvbnN0YW50ID0gYWRkQ29uc3Rh
bnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4o
LTEuMCkpKTsKKyAgICAgICAgYXBwZW5kKE11bEZsb2F0LCBjb25zdGFudCwgYXJnMCwgcmVzdWx0
KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVu
ZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNl
dFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFu
ZERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7
CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5k
KG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVh
bCwgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxl
c3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1Ro
YW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3VibGUsIGFy
ZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+
c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250
aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRMZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NEFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChBZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0
b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFp
cihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0
cik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICsz
MTUsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluCiAgICAgZWZm
ZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBlZmZlY3RzOwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1f
d2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOwotICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5j
ZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOyAvLyBPT1BTOiBQcm9i
YWJseSBzaG91bGQgYmUgdXNpbmcgYXJnIQogICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNl
R1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtKSB7CiAgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4
dEluc3RhbmNlR1BSKTsKQEAgLTQ1OSw5ICs0NTksOSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJl
c3RvcmVXZWJBc3NlbWJseUdsCiAKICAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgPT0g
UmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgewogICAgICAgICAvLyBUaGUgSW5zdGFuY2Ug
Y2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9uaWNh
bCBsb2NhdGlvbiBpcy4KLSAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+
KEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOwotICAgICAg
ICBWYWx1ZSogYWN0dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJU
b0FjdHVhbFN0YWNrTGltaXQpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1pdCwgaW5z
dGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRT
dGFja0xpbWl0KCkpKTsKKyAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQg
PSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNl
OjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOworICAgICAgICBWYWx1ZSog
YWN0dWFsU3RhY2tMaW1pdCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQp
OworICAgICAgICBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBv
cmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1pdCwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQz
Ml90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsgLy8gT09QUzogc2hv
dWxkIGJlIGJsb2NrIQogICAgIH0KIAogICAgIGlmICghIW1lbW9yeSkgewpAQCAtMTYwOSw2ICsx
NjA5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2NAogICAgIGlm
IChpc1g4NigpKQogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAx
OwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1h
Y3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwogI2lmIENQVShYODZfNjQpCkBAIC0xNjI5LDYgKzE2MzAsNyBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29uCiAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAg
IHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7Cisg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJz
KCkpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAjaWYgQ1BVKFg4
Nl82NCkKQEAgLTE4MzgsNyArMTg0MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRUcnUKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0g
MTsKICAgICB9CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOyAvLyBP
T1BTOiBUaGlzIGxvb2tzIHN1cGVyIHdyb25nIGdpdmVuIHdlIGRvbid0IHNheSB3ZSBjbG9iYmVy
IHRoaXMhCiAgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKICAgICAgICAg
RlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKICAgICAgICAgaWYgKGlzWDg2KCkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlz
aW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNDb21waWxh
dGlvbi5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUFp
cklSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNsdWRlICJXYXNt
Q2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCkBAIC0yNzEsNyAr
MjcyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aQogCiAgICAg
ICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKICAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9w
dGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5k
ZXhdIDogbnVsbHB0cjsKLSAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJz
ZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlv
bi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJV
cCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25J
bmRleF0sIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0
dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rp
b25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICAgICAgaWYgKFVO
TElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDM2IEBAIGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlv
biYgd2FzbUNhbGxpbmcKICAgICByZXR1cm4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOwog
fQogCitjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbkFpciYganNjQ2FsbGluZ0NvbnZlbnRpb25B
aXIoKQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SlNDQ2FsbGluZ0NvbnZlbnRp
b25BaXI+IHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uo
c3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnLCBbXSAoKSB7CisgICAgICAgIHN0YXRpY0pT
Q0NhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVjdChWZWN0b3I8UmVnPigpLCBWZWN0b3I8UmVnPigp
LCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9KTsKKworICAgIHJl
dHVybiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKK30KKworY29uc3QgV2FzbUNhbGxpbmdD
b252ZW50aW9uQWlyJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKQoreworICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8V2FzbUNhbGxpbmdDb252ZW50aW9uQWlyPiBzdGF0aWNXYXNtQ2Fs
bGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dhc21DYWxs
aW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV2FzbUNhbGxpbmdD
b252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJl
Z2lzdGVycyhHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7
ICsraSkKKyAgICAgICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVn
aXN0ZXJzKEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsg
KytpKQorICAgICAgICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0Fy
Z3VtZW50UmVnaXN0ZXIoaSk7CisKKyAgICAgICAgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9u
LmNvbnN0cnVjdChXVEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1
bWVudFJlZ2lzdGVycyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAg
IH0pOworCisgICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRl
ICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJCM0FyZ3VtZW50
UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKQEAgLTQ0LDI3ICs0NSwyNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi10eXBlZGVmIHVuc2lnbmVk
ICgqTmV4dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUgdHlwZSk7Cit0
eXBlZGVmIHVuc2lnbmVkICgqTmV4dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9mZnNldCk7CiAK
IHRlbXBsYXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0Pgog
Y2xhc3MgQ2FsbGluZ0NvbnZlbnRpb24gewogcHVibGljOgogICAgIENhbGxpbmdDb252ZW50aW9u
KFZlY3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNl
dCYmIGNhbGxlZVNhdmVSZWdpc3RlcnMpCi0gICAgICAgIDogbV9ncHJBcmdzKGdwckFyZ3MpCi0g
ICAgICAgICwgbV9mcHJBcmdzKGZwckFyZ3MpCi0gICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzKGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKFdURk1vdmUoZ3By
QXJncykpCisgICAgICAgICwgbV9mcHJBcmdzKFdURk1vdmUoZnByQXJncykpCisgICAgICAgICwg
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUoY2FsbGVlU2F2ZVJlZ2lzdGVycykpCiAgICAg
ewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBCMzo6VmFsdWVSZXAgbWFyc2hhbGxBcmd1bWVudElt
cGwoVmVjdG9yPFJlZz4gcmVnQXJncywgQjM6OlR5cGUgdHlwZSwgc2l6ZV90JiBjb3VudCwgc2l6
ZV90JiBzdGFja09mZnNldCkgY29uc3QKKyAgICBCMzo6VmFsdWVSZXAgbWFyc2hhbGxBcmd1bWVu
dEltcGwoY29uc3QgVmVjdG9yPFJlZz4mIHJlZ0FyZ3MsIHNpemVfdCYgY291bnQsIHNpemVfdCYg
c3RhY2tPZmZzZXQpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY291bnQgPCByZWdBcmdzLnNp
emUoKSkKICAgICAgICAgICAgIHJldHVybiBCMzo6VmFsdWVSZXA6OnJlZyhyZWdBcmdzW2NvdW50
KytdKTsKIAogICAgICAgICBjb3VudCsrOwogICAgICAgICBCMzo6VmFsdWVSZXAgcmVzdWx0ID0g
QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KTsKLSAgICAgICAgc3RhY2tP
ZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQsIHR5cGUpOworICAgICAgICBzdGFja09m
ZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCkBAIC03MywxMCArNzQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgQjM6OkludDMyOgogICAgICAgICBjYXNlIEIzOjpJbnQ2NDoK
LSAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIHR5cGUs
IGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIG1hcnNo
YWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7
CiAgICAgICAgIGNhc2UgQjM6OkZsb2F0OgogICAgICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAg
ICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCB0eXBlLCBmcEFy
Z3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFy
Z3VtZW50SW1wbChtX2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwogICAg
ICAgICBjYXNlIEIzOjpWb2lkOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE4
OSwxOSArMTkwLDE0MSBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJT
YXZlUmVnaXN0ZXJzOwogfTsKIAotaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWdu
ZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUpCit0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXpl
LCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KK2NsYXNzIENhbGxpbmdDb252ZW50aW9uQWlyIHsK
K3B1YmxpYzoKKyAgICBDYWxsaW5nQ29udmVudGlvbkFpcihWZWN0b3I8UmVnPiYmIGdwckFyZ3Ms
IFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJz
KQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZNb3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnBy
QXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhX
VEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMpKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
c2NyYXRjaCA9IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVk
ZShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBzY3JhdGNo
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAg
ICAgIGZvciAoUmVnIHJlZyA6IG1fZ3ByQXJncykKKyAgICAgICAgICAgIHNjcmF0Y2guY2xlYXIo
cmVnKTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogc2NyYXRjaCkKKyAgICAgICAgICAgIG1fc2Ny
YXRjaEdQUnMuYXBwZW5kKHJlZyk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc2NyYXRjaEdQ
UnMuc2l6ZSgpID49IDMpOworICAgIH0KKworICAgIEdQUlJlZyBwcm9sb2d1ZVNjcmF0Y2goc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc2NyYXRjaEdQUnNbaV0uZ3ByKCk7IH0KKworcHJpdmF0
ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVnRnVuYywgdHlwZW5hbWUgU3RhY2tGdW5jPgor
ICAgIHZvaWQgbWFyc2hhbGxBcmd1bWVudEltcGwoY29uc3QgVmVjdG9yPFJlZz4mIHJlZ0FyZ3Ms
IHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1
bmMsIGNvbnN0IFN0YWNrRnVuYyYgc3RhY2tGdW5jKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGNvdW50IDwgcmVnQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJlZ0Z1bmMocmVnQXJnc1tj
b3VudCsrXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb3Vu
dCsrOworICAgICAgICBzdGFja0Z1bmMoc3RhY2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNl
dCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0YWNrRnVuYz4KKyAgICB2b2lkIG1hcnNoYWxsQXJn
dW1lbnQoVHlwZSB0eXBlLCBzaXplX3QmIGdwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBmcEFyZ3Vt
ZW50Q291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1bmMsIGNv
bnN0IFN0YWNrRnVuYyYgc3RhY2tGdW5jKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoK
KyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwgcmVnRnVuYywgc3RhY2tGdW5jKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAg
ICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwg
c3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVy
U2l6ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFkZXJTaXplOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgbG9hZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNp
emVfdCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50
ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkg
eworICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudChzaWduYXR1cmUuYXJndW1lbnQoaSksIGdw
QXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwKKyAgICAgICAgICAg
ICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihCMzo6QWly
OjpUbXAocmVnKSwgaSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0g
KHNpemVfdCBzdGFja09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKEIzOjpB
aXI6OkFyZzo6YWRkcihCMzo6QWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBz
dGFja09mZnNldCksIGkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gSXQncyBleHBlY3RlZCB0aGF0IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhl
IGdlbmVyYXRvciBmb3IgdGhlIGNhbGwgb3BlcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBzZXR1cENhbGwoQjM6OkFpcjo6Q29kZSYgY29kZSwgVHlwZSBy
ZXR1cm5UeXBlLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50LCBjb25zdCBWZWN0b3I8
QjM6OkFpcjo6VG1wPiYgYXJncywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7
CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBB
cmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6
ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKworICAgICAgICBmb3IgKGF1dG8gdG1wIDog
YXJncykgeworICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudCh0bXAuaXNHUCgpID8gVHlwZTo6
STY0IDogVHlwZTo6RjY0LCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQsCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0b3IodG1wLCBCMzo6VmFsdWVSZXA6OnJlZyhyZWcpKTsKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIFsmXSAoc2l6ZV90IHN0YWNrT2Zmc2V0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0b3IodG1wLCBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoc3Rh
Y2tPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGNv
ZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RhY2tPZmZzZXQpKTsKKworICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVn
aXN0ZXJzRm9ySlNDYWxsKCkpOworCisgICAgICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAg
ICAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25z
dHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgVmVjdG9y
PFJlZz4gbV9ncHJBcmdzOworICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZnByQXJnczsKKyAgICBW
ZWN0b3I8UmVnPiBtX3NjcmF0Y2hHUFJzOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVl
U2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3Rl
cnM7Cit9OworCitpbmxpbmUgdW5zaWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50
T2Zmc2V0KQogewogICAgIHJldHVybiBjdXJyZW50T2Zmc2V0ICsgc2l6ZW9mKFJlZ2lzdGVyKTsK
IH0KIAogY29uc3RleHByIHVuc2lnbmVkIGpzY0hlYWRlclNpemUgPSBFeGVjU3RhdGU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rlcik7Ci10eXBlZGVmIENhbGxpbmdDb252
ZW50aW9uPGpzY0hlYWRlclNpemUsIG5leHRKU0NPZmZzZXQ+IEpTQ0NhbGxpbmdDb252ZW50aW9u
OwotCi10eXBlZGVmIEpTQ0NhbGxpbmdDb252ZW50aW9uIFdhc21DYWxsaW5nQ29udmVudGlvbjsK
IAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRpb24gPSBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFk
ZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3VzaW5nIFdhc21DYWxsaW5nQ29udmVudGlvbiA9IEpT
Q0NhbGxpbmdDb252ZW50aW9uOwogY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxp
bmdDb252ZW50aW9uKCk7CiBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5n
Q29udmVudGlvbigpOwogCit1c2luZyBKU0NDYWxsaW5nQ29udmVudGlvbkFpciA9IENhbGxpbmdD
b252ZW50aW9uQWlyPGpzY0hlYWRlclNpemUsIG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNh
bGxpbmdDb252ZW50aW9uQWlyID0gSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXI7Citjb25zdCBKU0ND
YWxsaW5nQ29udmVudGlvbkFpciYganNjQ2FsbGluZ0NvbnZlbnRpb25BaXIoKTsKK2NvbnN0IFdh
c21DYWxsaW5nQ29udmVudGlvbkFpciYgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCk7CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360420</attachid>
            <date>2019-01-28 19:21:11 -0800</date>
            <delta_ts>2019-01-28 19:23:59 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>164020</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDkgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgICAgICBicmVhazsKICAgICB9CiAK
KyAgICBpZiAoIXZhbHVlKSAvLyBPT1BTCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xv
YmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlk
ZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQog
ICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hB
cmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUo
KQogewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2
b2lkIENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8
UmVnPiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVk
UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vh
a1JhbmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9p
ZCBlbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0
ZXhwciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzkzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVk
ZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNt
RnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bj
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25z
dHJhaW5lZFRtcCB7CisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25z
dHJhaW5lZFRtcCh0bXAsIHRtcC5pc1JlZygpID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygp
KSA6IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWlu
ZWRUbXAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAg
ICAgICAsIHJlcChyZXApCisgICAgeworICAgIH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZh
bHVlUmVwIHJlcDsKK307CisKK2NsYXNzIEFpcklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBz
dHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdp
biwgVHlwZSByZXR1cm5UeXBlLCBUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNC
bG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAg
ICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250
aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwg
cmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFS
QU0ob3JpZ2luKTsgLy8gT09QUworICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlID09IFR5cGU6OlZvaWQpOworICAgICAgICB9CisK
KyAgICAgICAgQ29udHJvbERhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9v
cDogICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9j
a1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0
LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwor
ICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCpzcGVj
aWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUi
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
YmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBy
ZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3Qg
eyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAg
ICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0
SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAs
IDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRG
b3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tU
eXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHJl
dHVyblR5cGU7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVG1wOworICAg
IHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhwcmVzc2lvbkxp
c3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBD
b250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlv
blBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25z
dCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb247CisKKyAgICB1c2luZyBFcnJvclR5cGUg
PSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVj
dGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4K
KyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFp
bChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFp
bHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZh
aWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2Rl
ZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAg
IGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDAp
CisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9j
ZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKKworICAgIC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAg
ICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExv
YWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
c3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
IHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRv
cnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblpl
cm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAg
Ly8gQ29udHJvbCBmbG93CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRv
cExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShD
b250cm9sRGF0YSYpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENv
bnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERh
dGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lv
blN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKworICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoQjM6
OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1
YihCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5n
UG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3Ao
QjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENv
bnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Np
b25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CisKK3ByaXZhdGU6CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGlmICghaW5zdC5pc1ZhbGlkRm9y
bSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGluc3QpOworICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJsb2Nr
LCBLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8v
IE9PUFM6IEFkZCBvcmlnaW4KKyAgICAgICAgYXV0byYgaW5zdCA9IGJsb2NrLT5hcHBlbmQoa2lu
ZCwgbnVsbHB0ciwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAg
ICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoS2luZCBraW5kLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIGtpbmQsIHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIFRtcCB0
bXAoQjM6OkJhbmsgYmFuaykgeyByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsgfQorICAgIFRt
cCBncHIoKSB7IHJldHVybiB0bXAoQjM6OkdQKTsgfQorICAgIFRtcCBmcHIoKSB7IHJldHVybiB0
bXAoQjM6OkZQKTsgfQorICAgIFRtcCB0bXBGb3JUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIGNhc2UgVHlw
ZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBmcHIo
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGFkZFBhdGNocG9pbnQoQjM6OlR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb2MuYWRkPEIzOjpQYXRjaHBvaW50
VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCMzo6UGF0Y2hwb2ludFZhbHVl
KiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgZW1p
dFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxB
cmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFy
Z3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAg
IHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVj
dG9yPENvbnN0cmFpbmVkVG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsK
KyAgICB9CisKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ss
IEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFp
bmVkVG1wPigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+Cisg
ICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxp
bmVTaXplPiYmIGFyZ3MpCisgICAgeworICAgICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwp
CisgICAgICAgICAgICBtX3BhdGNocG9pbnRTcGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBhdGNo
cG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6UGF0
Y2hwb2ludFNwZWNpYWw+KCkpKTsKKworICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNoLCBB
cmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOworICAgICAgICBJbnN0IHJlc3VsdE1v
djsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50eXBl
KCkgIT0gQjM6OlZvaWQpOworICAgICAgICAgICAgc3dpdGNoIChwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoK
KyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5yZWcoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdE1vdiA9IEluc3QocmVzdWx0Lmlz
R1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAocGF0Y2gtPnJlc3VsdENvbnN0
cmFpbnQucmVnKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKHBhdGNo
LT50eXBlKCkgPT0gQjM6OlZvaWQpOworICAgICAgICAKKyAgICAgICAgZm9yIChDb25zdHJhaW5l
ZFRtcCYgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8gT09QUzogVWdoLCB0aGlzIGlzIHN1
cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBCMzo6VmFsdWUqIGhlcmUuCisgICAg
ICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdvcmssIGJ1dCBvdXIgYWx0ZXJuYXRp
dmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAgICAgLy8gb3IgcmVpbnZlbnQgcGFy
dCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1
ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNHUCgpID8gQjM6
OkludDY0IDogQjM6OkRvdWJsZSwgMCk7CisgICAgICAgICAgICBwYXRjaC0+YXBwZW5kKGR1bW15
VmFsdWUsIHRtcC5yZXApOworICAgICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtpbmQoKSkgewor
ICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcC50bXApOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAg
IC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2FudCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2
MyBhbmQgZjMyL2Y2NAorICAgICAgICAgICAgICAgIHBhdGNoLT5lYXJseUNsb2JiZXJlZCgpLmNs
ZWFyKHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0
bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCB0bXAucmVwLnJlZygp
KTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcCh0bXAucmVwLnJlZygpKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6
U3RhY2tBcmd1bWVudDogeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2Fu
dCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2MyBhbmQgZjMyL2Y2NAorICAgICAgICAg
ICAgICAgIGF1dG8gYXJnID0gQXJnOjpjYWxsQXJnKHRtcC5yZXAub2Zmc2V0RnJvbVNQKCkpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUg
OiBNb3ZlRG91YmxlLCB0bXAudG1wLCBhcmcpOworICAgICAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXRjaC0+cmVz
dWx0Q29uc3RyYWludC5pc1JlZygpKQorICAgICAgICAgICAgcGF0Y2gtPmxhdGVDbG9iYmVyZWQo
KS5jbGVhcihwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHBhdGNoLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKGdwcigpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0
Y2gtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoZnByKCkpOworCisgICAgICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICAgICAgYmFz
aWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgICAgICBpZiAocmVzdWx0TW92KSB7
CisgICAgICAgICAgICB2YWxpZGF0ZUluc3QocmVzdWx0TW92KTsKKyAgICAgICAgICAgIGJhc2lj
QmxvY2stPmFwcGVuZChXVEZNb3ZlKHJlc3VsdE1vdikpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5jaCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZv
aWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYgZW1pdEJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBn
ZW5lcmF0b3IpCisgICAgeworICAgICAgICAvLyBXZSBmYWlsIGFsb25nIHRoZSAidHJ1dGh5IiBl
ZGdlIG9mICdicmFuY2gnCisKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZhaWxlZCA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgICAgICAKKyAgICAgICAgZW1pdEJyYW5jaCgpOworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWlsZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
YXV0byogZmFpbGVkUGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAg
ICBmYWlsZWRQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1p
dFBhdGNocG9pbnQoZmFpbGVkLCBmYWlsZWRQYXRjaHBvaW50LCBUbXAoKSk7CisgICAgICAgIGFw
cGVuZChmYWlsZWQsIE9vcHMpOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5B
cmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEZ1bmMgZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgZW1pdENDYWxsKG1fY3VycmVudEJsb2NrLCBmdW5jLCByZXN1
bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2lj
QmxvY2sqIGJsb2NrLCBGdW5jIGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAg
ICB7CisgICAgICAgIEIzOjpUeXBlIHJlc3VsdFR5cGUgPSBCMzo6Vm9pZDsKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdFR5cGUgPSByZXN1bHQuaXNHUCgpID8gQjM6Oklu
dDY0IDogQjM6OkRvdWJsZTsKKworICAgICAgICBhdXRvIG1ha2VEdW1teVZhbHVlID0gWyZdIChU
bXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmlzR1AoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkludDY0LCAwKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6RG91
YmxlLCAwKTsKKyAgICAgICAgfTsKKworICAgICAgICBCMzo6VmFsdWUqIGR1bW15RnVuYyA9IG1f
cHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oZnVuYykpOworICAgICAgICBCMzo6VmFsdWUqIG9yaWdpbiA9IG1fcHJvYy5hZGQ8
QjM6OkNDYWxsVmFsdWU+KHJlc3VsdFR5cGUsIEIzOjpPcmlnaW4oKSwgQjM6OkVmZmVjdHM6Om5v
bmUoKSwgZHVtbXlGdW5jLCBtYWtlRHVtbXlWYWx1ZSh0aGVBcmdzKS4uLik7CisKKyAgICAgICAg
SW5zdCBpbnN0KENDYWxsLCBvcmlnaW4pOworCisgICAgICAgIFRtcCBjYWxsZWUgPSBncHIoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
ZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQocmVzdWx0KTsKKworICAgICAgICBmb3IgKFRtcCB0bXAgOiBWZWN0b3I8VG1wLCBzaXpl
b2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZCh0bXApOworCisgICAgICAgIGJsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAg
fQorCisgICAgc3RhdGljIEIzOjpBaXI6Ok9wY29kZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0
eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6
STMyOgorICAgICAgICAgICAgcmV0dXJuIE1vdmUzMjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6
CisgICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAg
ICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisg
ICAgdm9pZCBlbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmln
aW4pOworCisgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7
CisgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVP
cFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50
MzJfdCBvZmZzZXQpOworCisgICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSYgZHN0
LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlz
dCYgc3RhY2spOworCisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwg
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOworCisgICAgaW50MzJf
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlw
ZSYsIHVpbnQzMl90KTsKKworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFz
aWNCbG9jayosIFRtcCk7CisgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7
IE5vLCBZZXMgfTsKKyAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFRtcCBpbnN0YW5j
ZSwgQmFzaWNCbG9jayopOworCisgICAgQjM6Ok9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzogV2Ug
bmVlZCB0byBtYWtlIGFuIEFpcjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGZy
b20gQjMgY29kZS4KKworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJz
ZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAg
ICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07
CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsg
VUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07
CisKKyAgICBCMzo6UHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQ29kZSYgbV9jb2RlOworICAgIEJh
c2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1f
cm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wLCBUeXBlPj4g
bV9sb2NhbHM7CisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24g
aW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIEdQUlJl
ZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fbWVtb3J5
U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2Ug
fTsKKworICAgIFRtcCBtX2luc3RhbmNlVmFsdWU7IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29y
IGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4g
dXNlZC4KKyAgICBib29sIG1fdXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9OworICAgIFRtcCBp
bnN0YW5jZVZhbHVlKCkKKyAgICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUgPSB0cnVl
OworICAgICAgICByZXR1cm4gbV9pbnN0YW5jZVZhbHVlOworICAgIH0KKworICAgIHVpbnQzMl90
IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OworCisgICAgQjM6OlBhdGNocG9pbnRTcGVj
aWFsKiBtX3BhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworfTsKKworY29uc3QgVG1wIEFp
cklSR2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24gPSBUbXAoKTsKKworLy8gTWVtb3J5IGFjY2Vz
c2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMg
dGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK2ludDMyX3QgQWlySVJHZW5l
cmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMy
X3Qgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
IHsKKyAgICAgICAgVG1wIHByZXZpb3VzUHRyID0gcHRyOworICAgICAgICBwdHIgPSBncHIoKTsK
KyAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmJpZ0ltbShvZmZzZXQpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgY29uc3Rh
bnQsIHByZXZpb3VzUHRyLCBwdHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0
dXJuIG9mZnNldDsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ssIFRtcCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2Fs
bEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0
Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dElu
c3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3Rv
cmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1
c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVn
aXN0ZXIuCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOwor
ICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVj
dHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5n
ZTo6dG9wKCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7
CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFI7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7CisgICAgICAg
IGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICB9
KTsKKyAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24q
IGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlKQorICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY29t
cGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5j
dGlvbkluZGV4KQorICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHByb2NlZHVy
ZSkKKyAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQorICAgICwgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKK3sKKyAgICBtX2N1cnJlbnRCbG9jayA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fcm9vdEJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisK
KyAgICAvLyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUg
aWYgdGhlcmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxl
ciBmb3Igbm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIz
CisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CisgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CisK
KyAgICBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyOworICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBt
X2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKworICAgIGlmICht
b2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICBBU1NFUlQoIXBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgbV9tZW1vcnlTaXplR1BS
ID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9y
IChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJl
Z2lzdGVyKTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAgICBU
aHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRp
b24pOworCisgICAgaWYgKGluZm8ubWVtb3J5KSB7CisgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91
bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQ
UikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIEludmFsaWRHUFJSZWcgPT0g
cGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9m
Qm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21v
ZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAg
ICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFu
IGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRpb24gY2hlY2sgYmVjYXVzZSB0aGV5IGNh
biByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAgICAgICAgICAgLy8gb3V0LW9m
LWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRo
ZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0
aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigp
LnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRzKDEpOworCisgICAgR1BSUmVnIGNvbnRleHRJbnN0
YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigp
LnByb2xvZ3VlU2NyYXRjaCgyKSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKworICAgIFJl
ZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVT
aGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBjb2RlLmVtaXRE
ZWZhdWx0UHJvbG9ndWUoaml0KTsKKworICAgICAgICB7CisgICAgICAgICAgICBHUFJSZWcgY2Fs
bGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOwor
ICAgICAgICAgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbY29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0
aW9uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICBq
aXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBDaGVja2Vk
PGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtUGFyZW50Q2hlY2tTaXplID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgMTAyNCk7CisgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBleHRyYUZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIHN0ZDo6bWF4PHVpbnQzMl90PigKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgZm9yIGZ1bmN0aW9ucyB0aGF0
IGFyZSB0ZXJtaW5hbCBub2RlcyBpbiB0aGUgY2FsbAorICAgICAgICAgICAgICAgIC8vIHRyZWUs
IChlLmcgdGhleSBkb24ndCBtYWtlIGFueSBjYWxscykgYW5kIGhhdmUgYSBzbWFsbCBlbm91Z2gg
ZnJhbWUgc2l6ZS4gVGhpcyB3b3JrcyBieQorICAgICAgICAgICAgICAgIC8vIGhhdmluZyBhbnkg
c3VjaCB0ZXJtaW5hbCBub2RlIGhhdmUgaXRzIHBhcmVudCBjYWxsZXIgaW5jbHVkZSBzb21lIGV4
dHJhIHNpemUgaW4gaXRzCisgICAgICAgICAgICAgICAgLy8gb3duIGNoZWNrIGZvciBpdC4gVGhl
IGdvYWwgaGVyZSBpcyB0d29mb2xkOgorICAgICAgICAgICAgICAgIC8vIDEuIEVtaXQgbGVzcyBj
b2RlLgorICAgICAgICAgICAgICAgIC8vIDIuIFRyeSB0byBzcGVlZCB0aGluZ3MgdXAgYnkgc2tp
cHBpbmcgc3RhY2sgY2hlY2tzLgorICAgICAgICAgICAgICAgIG1pbmltdW1QYXJlbnRDaGVja1Np
emUsCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hl
Y2tzIGluIHRoZSBXYXNtIC0+IEVtYmVkZGVyIGNhbGwgSUMgc3R1Yi4gU2luY2UgdGhlc2Ugd2ls
bAorICAgICAgICAgICAgICAgIC8vIHNwaWxsIGFsbCBhcmd1bWVudHMgdG8gdGhlIHN0YWNrLCB3
ZSBlbnN1cmUgdGhhdCBhIHN0YWNrIGNoZWNrIGhlcmUgY292ZXJzIHRoZQorICAgICAgICAgICAg
ICAgIC8vIHN0YWNrIHRoYXQgc3VjaCBhIHN0dWIgd291bGQgdXNlLgorICAgICAgICAgICAgICAg
IChDaGVja2VkPHVpbnQzMl90PihtX21heE51bUpTQ2FsbEFyZ3VtZW50cykgKiBzaXplb2YoUmVn
aXN0ZXIpICsganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5oZWFkZXJTaXplSW5CeXRlcygpKS51bnNh
ZmVHZXQoKQorICAgICAgICAgICAgKSk7CisgICAgICAgICAgICBjb25zdCBpbnQzMl90IGNoZWNr
U2l6ZSA9IG1fbWFrZXNDYWxscyA/ICh3YXNtRnJhbWVTaXplICsgZXh0cmFGcmFtZVNpemUpLnVu
c2FmZUdldCgpIDogd2FzbUZyYW1lU2l6ZS51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIGJvb2wg
bmVlZFVuZGVyZmxvd0NoZWNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBP
cHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZs
b3dDaGVjayA9IG1fbWFrZXNDYWxscyB8fCB3YXNtRnJhbWVTaXplID49IG1pbmltdW1QYXJlbnRD
aGVja1NpemUgfHwgbmVlZFVuZGVyZmxvd0NoZWNrOworCisgICAgICAgICAgICAvLyBUaGlzIGFs
bG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1l
IHNpemUgaXMgd2l0aGluCisgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVp
ciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgorICAgICAgICAgICAg
aWYgKG5lZWRzT3ZlcmZsb3dDaGVjaykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2go
MCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpOworCisgICAgICAgICAgICAgICAgaWYgKENvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgb3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRV
bmRlcmZsb3dDaGVjaykpCisgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQu
YnJhbmNoUHRyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2gxLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNo
UHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gxLCBzY3JhdGNoMikpOworICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJv
d1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAm
JiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxv
dyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRv
IGJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0
YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBX
ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBw
YXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBz
dGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGdwcigpOwor
ICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2Ug
aW5zdGFuY2UgdmFsdWUuCisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNl
KSwgbV9pbnN0YW5jZVZhbHVlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVl
ID0gVG1wKGNvbnRleHRJbnN0YW5jZSk7CisKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7
CisgICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Cisg
ICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2
NDoKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0geyBncHIoKSwgdHlwZSB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2
NDoKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0geyBmcHIoKSwgdHlwZSB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgd2FzbUNhbGxpbmdDb252ZW50
aW9uQWlyKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUsIFsmXSAoY29uc3QgQXJnJiBhcmcsIHVu
c2lnbmVkIGkpIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAg
ICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCBhcmcsIG1f
bG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
Okk2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlRmxvYXQsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfSk7CisKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6OmZ1
bmN0aW9uRW50cnlEZWNyZW1lbnQoKSwgQjM6Ok9yaWdpbigpKTsKK30KKwordm9pZCBBaXJJUkdl
bmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBt
ZW1vcnksIFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVzdG9yZVdh
c21Db250ZXh0SW5zdGFuY2UoYmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlmIChyZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CisgICAgICAg
IC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3
aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxJbnN0YW5jZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFj
a0xpbWl0KCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiIik7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0
dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChB
cmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCks
IEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgICAgIGFwcGVu
ZChibG9jaywgTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNl
dE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSwgdGVtcCk7CisgICAgICAgIGFwcGVuZChi
bG9jaywgTW92ZSwgQXJnOjphZGRyKHRlbXApLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2Nr
LCBNb3ZlLCB0ZW1wLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoISFtZW1vcnkpIHsKKyAg
ICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCk7CisgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJzOworICAgICAgICBj
bG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOworICAgICAgICBmb3Ig
KGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnMpCisgICAgICAgICAgICBjbG9i
YmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOworCisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9
IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgICAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihjbG9iYmVycyk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5u
ZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRS
ZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdz
ID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVn
cy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZz
ZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2Fs
Y3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBh
cmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVt
b3J5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIs
IHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQ
YXRjaHBvaW50KHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lk
IEFpcklSR2VuZXJhdG9yOjplbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEV4
Y2VwdGlvblR5cGUgdHlwZSkKK3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgIGF1dG8ganVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBqaXQu
YWRkTGlua1Rhc2soW2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93
RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxv
dz4gdG90YWxCeXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCArPSBt
X2xvY2Fscy5zaXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NPTVBJ
TEVfRkFJTF9JRigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBDaGVj
a2VkU3RhdGU6OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGxv
Y2FscyIpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBj
YXNlIFR5cGU6Okk2NDogeworICAgICAgICAgICAgVG1wIGxvY2FsID0gZ3ByKCk7CisgICAgICAg
ICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAg
ICAgIGFwcGVuZChYb3I2NCwgbG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDog
eworICAgICAgICAgICAgVG1wIGxvY2FsID0gZnByKCk7CisgICAgICAgICAgICBtX2xvY2Fscy51
bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIFRtcCB0ZW1wID0g
Z3ByKCk7CisgICAgICAgICAgICAvLyBJRUVFIDc1NCAiMCIgaXMganVzdCBpbnQzMi82NCB6ZXJv
LgorICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgICAgIGFw
cGVuZCh0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwg
dGVtcCwgbG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFM6
IElzIHRoaXMgY29ycmVjdD8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZh
bHVlKSAtPiBFeHByZXNzaW9uVHlwZQoreworICAgIFRtcCByZXN1bHQ7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAg
IHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUp
LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNl
IFR5cGU6OkY2NDogeworICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgVG1wIHRtcCA9
IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCB0bXApOwor
ICAgICAgICBhcHBlbmQodHlwZSA9PSBUeXBlOjpGMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0
VG9Eb3VibGUsIHRtcCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworCit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50
cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fbG9jYWxzLnNpemUoKSA9PSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
KTsgLy8gV2UgaGFuZGxlIGFyZ3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xv
Y2Fsc1tpbmRleF0uZmlyc3QpOworICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XS5maXJzdC5p
c0dQKCkgPyBncHIoKSA6IGZwcigpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9s
b2NhbHNbaW5kZXhdLnNlY29uZCksIG1fbG9jYWxzW2luZGV4XS5maXJzdCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJs
ZSA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0
b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6VW5yZWFjaGFibGUpOworICAgIH0pOworICAgIHVucmVhY2hhYmxlLT5lZmZlY3Rz
LnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBlbWl0UGF0Y2hwb2ludCh1bnJlYWNoYWJsZSwgVG1wKCkp
OworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1v
cnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCosIEluc3RhbmNlKiwg
aW50MzJfdCkgPSBbXSAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGludDMy
X3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJh
bWUoY2FsbEZyYW1lKTsKKworICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0
dXJuIC0xOworCisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5KCktPmdyb3co
UGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWls
UmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFp
bFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdy
b3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7Cisg
ICAgfTsKKworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRDQ2FsbChncm93TWVtb3J5LCBy
ZXN1bHQsIFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIGluc3RhbmNlVmFsdWUoKSwg
ZGVsdGEpOworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRC
bG9jayk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRD
dXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihu
dWxscHRyKS0+c2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9u
IHRoaXMgc2l6ZSIpOworCisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBUbXAgdGVtcDEgPSBn
cHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQo
TW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5U2l6ZSgpKSwgdGVtcDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVl
ID0gMTY7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwg
c2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3Jy
ZWN0LiIpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSgxNiksIHJlc3VsdCk7CisgICAgYWRk
U2hpZnQoVXJzaGlmdDY0LCB0ZW1wMSwgcmVzdWx0LCByZXN1bHQpOworICAgIGFwcGVuZChNb3Zl
MzIsIHJlc3VsdCwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOwor
ICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnNlY29uZCksIHZh
bHVlLCBtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9i
YWxzW2luZGV4XS50eXBlOworCisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAg
IFRtcCB0ZW1wID0gZ3ByKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkds
b2JhbHMoKSksIHRlbXApOworCisgICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90
PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9y
bShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBw
ZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJl
c3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQo
QWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVl
VHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXApLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIHRlbXAg
PSBncHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3Rh
bmNlOjpvZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwg
QXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwg
dGVtcCk7CisKKyAgICBUeXBlIHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKwor
ICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhG
b3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5
cGUodHlwZSksIHZhbHVlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0
ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFy
Zzo6YWRkcih0ZW1wKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFp
cklSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7
CisgICAgVU5VU0VEX1BBUkFNKHNpemVPZk9wZXJhdGlvbik7IC8vIE9PUFMKKworICAgIHN3aXRj
aCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTIQorCisgICAgICAgIC8v
IFdlJ3JlIG5vdCB1c2luZyBzaWduYWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9y
ZSBjaGVjayB0aGF0IG5vIG1lbW9yeSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkg
c2l6ZS4KKyAgICAgICAgLy9BU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgLy9BU1NF
UlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICAgICAgLy9tX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBtX21lbW9yeVNpemVHUFIsIHBvaW50ZXIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZzogeworICAgICAgICAvLyBXZSd2ZSB2aXJ0dWFsbHkgbWFwcGVkIDRHaUIrcmVkem9uZSBmb3Ig
dGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJs
ZSwgY29udGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50XSwKKyAgICAgICAgLy8gYW5kIGV2
ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJm
b3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBX
ZWJBc3NlbWJseSByZWdpc3RlcgorICAgICAgICAvLyBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJp
dC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlciArIG9mZnNldCBhY2Nlc3NlcyBwZXJmb3Jt
IHRoZSBhZGRpdGlvbiBpbiA2NC1iaXQgd2hpY2ggY2FuIHB1c2ggYW4gYWNjZXNzIGFib3ZlCisg
ICAgICAgIC8vIHRoZSAzMi1iaXQgbGltaXQgKHRoZSBvZmZzZXQgaXMgdW5zaWduZWQgMzItYml0
KS4gVGhlIHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxsIG9mZnNldHMsIGFuZCB3ZSdsbCBl
eHBsaWNpdGx5IGJvdW5kcyBjaGVjayBhbnkKKyAgICAgICAgLy8gcmVnaXN0ZXIgKyBsYXJnZSBv
ZmZzZXQgYWNjZXNzLiBXZSBkb24ndCB0aGluayB0aGlzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyZXF1
ZW50bHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIHRoYXQgcmVnaXN0
ZXIgKyBsYXJnZSBvZmZzZXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNlIHRoYXQn
cyB0ZWNobmljYWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZyB0aGUK
KyAgICAgICAgLy8gUFJPVF9OT05FIHJlZ2lvbiwgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBh
IHNtYWxsZXIgaW1tZWRpYXRlIGJlY2F1c2UgaXQgY2FuIGNvZGVnZW5zIGJldHRlci4gV2Uga25v
dyB0aGF0IGFueXRoaW5nIGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAgLy8gdGhhbiB0aGUg
ZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0
aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVkICdtYXhpbXVtJyB0aGVuIHdlIHN0
aWxsIGtub3cgdGhhdAorICAgICAgICAvLyBhbnkgYWNjZXNzIGVxdWFsIHRvIG9yIGdyZWF0ZXIg
dGhhbiA0R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBhZGQgdGhlIHJlZHpvbmUuCisgICAgICAg
IGlmIChvZmZzZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMhCisgICAgICAgICAg
ICAvL3NpemVfdCBtYXhpbXVtID0gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkgPyBtX2luZm8ubWVt
b3J5Lm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpOworICAgICAgICAgICAgLy9tX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHND
aGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBzaXplT2ZPcGVyYXRpb24gKyBv
ZmZzZXQgLSAxLCBtYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgfQorCisgICAgVG1wIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIHBvaW50
ZXIsIHJlc3VsdCk7CisgICAgYXBwZW5kKEFkZDY0LCBUbXAobV9tZW1vcnlCYXNlR1BSKSwgcmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9h
ZE9wKExvYWRPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhV
OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6Cisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDE2VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgIHJldHVy
biAyOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQzMlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgIGNhc2Ug
TG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lu
bGluZSBUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAgICBpbnQzMl90IG9mZnNl
dCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAg
aW1tVG1wOworICAgIFRtcCBuZXdQdHI7CisgICAgVG1wIHJlc3VsdDsKKworICAgIGF1dG8gbG9h
ZEFyZyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQs
IEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZkxvYWRPcChvcCkpKSkKKyAgICAgICAgICAgIHJldHVy
biBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1wID0gZ3ByKCk7Cisg
ICAgICAgIG5ld1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
b2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIHBvaW50ZXIs
IG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsKKyAgICB9OworCisg
ICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CisgICAg
ICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDhTaWduZWRFeHRlbmRUbzMy
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAg
ICBhcHBlbmQoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAg
ICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogeworICAgICAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4LCBsb2FkQXJnKCksIHJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDhVOiB7CisgICAgICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90aGVyIHpleHQgaGVyZT8KKyAg
ICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOCwgbG9hZEFyZygpLCBy
ZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okkz
MkxvYWQxNlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2Fk
MTZTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogeworICAgICAgICByZXN1
bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQs
IHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDE2VTogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExv
YWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVk
IGFub3RoZXIgemV4dCBoZXJlPworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBw
ZW5kKExvYWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkMzJVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZTMy
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2ln
bkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTW92ZSwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIGxvYWRBcmcoKSwgcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2Fk
OiB7CisgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwg
bG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50
MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci5pc0dQ
KCkpOworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBz
aXplT2ZMb2FkT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMg
aXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBz
byB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9u
LiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIz
OjpWb2lkKTsKKyAgICAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2gsIFRtcCgpKTsKKworICAgICAgICAvLyBXZSB3b24ndCByZWFjaCBoZXJlLCBzbyB3ZSBqdXN0
IHBpY2sgYSByYW5kb20gcmVnLgorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQx
NlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToK
KyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAg
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGdw
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9h
ZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisKKyAgICByZXR1
cm4geyB9OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBv
cCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4
OgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlODoKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
NjRTdG9yZTE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJT
dG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3RvcmVP
cFR5cGU6OkYzMlN0b3JlOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFN0b3JlT3BUeXBl
OjpJNjRTdG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKwor
aW5saW5lIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9m
ZnNldCkKK3sKKyAgICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9p
bnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAgaW1tVG1wOworICAgIFRtcCBuZXdQdHI7CisKKyAg
ICBhdXRvIHN0b3JlQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJG
b3JtKG9mZnNldCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mU3RvcmVPcChvcCkpKSkKKyAgICAg
ICAgICAgIHJldHVybiBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1w
ID0gZ3ByKCk7CisgICAgICAgIG5ld1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0ob2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1U
bXAsIHBvaW50ZXIsIG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsK
KyAgICB9OworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAgICAgIGFwcGVuZChT
dG9yZTgsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2
OgorICAgICAgICBhcHBlbmQoU3RvcmUxNiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkkzMlN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZTMyLCB2YWx1ZSwgc3RvcmVB
cmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3Jl
OgorICAgICAgICBhcHBlbmQoTW92ZSwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1v
dmVGbG9hdCwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHZhbHVl
LCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnN0b3JlKFN0b3Jl
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
dWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBvaW50ZXIu
aXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNl
dCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2gg
dGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRpb24gZXJy
b3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVudGltZSBleGNl
cHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBhdXRvKiB0aHJvd0V4Y2VwdGlvbiA9IGFk
ZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbi0+c2V0R2VuZXJh
dG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworICAg
ICAgICBlbWl0UGF0Y2hwb2ludCh0aHJvd0V4Y2VwdGlvbiwgVG1wKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0U3RvcmVPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRl
ciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZhbHVlLCBvZmZzZXQpOworCisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVy
bywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VS
VChub25aZXJvLmlzR1AoKSA9PSB6ZXJvLmlzR1AoKSk7CisgICAgcmVzdWx0ID0gbm9uWmVyby5p
c0dQKCkgPyBncHIoKSA6IGZwcigpOworICAgIGlmIChub25aZXJvLmlzR1AoKSkKKyAgICAgICAg
YXBwZW5kKE1vdmUsIG5vblplcm8sIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQo
TW92ZURvdWJsZSwgbm9uWmVybywgcmVzdWx0KTsKKworICAgIEJhc2ljQmxvY2sqIGlzWmVybyA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29k
ZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzWmVybywgY29udGludWF0aW9uKTsKKworICAgIGlmICh6
ZXJvLmlzR1AoKSkKKyAgICAgICAgYXBwZW5kKGlzWmVybywgTW92ZSwgemVybywgcmVzdWx0KTsK
KyAgICBlbHNlCisgICAgICAgIGFwcGVuZChpc1plcm8sIE1vdmVEb3VibGUsIHplcm8sIHJlc3Vs
dCk7CisgICAgYXBwZW5kKGlzWmVybywgSnVtcCk7CisgICAgaXNaZXJvLT5zZXRTdWNjZXNzb3Jz
KGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVj
ayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbiBvcmlnaW4pCit7CisgICAgVU5V
U0VEX1BBUkFNKG9yaWdpbik7IC8vIE9PUFMKKworICAgIGlmICghbV90aWVyVXApCisgICAgICAg
IHJldHVybjsKKworICAgIFRtcCBjb3VudGRvd25QdHIgPSBncHIoKTsKKyAgICBUbXAgb2xkQ291
bnRkb3duID0gZ3ByKCk7CisgICAgVG1wIG5ld0NvdW50ZG93biA9IGdwcigpOworCisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVw
KSksIGNvdW50ZG93blB0cik7CisgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNvdW50ZG93
blB0ciksIG9sZENvdW50ZG93bik7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRJ
bW1Gb3JtKGRlY3JlbWVudENvdW50KSk7CisgICAgYXBwZW5kKE1vdmUzMiwgb2xkQ291bnRkb3du
LCBuZXdDb3VudGRvd24pOworICAgIGFwcGVuZChTdWIzMiwgQXJnOjppbW0oZGVjcmVtZW50Q291
bnQpLCBuZXdDb3VudGRvd24pOworICAgIGFwcGVuZChNb3ZlMzIsIG5ld0NvdW50ZG93biwgQXJn
OjphZGRyKGNvdW50ZG93blB0cikpOworCisgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50
KEIzOjpWb2lkKTsKKyAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgZWZmZWN0
cy53cml0ZXMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaC0+ZWZmZWN0cyA9IGVm
ZmVjdHM7CisKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCB0aWVyVXAgPSBqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCB0aWVyVXBSZXN1bWUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICBw
YXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
dGllclVwLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhUGFk
ZGluZ0J5dGVzID0gMDsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvU3BpbGwg
PSB7IH07CisgICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsLmFkZChHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJl
Z2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFQYWRkaW5n
Qnl0ZXMpOworCisgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG1fZnVuY3Rpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAg
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNr
Qnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKKyAg
ICAgICAgICAgIGppdC5qdW1wKHRpZXJVcFJlc3VtZSk7CisKKyAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPE5vUHRyVGFnPihjYWxsKSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRo
dW5rczo6c2luZ2xldG9uKCkuc3R1Yih0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOworCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCksIG5ld0NvdW50ZG93biwgb2xkQ291bnRkb3duKTsK
K30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29w
KFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsK
KworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhi
b2R5KTsKKworICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKKyAgICBlbWl0VGllclVwQ2hlY2so
VGllclVwQ291bnQ6Omxvb3BEZWNyZW1lbnQoKSwgb3JpZ2luKCkpOworCisgICAgcmV0dXJuIENv
bnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxv
Y2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6
Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQor
eworICAgIHJldHVybiBDb250cm9sRGF0YShCMzo6T3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9y
VHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX2NvZGUuYWRkQmxvY2soKSk7
Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkQmxv
Y2soVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBz
aWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpCbG9jaywgbV9jb2Rl
LmFkZEJsb2NrKCkpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIAorICAgIC8v
IFdhc20gYm9vbHMgYXJlIGkzMi4KKyAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAg
bV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFrZW4sIG5vdFRha2VuKTsKKworICAgIG1f
Y3VycmVudEJsb2NrID0gdGFrZW47CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEob3JpZ2luKCks
IHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OklmLCBjb250aW51
YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgY3Vy
cmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
Y3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgQVNTRVJUKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgIG1fY3VycmVu
dEJsb2NrID0gZGF0YS5zcGVjaWFsOworICAgIGRhdGEuY29udmVydElmVG9CbG9jaygpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBD
b250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6ZSgpIDw9IDEpOwor
ICAgIGlmIChyZXR1cm5WYWx1ZXMuc2l6ZSgpKSB7CisgICAgICAgIFRtcCByZXR1cm5WYWx1ZUdQ
UiA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIFRtcCByZXR1cm5WYWx1
ZUZQUiA9IFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIHN3aXRjaCAoZGF0
YS5zaWduYXR1cmUoKSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGFw
cGVuZChNb3ZlMzIsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAg
ICAgYXBwZW5kKFJldDMyLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgcmV0dXJuVmFs
dWVzWzBdLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0NjQsIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoK
KyAgICAgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFs
dWVGUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBh
cHBlbmQoTW92ZURvdWJsZSwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAg
ICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhcHBlbmQoUmV0Vm9pZCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworLy8gTk9URTogQWxsIGJyYW5jaGVzIGluIFdhc20gYXJl
IG9uIDMyLWJpdCBpbnRzCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9s
RGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRo
QmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJlc3VsdEZvckJyYW5jaCgpKTsKKworICAgIEJhc2lj
QmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICBpZiAoY29u
ZGl0aW9uKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9uKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBw
ZW5kKEp1bXApOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQp
OworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0
YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHRGb3JCcmFuY2goKSk7
CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0
LnJlc3VsdEZvckJyYW5jaCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0
cy5zaXplKCk7ICsraSkgeworICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSB0YXJnZXRzW2ld
LT50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShpKSwgY29uc3RhbnQpOworICAgICAgICBh
cHBlbmQoQnJhbmNoMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBjb25z
dGFudCwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
dGFyZ2V0LCBjb250aW51YXRpb24pOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGlu
dWF0aW9uOworICAgIH0KKworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+
c2V0U3VjY2Vzc29ycyhkZWZhdWx0VGFyZ2V0LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpOworCisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJv
bEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CisK
KyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucmVzdWx0KTsK
KyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0
YS5jb250aW51YXRpb24pOworCisgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkp
OworfQorCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJv
bEVudHJ5JiBlbnRyeSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBkYXRh
ID0gZW50cnkuY29udHJvbERhdGE7CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVh
dGlvbjsKKworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CisgICAgICAg
IGFwcGVuZChkYXRhLnNwZWNpYWwsIEp1bXApOworICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1
Y2Nlc3NvcnMobV9jdXJyZW50QmxvY2spOworICAgIH0KKworICAgIGZvciAoVG1wIHJlc3VsdCA6
IGRhdGEucmVzdWx0KQorICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBl
bmQocmVzdWx0KTsKKworICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgYWZ0
ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhlcmUuCisg
ICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCisgICAgICAgIHJldHVy
biBhZGRSZXR1cm4oZGF0YSwgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsK
KworICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWdu
YXR1cmUucmV0dXJuVHlwZSgpOworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2Ug
VHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2Fz
ZSBUeXBlOjpJNjQ6CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzOworCisgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CisgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRz
ID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90
PihhcmdzLnNpemUoKSkpOworCisgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtl
ZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBp
bXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAgIFRt
cCB0YXJnZXRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICAvLyBPT1BTOiBUcnkgdG8gaXNlbCB0
aGlzIGJldHRlcgorICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oSW5zdGFuY2U6Om9m
ZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpLCB0YXJnZXRJbnN0YW5jZSk7Cisg
ICAgICAgIGFwcGVuZChBZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCB0YXJnZXRJbnN0YW5jZSk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGFyZ2V0SW5zdGFuY2UpLCB0YXJnZXRJbnN0
YW5jZSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworCisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybyksIHRhcmdldEluc3RhbmNlLCB0YXJnZXRJbnN0YW5jZSk7CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVy
QmxvY2spOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9i
YmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2
aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1
bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tp
bmcuCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworCisgICAgICAgICAgICBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3Ms
IFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgICAgIHBhdGNo
QXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0
aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAg
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGVtaXRQYXRjaHBv
aW50KGlzV2FzbUJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7
CisgICAgICAgICAgICBhcHBlbmQoaXNXYXNtQmxvY2ssIEp1bXApOworICAgICAgICAgICAgaXNX
YXNtQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRtcCBqdW1wRGVzdGluYXRpb24gPSBncHIoKTsKKyAgICAgICAg
ICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKEluc3RhbmNlOjpv
ZmZzZXRPZldhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSksIGp1bXBEZXN0aW5hdGlv
bik7CisgICAgICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBBZGQ2NCwgaW5zdGFuY2VW
YWx1ZSgpLCBqdW1wRGVzdGluYXRpb24pOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJC
bG9jaywgTW92ZSwgQXJnOjphZGRyKGp1bXBEZXN0aW5hdGlvbiksIGp1bXBEZXN0aW5hdGlvbik7
CisKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBl
KHJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlu
bmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQg
PSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwg
cGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4K
KyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2Fs
bGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmcpKTsKKworICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRj
aEFyZ3M7CisgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKGp1bXBEZXN0aW5hdGlvbik7CisK
KyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUs
IHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3MsIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVw
IHJlcCkgeworICAgICAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
W3JldHVyblR5cGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGppdC5jYWxs
KHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZW1pdFBhdGNocG9pbnQoaXNFbWJl
ZGRlckJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7CisgICAg
ICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBKdW1wKTsKKyAgICAgICAgICAgIGlzRW1i
ZWRkZXJCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworICAgICAgICB9CisKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgICAgIC8vIFRoZSBjYWxs
IGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBv
ciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCisgICAgICAgIHJlc3RvcmVXZWJBc3Nl
bWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1v
cnksIGluc3RhbmNlVmFsdWUoKSwgY29udGludWF0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7
CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisKKyAgICAgICAgVmVj
dG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3Ms
IFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgcGF0Y2hBcmdz
LmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAgICB9KTsKKworICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFw
cGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2Fs
bCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwg
V1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFy
Z3MudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBh
cmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworICAgIC8vIE5vdGU6IGNh
bGwgaW5kaXJlY3QgY2FuIGNhbGwgZWl0aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJlY2F1c2UKKyAgICAvLyBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiBpcyBsaWtlIGNhbGxpbmcgaW50byB0aGUgZW1iZWRkZXIsIHdlIGNvbnNlcnZhdGl2
ZWx5IGFzc3VtZSBhbGwgY2FsbCBpbmRpcmVjdHMKKyAgICAvLyBjYW4gYmUgdG8gdGhlIGVtYmVk
ZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sgY2FsY3VsYXRpb24uCisgICAgbV9tYXhOdW1KU0NhbGxB
cmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyID0gZ3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVy
ID0gZ3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0
aCA9IGdwcigpOworICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRk
ckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mRnVuY3Rp
b25zKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxp
ZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpLCBCMzo6V2lkdGg2NCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZM
ZW5ndGgoKSwgQjM6OldpZHRoNjQpKTsKKworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRy
KGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSksIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJMZW5ndGgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxh
YmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSwgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpLCBp
bnN0YW5jZXNCdWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92ZTMyLCBjYWxs
ZWVJbmRleCwgY2FsbGVlSW5kZXgpOworCisgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBs
b29raW5nIGZvciBpcyB2YWxpZC4KKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5k
KEJyYW5jaDMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNh
bGxlZUluZGV4LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc0NhbGxJbmRpcmVjdCk7CisgICAgfSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxs
ZWVDb2RlID0gZ3ByKCk7CisgICAgeworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWdu
YXR1cmVJbmRleCA9IGdwcigpOworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhl
IHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1v
dmUsIEFyZzo6aW1tKHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxl
ZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2Fs
bGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXIsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29k
ZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVlIGNvZGUuCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0
aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBp
ZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5v
dCBpbml0aWFsaXplZC4KKyAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRs
ZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52
YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzcyMTAKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVn
ZW4gYXNzdW1lcyBpNjQiKTsKKyAgICAgICAgLy8gT09QUzogVGhpcyBzZWVtcyBkdW1iIHRvIGRv
IHR3byBjaGVja3MganVzdCBmb3IgYSBuaWNlciBlcnJvciBoZXJlLi4uCisKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChTaWduYXR1cmU6OmludmFsaWRJbmRleCA9PSAwLCAiIik7CisgICAgICAgICAgICBhcHBl
bmQoQnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjYWxs
ZWVTaWduYXR1cmVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6TnVsbFRhYmxlRW50cnkpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBn
cHIoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgVG1wIG5l
d0NvbnRleHRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbmRl
eChpbnN0YW5jZXNCdWZmZXIsIGNhbGxlZUluZGV4LCA4LCAwKSwgbmV3Q29udGV4dEluc3RhbmNl
KTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRvQ29udGV4dFN3
aXRjaCk7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZv
aWQpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Cisg
ICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhp
bmcgd2l0aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Cisg
ICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0gcGFyYW1zWzBdLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1sxXS5ncHIoKTsK
KyAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5
ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIEFTU0VSVChuZXdD
b250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkg
c2l6ZSByZWdpc3RlcgorICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5z
aXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBd
LnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6
ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1v
cnk6OnZvaWQqLgorICAgICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChkb0NvbnRl
eHRTd2l0Y2gsIHBhdGNocG9pbnQsIFRtcCgpLCBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNl
VmFsdWUoKSk7CisgICAgICAgIGFwcGVuZChkb0NvbnRleHRTd2l0Y2gsIEp1bXApOworICAgICAg
ICBkb0NvbnRleHRTd2l0Y2gtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZUNvZGUpLCBjYWxsZWVDb2RlKTsKKworICAgIFR5cGUgcmV0dXJu
VHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7
CisgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6Okkz
MjoKKyAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjMyOgorICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBhdXRvKiBwYXRjaCA9
IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgIHBhdGNoLT5lZmZlY3Rz
LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgcGF0Y2gtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0
cnVlOworICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdp
c3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgLy8gV2Ug
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcgc28KKyAgICAvLyBiZWNhdXNlIHRoZSB3YXNtLT53YXNtIHRo
dW5rIHVuY29uZGl0aW9uYWxseSBvdmVycmlkZXMgdGhlIHNpemUgcmVnaXN0ZXJzLgorICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNt
IHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJz
IGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIx
ODEKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgIFZlY3RvcjxDb25zdHJhaW5l
ZFRtcD4gZW1pdEFyZ3M7CisgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUpOworICAgIHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBh
dGNoLCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgZW1p
dEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgfSk7CisgICAgcGF0Y2gtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9
PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgIH0pOworCisgICAg
ZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIFdURk1vdmUoZW1p
dEFyZ3MpKTsKKworICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdl
YkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1v
cnkuCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9j
ayk7CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeShj
b25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKQor
eworICAgIC8vIE9PUFM6IFdlIGtpbmRhIHdhbnQgdHlwZXMgaGVyZSB0byBkaXN0aW5ndWlzaCBp
MzIvaTY0L2YzMi9mNjQhCisgICAgUkVMRUFTRV9BU1NFUlQoZHN0LmlzR1AoKSA9PSBzb3VyY2Uu
aXNHUCgpKTsKKyAgICBhcHBlbmQoZHN0LmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBzb3Vy
Y2UsIGRzdCk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVz
dWx0KQoreworICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAg
ICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrW3Jlc3Vs
dFN0YWNrLnNpemUoKSAtIDEgLSBpXSk7Cit9CisKKy8vc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Np
b25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBBaXJJUkdlbmVyYXRvcjo6
RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKKy8veworLy8gICAgZGF0YUxvZyhjb21t
YSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKy8vICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lv
biA6IGV4cHJlc3Npb25TdGFjaykKKy8vICAgICAgICBkYXRhTG9nKGNvbW1hLCAqZXhwcmVzc2lv
bik7CisvL30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJv
bEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0
YWNrKQoreworICAgIFVOVVNFRF9QQVJBTShjb250cm9sU3RhY2spOworICAgIFVOVVNFRF9QQVJB
TShleHByZXNzaW9uU3RhY2spOworCisgICAgLy8gT09QUyEKKyAgICAvKgorICAgIGRhdGFMb2dM
bigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgZGF0YUxv
Z0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsKKyAgICBkYXRhTG9n
TG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGRhdGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKKyAgICAg
ICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAgZHVtcEV4cHJlc3Npb25T
dGFjayhjb21tYSwgKmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGV4cHJlc3Npb25TdGFjayA9
ICZjb250cm9sU3RhY2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGRhdGFM
b2dMbigpOworICAgIH0KKyAgICBkYXRhTG9nTG4oKTsKKyAgICAqLworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBCMzo6T3JpZ2luCit7CisgICAgcmV0dXJuIEIzOjpPcmln
aW4oKTsKKyAgICAvL09wY29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUo
KSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKKyAgICAvL0FTU0VS
VChpc1ZhbGlkT3BUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG9yaWdpbi5vcGNvZGUoKSkpKTsK
KyAgICAvL3JldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOworfQorCitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50
OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBt
b2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1
bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJ
VCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigp
OworCisgICAgQjM6OlByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZSA9IHByb2Nl
ZHVyZS5jb2RlKCk7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRT
dHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5kYXRh
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNvZGVP
cmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgd2UgY2Fu
bm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJzKCkg
b3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAgLy8gZG9uJ3Qgc3Ry
aWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCksIHdoaWNoIHNhdmVz
IGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAgICAvLyBPT1BTOiBE
byB3ZSBuZWVkIHRoaXM/IFNob3VsZCB3ZSBqdXN0IHNldCBpdCBkaXJlY3RseSBvbiBDb2RlPwor
ICAgIHByb2NlZHVyZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFsc2UpOworICAgIAorICAgIHBy
b2NlZHVyZS5zZXRPcHRMZXZlbChjb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlCisgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZl
bCgpCisgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgp
KTsKKworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVz
dWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRpb25Nb2Rl
LCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsK
KyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCisgICAgICAgICAgICBibG9jay0+c3VjY2Vzc29y
QmxvY2soaSktPmFkZFByZWRlY2Vzc29yKGJsb2NrKTsKKyAgICB9CisgICAgLy9CMzo6QWlyOjp2
YWxpZGF0ZShjb2RlKTsKKyAgICAvLyBPT1BTOiBWYWxpZGF0ZSAnY29kZScgaGVyZSEKKyAgICAK
KyAgICB7CisgICAgICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOworICAg
ICAgICBCMzo6QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRy
eXBvaW50SklUKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOworICAgICAgICByZXN1bHQt
PmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVy
QXRPZmZzZXRMaXN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30K
Kwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUg
b3BlcmF0aW9uLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCkKK3sK
KyAgICAvL0FTU0VSVChvcGVyYXRpb24gPT0gRGl2IHx8IG9wZXJhdGlvbiA9PSBNb2QgfHwgb3Bl
cmF0aW9uID09IFVEaXYgfHwgb3BlcmF0aW9uID09IFVNb2QpOyAvLyBPT1BTCisgICAgLy9jb25z
dCBCMzo6VHlwZSB0eXBlID0gbGVmdC0+dHlwZSgpOworICAgIFVOVVNFRF9QQVJBTShvcGVyYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwor
CisgICAgLyoKKyAgICB7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8g
T09QUzogTmVlZCB0eXBlcyBmb3IgYnJhbmNoIGhlcmUhCisgICAgICAgICAgICBLaW5kIG9wID0g
QnJhbmNoVGVzdDY0IDogQnJhbmNoVGVzdDMyOworICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6
OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCByaWdodCwgcmlnaHQpOworICAgICAgICB9
LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAo
b3BlcmF0aW9uID09IERpdikgeworICAgICAgICAvLyBPT1BTOiBOZWVkIHR5cGVzIGhlcmUhCisg
ICAgICAgIC8vaW50NjRfdCBtaW4gPSB0eXBlID09IEludDMyID8gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKTsK
KworICAgICAgICBpbnQ2NF90IG1pbiA9IHR5cGUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCk7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8gT09Q
UzogVHJ5IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAgICAgICAgICBUbXAgbWlu
VG1wID0gZ3ByKCk7CisgICAgICAgICAgICBUbXAgbmVnT25lID0gZ3ByKCk7CisKKyAgICAgICAg
ICAgIEtpbmQgb3AgPSBpczY0Qml0T3Aob3BlcmF0aW9uKSA/IENvbXBhcmU2NCA6IENvbXBhcmUz
MjsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShtaW4pLCBtaW5UbXApOwor
ICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
KSwgbGVmdCwgbWluVG1wLCBtaW5UbXApOworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
aW1tKC0xKSwgbmVnT25lKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCksIHJpZ2h0LCBuZWdPbmUsIG5lZ09uZSk7CisgICAgICAgICAg
ICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpJbnRlZ2Vy
T3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9CisgICAgKi8KK30KKworLy8gT09QUzogSW1w
bGVtZW50IHRoZXNlIGRpdiBvcHMhISEKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7
CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAg
VU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2Owor
ICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAg
IC8vICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJB
TShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bj
b2RlIG9wID0gTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdo
dCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRp
dlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZGF0YUxvZ0xuKCJ1bmltcGxl
bWVudGVkIGkzMmRpdnMiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRy
dWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShs
ZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQp
OworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgLy9lbWl0Q2hlY2tzRm9y
TW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGRh
dGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsKKyAg
ICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVT
RURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAg
IC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8v
ICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShy
aWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2Rl
IG9wID0gRGl2OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7
CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMy
ZGl2cyIpOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAv
L2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAg
IFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9j
b25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9w
LCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZGF0YUxv
Z0xuKCJ1bmltcGxlbWVudGVkIGkzMmRpdnMiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAv
L2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOworICAgIFVO
VVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9Q
QVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgLy9l
bWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHBy
ZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAg
Q1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3Ag
PSBVTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Cisg
ICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMy
KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0u
Z3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50
KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fz
c2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgeworICAgICAgICBhdXRvKiBwYXRj
aHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVt
aXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQzMl90ICgqcG9wY291bnQpKGludDMyX3QpID0g
W10gKGludDMyX3QgdmFsdWUpIC0+IHVpbnQzMl90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3Vu
dCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9u
KCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IGppdC5jb3VudFBvcHVsYXRpb242NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRf
dCAoKnBvcGNvdW50KShpbnQ2NF90KSA9IFtdIChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7
IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBv
cGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1
dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAg
ICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyNpZiBDUFUoWDg2XzY0KQor
ICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1z
WzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252
ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2Vu
ZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2
KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQVShY
ODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBq
aXQuY29udmVydFVJbnQ2NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkp
OworI2VuZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9p
bnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRO
ZWFyZXN0SW50RG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9
KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBy
ZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBw
YXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNo
cG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBd
LmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2lu
dChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9G
bG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAv
L2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOyAvLyBPT1BT
OiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJs
ZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91
YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFu
LCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBC
Mzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
VU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9ib29s
IGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsgLy8gT09QUzogaW1w
bGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0
d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0
d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3Vu
ZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSog
dHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVj
aywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
KyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50
MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7
IH07Cit9CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIFVOVVNFRF9Q
QVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vYm9vbCBiID0gdHJ1
ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0
aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwg
b3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0
T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFs
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tW
YWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6
OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIFVO
VVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vYm9vbCBi
ID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxl
bWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcs
IG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91
dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
IHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
VHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmln
aW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBq
aXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVu
Y1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShy
ZXN1bHQpOworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBJNjRUcnVuY1NGNjQiKTsKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAg
ICAvLyAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAg
VG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAg
ICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7Cisg
ICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3Jp
Z2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0
YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRz
KTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93
RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7
CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRj
aHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJs
ZVRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgVU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVt
ZW50IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhh
biwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0
YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhh
dmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQg
aW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAg
ICAgLy8gdGhlIG51bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25l
ZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBy
cyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVl
ZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsK
KyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3Jh
dGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAg
ICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2
KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAg
ICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0
LnRydW5jYXRlRG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCks
IHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShhcmcpOwor
ICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIGRhdGFMb2dMbigiaW5pbXBsZW1lbnRlZCBp
NjR0cnVuY3NmMzIiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRydWU7
CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOyAvLyBPT1BTOiBJbXBsZW1lbnQgdGhp
cyEKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgp
LAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0
ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZC
b3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCks
IG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigp
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50
cnVuY2F0ZUZsb2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7Cisg
ICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMy
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0
KTsKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBP
T1BTOiBpbXBsZW1lbnQgdGhpcworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0
LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAg
ICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdp
bigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0
cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNr
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29uc3RhbnQ7CisgICAg
aWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0
cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywg
d2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAgICAgICAvLyB0aGUg
bnVtYmVycyB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2lu
Y2Ugd2UgY2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBk
byBpdAorICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAg
c2lnbkJpdENvbnN0YW50ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAt
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworICAgIH0KKyAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFw
cGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGlmIChpc1g4NigpKSB7Cisg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChzaWduQml0Q29uc3RhbnQsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAx
OworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29u
c3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAg
ICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9
IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
VWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFu
dCk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25l
KCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBp
ZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAg
ICAgIGFwcGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKyAgICAKKyAgICBUbXAgZWN4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAg
ICBhcHBlbmQoTW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUsIHNoaWZ0LCBl
Y3gpOworICAgIGFwcGVuZChvcCwgZWN4LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJTdWIoQjM6OkFpcjo6T3Bjb2RlIG9wLCBF
eHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYg
KGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAg
ICBhcHBlbmQob3AsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAg
Ly8gbWVhbnMKKyAgICAvLyBiID0gYiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3Vs
dCk7CisgICAgYXBwZW5kKG9wLCByaHMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUg
b3AsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQob3AgPT0gQWJzRmxvYXQgfHwgb3AgPT0g
QWJzRG91YmxlKTsKKworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3Jt
KG9wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQo
aXNYODYoKSk7CisKKyAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICBpZiAob3AgPT0gQWJz
RmxvYXQpIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKH4oMXVsbCA8PCAzMSkpLCBj
b25zdGFudCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0
KTsKKyAgICAgICAgYXBwZW5kKEFuZEZsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ofigxdWxsIDw8IDYzKSksIGNvbnN0
YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsK
KyAgICAgICAgYXBwZW5kKEFuZERvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5P
cChCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUg
cmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRt
cCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgbGhzLCByaHMsIHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7
CisKKyAgICAvLyBPcCBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBPcCBhCisgICAg
Ly8gT09QUzogdmVyaWZ5CisgICAgYXBwZW5kKE1vdmVEb3VibGUsIGxocywgcmVzdWx0KTsKKyAg
ICBhcHBlbmQob3AsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDZWlsRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JF
cXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRlbW90ZUY2ND4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RG91YmxlVG9GbG9h
dCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFs
ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwgPSBtX2NvZGUu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQsIEFyZzo6ZG91
YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBh
cHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
aXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24p
OworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAg
YXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVuZChn
cmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
Z3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNldFN1
Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91Ymxl
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyTWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJs
b2NrLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlz
RXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+
c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3Zl
RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwg
QXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFy
ZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24p
OworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAg
YXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFk
ZEZsb2F0aW5nUG9pbnRCaW5PcChNdWxEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJp
bk9wKERpdkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgLy8gT09QUzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBmb3IgdGhlIGltbXMg
YW5kIHR3byBvcGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRt
cCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7CisgICAgVG1wIHZhbHVlID0g
Z3ByKCk7CisKKyAgICAvLyBPT1BTOiBDYW4gZml0IGluIEltbS9CaXRJbW0gaW5zdGVhZCBvZiBC
aWdJbW0/CisgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBl
bmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQz
MiwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcw
LCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1
ZSk7CisgICAgYXBwZW5kKEFuZDMyLCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVu
ZChPcjMyLCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2
YWx1ZSwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUz
MiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCB0ZW1wLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJSZWludGVycHJldEkzMj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQW5kNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMk5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NEd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJT
cXJ0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwg
YXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJn
Ojpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NEVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NERpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9P
UFM6IHdoYXQgYWJvdXQgY2hpbGwtbmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGlu
Z1BvaW50QmluT3AoRGl2RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZs
b2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9z
NjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVGbG9hdCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKE5lZ2F0ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IGVsc2UgeworICAgICAgICBUbXAgY29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgICAg
IGFwcGVuZChNdWxGbG9hdCwgY29uc3RhbnQsIGFyZzAsIHJlc3VsdCk7CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQW5kMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVs
b3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0NjQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRBYnM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2lu
dEFicyhBYnNEb3VibGUsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29weXNpZ24+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBi
ZXR0ZXIgY29kZWdlbiBoZXJlIGZvciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24g
eDg2CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1w
IHNpZ24gPSBncHIoKTsKKyAgICBUbXAgdmFsdWUgPSBncHIoKTsKKworICAgIGFwcGVuZChNb3Zl
RG91YmxlVG82NCwgYXJnMSwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgw
eDgwMDAwMDAwMDAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCBzaWdu
LCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmZmZmZmZmZmYpLCB2YWx1ZSk7Cisg
ICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjY0
LCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdmFsdWUs
IHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9GbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0Um90bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMdD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0kzMj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0Rv
dWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJs
ZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpk
b3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0
ZW1wID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5k
KENvbnZlcnRJbnQ2NFRvRmxvYXQsIHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclM+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUnNoaWZ0
MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NENlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
Q2VpbERvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRGbG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChGbG9v
ckRvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjMyLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkRmxvYXRpbmdQb2ludEFicyhBYnNGbG9hdCwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1pbj4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNC
bG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVx
dWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVx
dWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERv
dWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAs
IGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVx
dWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcw
LCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJs
ZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAg
bm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwp
OworCisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVy
VGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxGbG9h
dCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViNjQsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJSZWludGVycHJldEYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJB
ZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQWRkMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFN1Yj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGlm
IChpc1ZhbGlkRm9ybShTdWJEb3VibGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKQor
ICAgICAgICBhcHBlbmQoU3ViRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGVsc2Ug
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTdWJEb3VibGUsIHJlc3VsdCwg
YXJnMCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjMyLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0THRTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTY0PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRYb3I+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9yNjQsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE11bDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBpZiAoaXNWYWxpZEZvcm0oU3ViRmxvYXQsIEFyZzo6VG1wLCBBcmc6
OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoU3ViRmxvYXQsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAg
ICAgICBhcHBlbmQoTW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU3Vi
RmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRQcm9tb3RlRjMyPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRGbG9hdFRvRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQWRkRG91YmxlLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFVJMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJOZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIFJFTEVBU0VfQVNTRVJUKGFyZzAgJiYgYXJnMSk7CisgICAgYXBwZW5kKENvbXBhcmUz
MiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NFJlaW50ZXJwcmV0STY0PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJGbG9vcj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChGbG9vckZsb2F0LCBhcmcwLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJFcXo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDMy
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRSZWludGVycHJldEY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0U2hyUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRT
aGlmdChSc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVXJzaGlmdDY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0U3FydD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0NjQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJHdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJXcmFwSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1v
dmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90bD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0MzIsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyR3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5l
Zz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdh
dGVEb3VibGUsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChOZWdhdGVEb3Vi
bGUsIGFyZzAsIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCBjb25zdGFudCA9IGFk
ZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxk
b3VibGU+KC0xLjApKSk7CisgICAgICAgIGFwcGVuZChNdWxGbG9hdCwgY29uc3RhbnQsIGFyZzAs
IHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAg
ICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJs
b2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0Vx
dWFsLCBBbmREb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWws
IEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAg
IGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
bm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3Jz
KGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRG91
YmxlLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhhbiwgSnVtcCk7CisgICAgbGVz
c1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2Nr
ID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlVT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQWRkNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21CM0lS
R2VuZXJhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29u
c3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9
IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTUsNyArMzE1LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbgog
ICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gZWZmZWN0czsKICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3Rl
clNldChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKLSAgICBwYXRjaHBvaW50LT5hcHBlbmQo
aW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50
LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsgLy8gT09Q
UzogUHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nIGFyZyEKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbSkgewogICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUik7CkBAIC00NTksOSArNDU5LDkgQEAgdm9pZCBCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAogCiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIElu
c3RhbmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBj
YW5vbmljYWwgbG9jYXRpb24gaXMuCi0gICAgICAgIFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpKTsK
LSAgICAgICAgVmFsdWUqIGFjdHVhbFN0YWNrTGltaXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBw
b2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGlt
aXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgIFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJ
bnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpKTsKKyAgICAgICAg
VmFsdWUqIGFjdHVhbFN0YWNrTGltaXQgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0KTsKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGltaXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7IC8vIE9P
UFM6IHNob3VsZCBiZSBibG9jayEKICAgICB9CiAKICAgICBpZiAoISFtZW1vcnkpIHsKQEAgLTE2
MDksNiArMTYwOSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQK
ICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKICNpZiBDUFUoWDg2XzY0KQpAQCAtMTYyOSw2ICsxNjMwLDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbgogICAgIGlmIChpc1g4NigpKQog
ICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogI2lm
IENQVShYODZfNjQpCkBAIC0xODM4LDcgKzE4NDAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lz
dGVycyA9IDE7CiAgICAgfQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewot
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsgLy8gT09QUzogVGhpcyBsb29rcyBzdXBlciB3cm9uZyBnaXZlbiB3ZSBkb24ndCBzYXkgd2Ug
Y2xvYmJlciB0aGlzIQogICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CiAg
ICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7CiAgICAgICAgIGlmIChpc1g4
NigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkIz
Q29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUg
Ildhc21BaXJJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgpAQCAt
MjcxLDcgKzI3Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGkK
IAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgICAgIFRpZXJVcENvdW50KiB0aWVy
VXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5j
dGlvbkluZGV4XSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwg
ZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENv
bXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCks
IHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUs
IGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgICAg
IGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwzNiBAQCBjb25zdCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24mIHdhc21DYWxsaW5nCiAgICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVu
dGlvbjsKIH0KIAorY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252
ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdD
b252ZW50aW9uQWlyPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBz
dGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9y
PFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKK2NvbnN0IFdhc21D
YWxsaW5nQ29udmVudGlvbkFpciYgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFdhc21DYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGlj
V2FzbUNhbGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNX
YXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1dhc21D
YWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgVmVjdG9yPFJlZz4gZ3ByQXJn
dW1lbnRSZWdpc3RlcnMoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzOyArK2kpCisgICAgICAgICAgICBncHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEdQUklu
Zm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKworICAgICAgICBWZWN0b3I8UmVnPiBmcHJBcmd1
bWVudFJlZ2lzdGVycyhGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdp
c3RlcnM7ICsraSkKKyAgICAgICAgICAgIGZwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gRlBSSW5m
bzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIHN0YXRpY1dhc21DYWxsaW5nQ29u
dmVudGlvbi5jb25zdHJ1Y3QoV1RGTW92ZShncHJBcmd1bWVudFJlZ2lzdGVycyksIFdURk1vdmUo
ZnByQXJndW1lbnRSZWdpc3RlcnMpLCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAj
aW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNB
cmd1bWVudFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCkBAIC00NCwyNyAr
NDUsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1
bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5
cGUpOwordHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZz
ZXQpOwogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9m
ZnNldD4KIGNsYXNzIENhbGxpbmdDb252ZW50aW9uIHsKIHB1YmxpYzoKICAgICBDYWxsaW5nQ29u
dmVudGlvbihWZWN0b3I8UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVn
aXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotICAgICAgICA6IG1fZ3ByQXJncyhncHJB
cmdzKQotICAgICAgICAsIG1fZnByQXJncyhmcHJBcmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2
ZVJlZ2lzdGVycyhjYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZN
b3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnByQXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAg
ICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMp
KQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJn
dW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3MsIEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgY291
bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CisgICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxs
QXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBz
aXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGNvdW50IDwgcmVn
QXJncy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gQjM6OlZhbHVlUmVwOjpyZWcocmVnQXJn
c1tjb3VudCsrXSk7CiAKICAgICAgICAgY291bnQrKzsKICAgICAgICAgQjM6OlZhbHVlUmVwIHJl
c3VsdCA9IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09mZnNldCk7Ci0gICAgICAg
IHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0LCB0eXBlKTsKKyAgICAgICAg
c3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtNzMsMTAgKzc0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEIzOjpJbnQzMjoKICAgICAgICAgY2FzZSBCMzo6
SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdz
LCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQpOwogICAgICAgICBjYXNlIEIzOjpGbG9hdDoKICAgICAgICAgY2FzZSBCMzo6RG91Ymxl
OgotICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlw
ZSwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFy
c2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0
KTsKICAgICAgICAgY2FzZSBCMzo6Vm9pZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0xODksMTkgKzE5MCwxNDMgQEAgcHVibGljOgogICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1f
Y2FsbGVyU2F2ZVJlZ2lzdGVyczsKIH07CiAKLWlubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0
KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlKQordGVtcGxhdGU8dW5zaWduZWQgaGVh
ZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CitjbGFzcyBDYWxsaW5nQ29udmVudGlv
bkFpciB7CitwdWJsaWM6CisgICAgQ2FsbGluZ0NvbnZlbnRpb25BaXIoVmVjdG9yPFJlZz4mJiBn
cHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJl
Z2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAg
LCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdp
c3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHNjcmF0Y2ggPSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICBzY3JhdGNo
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAg
c2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkp
OworICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2dwckFyZ3MpCisgICAgICAgICAgICBzY3JhdGNo
LmNsZWFyKHJlZyk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cykKKyAgICAgICAgICAgIHNjcmF0Y2guY2xlYXIocmVnKTsKKyAgICAgICAgZm9yIChSZWcgcmVn
IDogc2NyYXRjaCkKKyAgICAgICAgICAgIG1fc2NyYXRjaEdQUnMuYXBwZW5kKHJlZyk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2NyYXRjaEdQUnMuc2l6ZSgpID49IDMpOworICAgIH0KKwor
ICAgIEdQUlJlZyBwcm9sb2d1ZVNjcmF0Y2goc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
YXRjaEdQUnNbaV0uZ3ByKCk7IH0KKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
UmVnRnVuYywgdHlwZW5hbWUgU3RhY2tGdW5jPgorICAgIHZvaWQgbWFyc2hhbGxBcmd1bWVudElt
cGwoY29uc3QgVmVjdG9yPFJlZz4mIHJlZ0FyZ3MsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3Rh
Y2tPZmZzZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1bmMsIGNvbnN0IFN0YWNrRnVuYyYgc3RhY2tG
dW5jKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgcmVnQXJncy5zaXplKCkpIHsK
KyAgICAgICAgICAgIHJlZ0Z1bmMocmVnQXJnc1tjb3VudCsrXSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjb3VudCsrOworICAgICAgICBzdGFja0Z1bmMoc3Rh
Y2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNl
dCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0
YWNrRnVuYz4KKyAgICB2b2lkIG1hcnNoYWxsQXJndW1lbnQoVHlwZSB0eXBlLCBzaXplX3QmIGdw
QXJndW1lbnRDb3VudCwgc2l6ZV90JiBmcEFyZ3VtZW50Q291bnQsIHNpemVfdCYgc3RhY2tPZmZz
ZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1bmMsIGNvbnN0IFN0YWNrRnVuYyYgc3RhY2tGdW5jKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6
STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1l
bnRJbXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgcmVnRnVuYywg
c3RhY2tGdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoK
KyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1w
bChtX2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNr
RnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVyU2l6ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFk
ZXJTaXplOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgbG9h
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOwor
ICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNr
T2Zmc2V0ID0gaGVhZGVyU2l6ZTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgbWFyc2hhbGxBcmd1
bWVudChzaWduYXR1cmUuYXJndW1lbnQoaSksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3RvcihCMzo6QWlyOjpUbXAocmVnKSwgaSk7CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09mZnNldCkgeworICAg
ICAgICAgICAgICAgICAgICBmdW5jdG9yKEIzOjpBaXI6OkFyZzo6YWRkcihCMzo6QWlyOjpUbXAo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBzdGFja09mZnNldCksIGkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSXQncyBleHBlY3RlZCB0aGF0
IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhlIGdlbmVyYXRvciBmb3IgdGhlIGNhbGwgb3Bl
cmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXR1cENh
bGwoQjM6OkFpcjo6Q29kZSYgY29kZSwgVHlwZSByZXR1cm5UeXBlLCBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50LCBjb25zdCBWZWN0b3I8QjM6OkFpcjo6VG1wPiYgYXJncywgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50
Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAg
c2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KTsKKworICAgICAgICBmb3IgKGF1dG8gdG1wIDogYXJncykgeworICAgICAgICAgICAgbWFyc2hh
bGxBcmd1bWVudCh0bXAuaXNHUCgpID8gVHlwZTo6STY0IDogVHlwZTo6RjY0LCBncEFyZ3VtZW50
Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsCisgICAgICAgICAgICAgICAgWyZd
IChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wLCBCMzo6VmFsdWVS
ZXA6OnJlZyhyZWcpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIFsmXSAo
c2l6ZV90IHN0YWNrT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wLCBC
Mzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoc3RhY2tPZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUlu
Qnl0ZXMoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3Rh
Y2tPZmZzZXQpKTsKKworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworCisgICAg
ICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlw
ZTo6RjY0OgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpW
YWx1ZVJlcDo6cmVnKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9ncHJBcmdzOworICAgIGNvbnN0
IFZlY3RvcjxSZWc+IG1fZnByQXJnczsKKyAgICBWZWN0b3I8UmVnPiBtX3NjcmF0Y2hHUFJzOwor
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBS
ZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7Cit9OworCitpbmxpbmUgdW5zaWduZWQg
bmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KQogewogICAgIHJldHVybiBjdXJy
ZW50T2Zmc2V0ICsgc2l6ZW9mKFJlZ2lzdGVyKTsKIH0KIAogY29uc3RleHByIHVuc2lnbmVkIGpz
Y0hlYWRlclNpemUgPSBFeGVjU3RhdGU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZihS
ZWdpc3Rlcik7Ci10eXBlZGVmIENhbGxpbmdDb252ZW50aW9uPGpzY0hlYWRlclNpemUsIG5leHRK
U0NPZmZzZXQ+IEpTQ0NhbGxpbmdDb252ZW50aW9uOwotCi10eXBlZGVmIEpTQ0NhbGxpbmdDb252
ZW50aW9uIFdhc21DYWxsaW5nQ29udmVudGlvbjsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRp
b24gPSBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3Vz
aW5nIFdhc21DYWxsaW5nQ29udmVudGlvbiA9IEpTQ0NhbGxpbmdDb252ZW50aW9uOwogY29uc3Qg
SlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxpbmdDb252ZW50aW9uKCk7CiBjb25zdCBXYXNt
Q2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogCit1c2luZyBKU0ND
YWxsaW5nQ29udmVudGlvbkFpciA9IENhbGxpbmdDb252ZW50aW9uQWlyPGpzY0hlYWRlclNpemUs
IG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyID0gSlNDQ2Fs
bGluZ0NvbnZlbnRpb25BaXI7Citjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbkFpciYganNjQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKTsKK2NvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbkFpciYgd2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyKCk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360421</attachid>
            <date>2019-01-28 19:23:59 -0800</date>
            <delta_ts>2019-01-28 19:31:01 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>164020</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDkgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgICAgICBicmVhazsKICAgICB9CiAK
KyAgICBpZiAoIXZhbHVlKSAvLyBPT1BTCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xv
YmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlk
ZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQog
ICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hB
cmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUo
KQogewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2
b2lkIENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8
UmVnPiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVk
UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vh
a1JhbmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9p
ZCBlbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0
ZXhwciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzkzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVk
ZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNt
RnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bj
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25z
dHJhaW5lZFRtcCB7CisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25z
dHJhaW5lZFRtcCh0bXAsIHRtcC5pc1JlZygpID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygp
KSA6IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWlu
ZWRUbXAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAg
ICAgICAsIHJlcChyZXApCisgICAgeworICAgIH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZh
bHVlUmVwIHJlcDsKK307CisKK2NsYXNzIEFpcklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBz
dHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdp
biwgVHlwZSByZXR1cm5UeXBlLCBUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNC
bG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAg
ICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250
aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwg
cmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFS
QU0ob3JpZ2luKTsgLy8gT09QUworICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlID09IFR5cGU6OlZvaWQpOworICAgICAgICB9CisK
KyAgICAgICAgQ29udHJvbERhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9v
cDogICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9j
a1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0
LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwor
ICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCpzcGVj
aWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUi
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
YmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBy
ZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3Qg
eyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAg
ICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0
SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAs
IDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRG
b3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tU
eXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHJl
dHVyblR5cGU7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVG1wOworICAg
IHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhwcmVzc2lvbkxp
c3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBD
b250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlv
blBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25z
dCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb247CisKKyAgICB1c2luZyBFcnJvclR5cGUg
PSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVj
dGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4K
KyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFp
bChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFp
bHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZh
aWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2Rl
ZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAg
IGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDAp
CisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9j
ZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKKworICAgIC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAg
ICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExv
YWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
c3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
IHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRv
cnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblpl
cm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAg
Ly8gQ29udHJvbCBmbG93CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRv
cExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShD
b250cm9sRGF0YSYpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENv
bnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERh
dGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lv
blN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKworICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoQjM6
OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1
YihCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5n
UG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3Ao
QjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENv
bnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Np
b25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CisKK3ByaXZhdGU6CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGlmICghaW5zdC5pc1ZhbGlkRm9y
bSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGluc3QpOworICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJsb2Nr
LCBLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8v
IE9PUFM6IEFkZCBvcmlnaW4KKyAgICAgICAgYXV0byYgaW5zdCA9IGJsb2NrLT5hcHBlbmQoa2lu
ZCwgbnVsbHB0ciwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAg
ICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoS2luZCBraW5kLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIGtpbmQsIHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIFRtcCB0
bXAoQjM6OkJhbmsgYmFuaykgeyByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsgfQorICAgIFRt
cCBncHIoKSB7IHJldHVybiB0bXAoQjM6OkdQKTsgfQorICAgIFRtcCBmcHIoKSB7IHJldHVybiB0
bXAoQjM6OkZQKTsgfQorICAgIFRtcCB0bXBGb3JUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIGNhc2UgVHlw
ZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBmcHIo
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGFkZFBhdGNocG9pbnQoQjM6OlR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb2MuYWRkPEIzOjpQYXRjaHBvaW50
VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCMzo6UGF0Y2hwb2ludFZhbHVl
KiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgZW1p
dFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxB
cmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFy
Z3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAg
IHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVj
dG9yPENvbnN0cmFpbmVkVG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsK
KyAgICB9CisKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ss
IEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFp
bmVkVG1wPigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+Cisg
ICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxp
bmVTaXplPiYmIGFyZ3MpCisgICAgeworICAgICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwp
CisgICAgICAgICAgICBtX3BhdGNocG9pbnRTcGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBhdGNo
cG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6UGF0
Y2hwb2ludFNwZWNpYWw+KCkpKTsKKworICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNoLCBB
cmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOworICAgICAgICBJbnN0IHJlc3VsdE1v
djsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50eXBl
KCkgIT0gQjM6OlZvaWQpOworICAgICAgICAgICAgc3dpdGNoIChwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoK
KyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5yZWcoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdE1vdiA9IEluc3QocmVzdWx0Lmlz
R1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAocGF0Y2gtPnJlc3VsdENvbnN0
cmFpbnQucmVnKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKHBhdGNo
LT50eXBlKCkgPT0gQjM6OlZvaWQpOworICAgICAgICAKKyAgICAgICAgZm9yIChDb25zdHJhaW5l
ZFRtcCYgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8gT09QUzogVWdoLCB0aGlzIGlzIHN1
cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBCMzo6VmFsdWUqIGhlcmUuCisgICAg
ICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdvcmssIGJ1dCBvdXIgYWx0ZXJuYXRp
dmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAgICAgLy8gb3IgcmVpbnZlbnQgcGFy
dCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1
ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNHUCgpID8gQjM6
OkludDY0IDogQjM6OkRvdWJsZSwgMCk7CisgICAgICAgICAgICBwYXRjaC0+YXBwZW5kKGR1bW15
VmFsdWUsIHRtcC5yZXApOworICAgICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtpbmQoKSkgewor
ICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcC50bXApOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAg
IC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2FudCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2
MyBhbmQgZjMyL2Y2NAorICAgICAgICAgICAgICAgIHBhdGNoLT5lYXJseUNsb2JiZXJlZCgpLmNs
ZWFyKHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0
bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCB0bXAucmVwLnJlZygp
KTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcCh0bXAucmVwLnJlZygpKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6
U3RhY2tBcmd1bWVudDogeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2Fu
dCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2MyBhbmQgZjMyL2Y2NAorICAgICAgICAg
ICAgICAgIGF1dG8gYXJnID0gQXJnOjpjYWxsQXJnKHRtcC5yZXAub2Zmc2V0RnJvbVNQKCkpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUg
OiBNb3ZlRG91YmxlLCB0bXAudG1wLCBhcmcpOworICAgICAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXRjaC0+cmVz
dWx0Q29uc3RyYWludC5pc1JlZygpKQorICAgICAgICAgICAgcGF0Y2gtPmxhdGVDbG9iYmVyZWQo
KS5jbGVhcihwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHBhdGNoLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKGdwcigpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0
Y2gtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoZnByKCkpOworCisgICAgICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICAgICAgYmFz
aWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgICAgICBpZiAocmVzdWx0TW92KSB7
CisgICAgICAgICAgICB2YWxpZGF0ZUluc3QocmVzdWx0TW92KTsKKyAgICAgICAgICAgIGJhc2lj
QmxvY2stPmFwcGVuZChXVEZNb3ZlKHJlc3VsdE1vdikpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5jaCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZv
aWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYgZW1pdEJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBn
ZW5lcmF0b3IpCisgICAgeworICAgICAgICAvLyBXZSBmYWlsIGFsb25nIHRoZSAidHJ1dGh5IiBl
ZGdlIG9mICdicmFuY2gnCisKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZhaWxlZCA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgICAgICAKKyAgICAgICAgZW1pdEJyYW5jaCgpOworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWlsZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
YXV0byogZmFpbGVkUGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAg
ICBmYWlsZWRQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1p
dFBhdGNocG9pbnQoZmFpbGVkLCBmYWlsZWRQYXRjaHBvaW50LCBUbXAoKSk7CisgICAgICAgIGFw
cGVuZChmYWlsZWQsIE9vcHMpOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5B
cmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEZ1bmMgZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgZW1pdENDYWxsKG1fY3VycmVudEJsb2NrLCBmdW5jLCByZXN1
bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2lj
QmxvY2sqIGJsb2NrLCBGdW5jIGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAg
ICB7CisgICAgICAgIEIzOjpUeXBlIHJlc3VsdFR5cGUgPSBCMzo6Vm9pZDsKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdFR5cGUgPSByZXN1bHQuaXNHUCgpID8gQjM6Oklu
dDY0IDogQjM6OkRvdWJsZTsKKworICAgICAgICBhdXRvIG1ha2VEdW1teVZhbHVlID0gWyZdIChU
bXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmlzR1AoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkludDY0LCAwKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6RG91
YmxlLCAwKTsKKyAgICAgICAgfTsKKworICAgICAgICBCMzo6VmFsdWUqIGR1bW15RnVuYyA9IG1f
cHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oZnVuYykpOworICAgICAgICBCMzo6VmFsdWUqIG9yaWdpbiA9IG1fcHJvYy5hZGQ8
QjM6OkNDYWxsVmFsdWU+KHJlc3VsdFR5cGUsIEIzOjpPcmlnaW4oKSwgQjM6OkVmZmVjdHM6Om5v
bmUoKSwgZHVtbXlGdW5jLCBtYWtlRHVtbXlWYWx1ZSh0aGVBcmdzKS4uLik7CisKKyAgICAgICAg
SW5zdCBpbnN0KENDYWxsLCBvcmlnaW4pOworCisgICAgICAgIFRtcCBjYWxsZWUgPSBncHIoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
ZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQocmVzdWx0KTsKKworICAgICAgICBmb3IgKFRtcCB0bXAgOiBWZWN0b3I8VG1wLCBzaXpl
b2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZCh0bXApOworCisgICAgICAgIGJsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAg
fQorCisgICAgc3RhdGljIEIzOjpBaXI6Ok9wY29kZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0
eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6
STMyOgorICAgICAgICAgICAgcmV0dXJuIE1vdmUzMjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6
CisgICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAg
ICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisg
ICAgdm9pZCBlbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmln
aW4pOworCisgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7
CisgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVP
cFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50
MzJfdCBvZmZzZXQpOworCisgICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSYgZHN0
LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlz
dCYgc3RhY2spOworCisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwg
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOworCisgICAgaW50MzJf
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlw
ZSYsIHVpbnQzMl90KTsKKworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFz
aWNCbG9jayosIFRtcCk7CisgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7
IE5vLCBZZXMgfTsKKyAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFRtcCBpbnN0YW5j
ZSwgQmFzaWNCbG9jayopOworCisgICAgQjM6Ok9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzogV2Ug
bmVlZCB0byBtYWtlIGFuIEFpcjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGZy
b20gQjMgY29kZS4KKworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJz
ZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAg
ICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07
CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsg
VUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07
CisKKyAgICBCMzo6UHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQ29kZSYgbV9jb2RlOworICAgIEJh
c2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1f
cm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wLCBUeXBlPj4g
bV9sb2NhbHM7CisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24g
aW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIEdQUlJl
ZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fbWVtb3J5
U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2Ug
fTsKKworICAgIFRtcCBtX2luc3RhbmNlVmFsdWU7IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29y
IGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4g
dXNlZC4KKyAgICBib29sIG1fdXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9OworICAgIFRtcCBp
bnN0YW5jZVZhbHVlKCkKKyAgICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUgPSB0cnVl
OworICAgICAgICByZXR1cm4gbV9pbnN0YW5jZVZhbHVlOworICAgIH0KKworICAgIHVpbnQzMl90
IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OworCisgICAgQjM6OlBhdGNocG9pbnRTcGVj
aWFsKiBtX3BhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworfTsKKworY29uc3QgVG1wIEFp
cklSR2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24gPSBUbXAoKTsKKworLy8gTWVtb3J5IGFjY2Vz
c2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMg
dGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK2ludDMyX3QgQWlySVJHZW5l
cmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMy
X3Qgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
IHsKKyAgICAgICAgVG1wIHByZXZpb3VzUHRyID0gcHRyOworICAgICAgICBwdHIgPSBncHIoKTsK
KyAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmJpZ0ltbShvZmZzZXQpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgY29uc3Rh
bnQsIHByZXZpb3VzUHRyLCBwdHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0
dXJuIG9mZnNldDsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ssIFRtcCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2Fs
bEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0
Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dElu
c3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3Rv
cmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1
c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVn
aXN0ZXIuCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOwor
ICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVj
dHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5n
ZTo6dG9wKCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7
CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFI7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7CisgICAgICAg
IGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICB9
KTsKKyAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24q
IGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlKQorICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY29t
cGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5j
dGlvbkluZGV4KQorICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHByb2NlZHVy
ZSkKKyAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQorICAgICwgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKK3sKKyAgICBtX2N1cnJlbnRCbG9jayA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fcm9vdEJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisK
KyAgICAvLyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUg
aWYgdGhlcmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxl
ciBmb3Igbm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIz
CisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CisgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CisK
KyAgICBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyOworICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBt
X2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKworICAgIGlmICht
b2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICBBU1NFUlQoIXBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgbV9tZW1vcnlTaXplR1BS
ID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9y
IChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJl
Z2lzdGVyKTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAgICBU
aHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRp
b24pOworCisgICAgaWYgKGluZm8ubWVtb3J5KSB7CisgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91
bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQ
UikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIEludmFsaWRHUFJSZWcgPT0g
cGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9m
Qm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21v
ZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAg
ICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFu
IGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRpb24gY2hlY2sgYmVjYXVzZSB0aGV5IGNh
biByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAgICAgICAgICAgLy8gb3V0LW9m
LWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRo
ZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0
aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigp
LnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRzKDEpOworCisgICAgR1BSUmVnIGNvbnRleHRJbnN0
YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigp
LnByb2xvZ3VlU2NyYXRjaCgyKSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKworICAgIFJl
ZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVT
aGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBjb2RlLmVtaXRE
ZWZhdWx0UHJvbG9ndWUoaml0KTsKKworICAgICAgICB7CisgICAgICAgICAgICBHUFJSZWcgY2Fs
bGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOwor
ICAgICAgICAgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbY29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0
aW9uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICBq
aXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBDaGVja2Vk
PGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtUGFyZW50Q2hlY2tTaXplID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgMTAyNCk7CisgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBleHRyYUZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIHN0ZDo6bWF4PHVpbnQzMl90PigKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgZm9yIGZ1bmN0aW9ucyB0aGF0
IGFyZSB0ZXJtaW5hbCBub2RlcyBpbiB0aGUgY2FsbAorICAgICAgICAgICAgICAgIC8vIHRyZWUs
IChlLmcgdGhleSBkb24ndCBtYWtlIGFueSBjYWxscykgYW5kIGhhdmUgYSBzbWFsbCBlbm91Z2gg
ZnJhbWUgc2l6ZS4gVGhpcyB3b3JrcyBieQorICAgICAgICAgICAgICAgIC8vIGhhdmluZyBhbnkg
c3VjaCB0ZXJtaW5hbCBub2RlIGhhdmUgaXRzIHBhcmVudCBjYWxsZXIgaW5jbHVkZSBzb21lIGV4
dHJhIHNpemUgaW4gaXRzCisgICAgICAgICAgICAgICAgLy8gb3duIGNoZWNrIGZvciBpdC4gVGhl
IGdvYWwgaGVyZSBpcyB0d29mb2xkOgorICAgICAgICAgICAgICAgIC8vIDEuIEVtaXQgbGVzcyBj
b2RlLgorICAgICAgICAgICAgICAgIC8vIDIuIFRyeSB0byBzcGVlZCB0aGluZ3MgdXAgYnkgc2tp
cHBpbmcgc3RhY2sgY2hlY2tzLgorICAgICAgICAgICAgICAgIG1pbmltdW1QYXJlbnRDaGVja1Np
emUsCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hl
Y2tzIGluIHRoZSBXYXNtIC0+IEVtYmVkZGVyIGNhbGwgSUMgc3R1Yi4gU2luY2UgdGhlc2Ugd2ls
bAorICAgICAgICAgICAgICAgIC8vIHNwaWxsIGFsbCBhcmd1bWVudHMgdG8gdGhlIHN0YWNrLCB3
ZSBlbnN1cmUgdGhhdCBhIHN0YWNrIGNoZWNrIGhlcmUgY292ZXJzIHRoZQorICAgICAgICAgICAg
ICAgIC8vIHN0YWNrIHRoYXQgc3VjaCBhIHN0dWIgd291bGQgdXNlLgorICAgICAgICAgICAgICAg
IChDaGVja2VkPHVpbnQzMl90PihtX21heE51bUpTQ2FsbEFyZ3VtZW50cykgKiBzaXplb2YoUmVn
aXN0ZXIpICsganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5oZWFkZXJTaXplSW5CeXRlcygpKS51bnNh
ZmVHZXQoKQorICAgICAgICAgICAgKSk7CisgICAgICAgICAgICBjb25zdCBpbnQzMl90IGNoZWNr
U2l6ZSA9IG1fbWFrZXNDYWxscyA/ICh3YXNtRnJhbWVTaXplICsgZXh0cmFGcmFtZVNpemUpLnVu
c2FmZUdldCgpIDogd2FzbUZyYW1lU2l6ZS51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIGJvb2wg
bmVlZFVuZGVyZmxvd0NoZWNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBP
cHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZs
b3dDaGVjayA9IG1fbWFrZXNDYWxscyB8fCB3YXNtRnJhbWVTaXplID49IG1pbmltdW1QYXJlbnRD
aGVja1NpemUgfHwgbmVlZFVuZGVyZmxvd0NoZWNrOworCisgICAgICAgICAgICAvLyBUaGlzIGFs
bG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1l
IHNpemUgaXMgd2l0aGluCisgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVp
ciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgorICAgICAgICAgICAg
aWYgKG5lZWRzT3ZlcmZsb3dDaGVjaykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2go
MCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpOworCisgICAgICAgICAgICAgICAgaWYgKENvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgb3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRV
bmRlcmZsb3dDaGVjaykpCisgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQu
YnJhbmNoUHRyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2gxLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNo
UHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gxLCBzY3JhdGNoMikpOworICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJv
d1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAm
JiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxv
dyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRv
IGJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0
YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBX
ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBw
YXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBz
dGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGdwcigpOwor
ICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2Ug
aW5zdGFuY2UgdmFsdWUuCisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNl
KSwgbV9pbnN0YW5jZVZhbHVlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVl
ID0gVG1wKGNvbnRleHRJbnN0YW5jZSk7CisKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7
CisgICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Cisg
ICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2
NDoKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0geyBncHIoKSwgdHlwZSB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2
NDoKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0geyBmcHIoKSwgdHlwZSB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgd2FzbUNhbGxpbmdDb252ZW50
aW9uQWlyKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUsIFsmXSAoY29uc3QgQXJnJiBhcmcsIHVu
c2lnbmVkIGkpIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAg
ICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCBhcmcsIG1f
bG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
Okk2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlRmxvYXQsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfSk7CisKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6OmZ1
bmN0aW9uRW50cnlEZWNyZW1lbnQoKSwgQjM6Ok9yaWdpbigpKTsKK30KKwordm9pZCBBaXJJUkdl
bmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBt
ZW1vcnksIFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVzdG9yZVdh
c21Db250ZXh0SW5zdGFuY2UoYmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlmIChyZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CisgICAgICAg
IC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3
aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxJbnN0YW5jZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFj
a0xpbWl0KCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiIik7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0
dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChB
cmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCks
IEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgICAgIGFwcGVu
ZChibG9jaywgTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNl
dE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSwgdGVtcCk7CisgICAgICAgIGFwcGVuZChi
bG9jaywgTW92ZSwgQXJnOjphZGRyKHRlbXApLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2Nr
LCBNb3ZlLCB0ZW1wLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoISFtZW1vcnkpIHsKKyAg
ICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCk7CisgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJzOworICAgICAgICBj
bG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOworICAgICAgICBmb3Ig
KGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnMpCisgICAgICAgICAgICBjbG9i
YmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOworCisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9
IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgICAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihjbG9iYmVycyk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5u
ZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRS
ZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdz
ID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVn
cy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZz
ZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2Fs
Y3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBh
cmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVt
b3J5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIs
IHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQ
YXRjaHBvaW50KHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lk
IEFpcklSR2VuZXJhdG9yOjplbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEV4
Y2VwdGlvblR5cGUgdHlwZSkKK3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgIGF1dG8ganVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBqaXQu
YWRkTGlua1Rhc2soW2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93
RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxv
dz4gdG90YWxCeXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCArPSBt
X2xvY2Fscy5zaXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NPTVBJ
TEVfRkFJTF9JRigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBDaGVj
a2VkU3RhdGU6OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGxv
Y2FscyIpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBj
YXNlIFR5cGU6Okk2NDogeworICAgICAgICAgICAgVG1wIGxvY2FsID0gZ3ByKCk7CisgICAgICAg
ICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAg
ICAgIGFwcGVuZChYb3I2NCwgbG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDog
eworICAgICAgICAgICAgVG1wIGxvY2FsID0gZnByKCk7CisgICAgICAgICAgICBtX2xvY2Fscy51
bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIFRtcCB0ZW1wID0g
Z3ByKCk7CisgICAgICAgICAgICAvLyBJRUVFIDc1NCAiMCIgaXMganVzdCBpbnQzMi82NCB6ZXJv
LgorICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgICAgIGFw
cGVuZCh0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwg
dGVtcCwgbG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFM6
IElzIHRoaXMgY29ycmVjdD8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZh
bHVlKSAtPiBFeHByZXNzaW9uVHlwZQoreworICAgIFRtcCByZXN1bHQ7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAg
IHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUp
LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNl
IFR5cGU6OkY2NDogeworICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgVG1wIHRtcCA9
IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCB0bXApOwor
ICAgICAgICBhcHBlbmQodHlwZSA9PSBUeXBlOjpGMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0
VG9Eb3VibGUsIHRtcCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworCit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50
cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fbG9jYWxzLnNpemUoKSA9PSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
KTsgLy8gV2UgaGFuZGxlIGFyZ3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xv
Y2Fsc1tpbmRleF0uZmlyc3QpOworICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XS5maXJzdC5p
c0dQKCkgPyBncHIoKSA6IGZwcigpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9s
b2NhbHNbaW5kZXhdLnNlY29uZCksIG1fbG9jYWxzW2luZGV4XS5maXJzdCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJs
ZSA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0
b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6VW5yZWFjaGFibGUpOworICAgIH0pOworICAgIHVucmVhY2hhYmxlLT5lZmZlY3Rz
LnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBlbWl0UGF0Y2hwb2ludCh1bnJlYWNoYWJsZSwgVG1wKCkp
OworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1v
cnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCosIEluc3RhbmNlKiwg
aW50MzJfdCkgPSBbXSAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGludDMy
X3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJh
bWUoY2FsbEZyYW1lKTsKKworICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0
dXJuIC0xOworCisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5KCktPmdyb3co
UGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWls
UmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFp
bFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdy
b3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7Cisg
ICAgfTsKKworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRDQ2FsbChncm93TWVtb3J5LCBy
ZXN1bHQsIFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIGluc3RhbmNlVmFsdWUoKSwg
ZGVsdGEpOworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRC
bG9jayk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRD
dXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihu
dWxscHRyKS0+c2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9u
IHRoaXMgc2l6ZSIpOworCisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBUbXAgdGVtcDEgPSBn
cHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQo
TW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5U2l6ZSgpKSwgdGVtcDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVl
ID0gMTY7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwg
c2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3Jy
ZWN0LiIpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSgxNiksIHJlc3VsdCk7CisgICAgYWRk
U2hpZnQoVXJzaGlmdDY0LCB0ZW1wMSwgcmVzdWx0LCByZXN1bHQpOworICAgIGFwcGVuZChNb3Zl
MzIsIHJlc3VsdCwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOwor
ICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnNlY29uZCksIHZh
bHVlLCBtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9i
YWxzW2luZGV4XS50eXBlOworCisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAg
IFRtcCB0ZW1wID0gZ3ByKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkds
b2JhbHMoKSksIHRlbXApOworCisgICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90
PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9y
bShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBw
ZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJl
c3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQo
QWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVl
VHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXApLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIHRlbXAg
PSBncHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3Rh
bmNlOjpvZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwg
QXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwg
dGVtcCk7CisKKyAgICBUeXBlIHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKwor
ICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhG
b3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5
cGUodHlwZSksIHZhbHVlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0
ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFy
Zzo6YWRkcih0ZW1wKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFp
cklSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7
CisgICAgVU5VU0VEX1BBUkFNKHNpemVPZk9wZXJhdGlvbik7IC8vIE9PUFMKKworICAgIHN3aXRj
aCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTIQorCisgICAgICAgIC8v
IFdlJ3JlIG5vdCB1c2luZyBzaWduYWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9y
ZSBjaGVjayB0aGF0IG5vIG1lbW9yeSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkg
c2l6ZS4KKyAgICAgICAgLy9BU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgLy9BU1NF
UlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICAgICAgLy9tX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBtX21lbW9yeVNpemVHUFIsIHBvaW50ZXIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZzogeworICAgICAgICAvLyBXZSd2ZSB2aXJ0dWFsbHkgbWFwcGVkIDRHaUIrcmVkem9uZSBmb3Ig
dGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJs
ZSwgY29udGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50XSwKKyAgICAgICAgLy8gYW5kIGV2
ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJm
b3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBX
ZWJBc3NlbWJseSByZWdpc3RlcgorICAgICAgICAvLyBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJp
dC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlciArIG9mZnNldCBhY2Nlc3NlcyBwZXJmb3Jt
IHRoZSBhZGRpdGlvbiBpbiA2NC1iaXQgd2hpY2ggY2FuIHB1c2ggYW4gYWNjZXNzIGFib3ZlCisg
ICAgICAgIC8vIHRoZSAzMi1iaXQgbGltaXQgKHRoZSBvZmZzZXQgaXMgdW5zaWduZWQgMzItYml0
KS4gVGhlIHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxsIG9mZnNldHMsIGFuZCB3ZSdsbCBl
eHBsaWNpdGx5IGJvdW5kcyBjaGVjayBhbnkKKyAgICAgICAgLy8gcmVnaXN0ZXIgKyBsYXJnZSBv
ZmZzZXQgYWNjZXNzLiBXZSBkb24ndCB0aGluayB0aGlzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyZXF1
ZW50bHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIHRoYXQgcmVnaXN0
ZXIgKyBsYXJnZSBvZmZzZXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNlIHRoYXQn
cyB0ZWNobmljYWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZyB0aGUK
KyAgICAgICAgLy8gUFJPVF9OT05FIHJlZ2lvbiwgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBh
IHNtYWxsZXIgaW1tZWRpYXRlIGJlY2F1c2UgaXQgY2FuIGNvZGVnZW5zIGJldHRlci4gV2Uga25v
dyB0aGF0IGFueXRoaW5nIGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAgLy8gdGhhbiB0aGUg
ZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0
aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVkICdtYXhpbXVtJyB0aGVuIHdlIHN0
aWxsIGtub3cgdGhhdAorICAgICAgICAvLyBhbnkgYWNjZXNzIGVxdWFsIHRvIG9yIGdyZWF0ZXIg
dGhhbiA0R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBhZGQgdGhlIHJlZHpvbmUuCisgICAgICAg
IGlmIChvZmZzZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMhCisgICAgICAgICAg
ICAvL3NpemVfdCBtYXhpbXVtID0gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkgPyBtX2luZm8ubWVt
b3J5Lm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpOworICAgICAgICAgICAgLy9tX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHND
aGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBzaXplT2ZPcGVyYXRpb24gKyBv
ZmZzZXQgLSAxLCBtYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgfQorCisgICAgVG1wIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIHBvaW50
ZXIsIHJlc3VsdCk7CisgICAgYXBwZW5kKEFkZDY0LCBUbXAobV9tZW1vcnlCYXNlR1BSKSwgcmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9h
ZE9wKExvYWRPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhV
OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6Cisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDE2VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgIHJldHVy
biAyOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQzMlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgIGNhc2Ug
TG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lu
bGluZSBUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAgICBpbnQzMl90IG9mZnNl
dCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAg
aW1tVG1wOworICAgIFRtcCBuZXdQdHI7CisgICAgVG1wIHJlc3VsdDsKKworICAgIGF1dG8gbG9h
ZEFyZyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQs
IEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZkxvYWRPcChvcCkpKSkKKyAgICAgICAgICAgIHJldHVy
biBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1wID0gZ3ByKCk7Cisg
ICAgICAgIG5ld1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
b2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIHBvaW50ZXIs
IG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsKKyAgICB9OworCisg
ICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CisgICAg
ICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDhTaWduZWRFeHRlbmRUbzMy
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAg
ICBhcHBlbmQoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAg
ICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogeworICAgICAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4LCBsb2FkQXJnKCksIHJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDhVOiB7CisgICAgICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90aGVyIHpleHQgaGVyZT8KKyAg
ICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOCwgbG9hZEFyZygpLCBy
ZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okkz
MkxvYWQxNlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2Fk
MTZTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogeworICAgICAgICByZXN1
bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQs
IHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDE2VTogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExv
YWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVk
IGFub3RoZXIgemV4dCBoZXJlPworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBw
ZW5kKExvYWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkMzJVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZTMy
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2ln
bkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTW92ZSwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIGxvYWRBcmcoKSwgcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2Fk
OiB7CisgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwg
bG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50
MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci5pc0dQ
KCkpOworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBz
aXplT2ZMb2FkT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMg
aXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBz
byB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9u
LiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIz
OjpWb2lkKTsKKyAgICAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2gsIFRtcCgpKTsKKworICAgICAgICAvLyBXZSB3b24ndCByZWFjaCBoZXJlLCBzbyB3ZSBqdXN0
IHBpY2sgYSByYW5kb20gcmVnLgorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQx
NlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToK
KyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAg
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGdw
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9h
ZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisKKyAgICByZXR1
cm4geyB9OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBv
cCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4
OgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlODoKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
NjRTdG9yZTE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJT
dG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3RvcmVP
cFR5cGU6OkYzMlN0b3JlOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFN0b3JlT3BUeXBl
OjpJNjRTdG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKwor
aW5saW5lIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9m
ZnNldCkKK3sKKyAgICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9p
bnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAgaW1tVG1wOworICAgIFRtcCBuZXdQdHI7CisKKyAg
ICBhdXRvIHN0b3JlQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJG
b3JtKG9mZnNldCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mU3RvcmVPcChvcCkpKSkKKyAgICAg
ICAgICAgIHJldHVybiBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1w
ID0gZ3ByKCk7CisgICAgICAgIG5ld1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0ob2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1U
bXAsIHBvaW50ZXIsIG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsK
KyAgICB9OworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAgICAgIGFwcGVuZChT
dG9yZTgsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2
OgorICAgICAgICBhcHBlbmQoU3RvcmUxNiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkkzMlN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZTMyLCB2YWx1ZSwgc3RvcmVB
cmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3Jl
OgorICAgICAgICBhcHBlbmQoTW92ZSwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1v
dmVGbG9hdCwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHZhbHVl
LCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnN0b3JlKFN0b3Jl
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
dWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBvaW50ZXIu
aXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNl
dCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2gg
dGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRpb24gZXJy
b3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVudGltZSBleGNl
cHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBhdXRvKiB0aHJvd0V4Y2VwdGlvbiA9IGFk
ZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbi0+c2V0R2VuZXJh
dG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworICAg
ICAgICBlbWl0UGF0Y2hwb2ludCh0aHJvd0V4Y2VwdGlvbiwgVG1wKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0U3RvcmVPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRl
ciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZhbHVlLCBvZmZzZXQpOworCisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVy
bywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VS
VChub25aZXJvLmlzR1AoKSA9PSB6ZXJvLmlzR1AoKSk7CisgICAgcmVzdWx0ID0gbm9uWmVyby5p
c0dQKCkgPyBncHIoKSA6IGZwcigpOworICAgIGlmIChub25aZXJvLmlzR1AoKSkKKyAgICAgICAg
YXBwZW5kKE1vdmUsIG5vblplcm8sIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQo
TW92ZURvdWJsZSwgbm9uWmVybywgcmVzdWx0KTsKKworICAgIEJhc2ljQmxvY2sqIGlzWmVybyA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29k
ZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzWmVybywgY29udGludWF0aW9uKTsKKworICAgIGlmICh6
ZXJvLmlzR1AoKSkKKyAgICAgICAgYXBwZW5kKGlzWmVybywgTW92ZSwgemVybywgcmVzdWx0KTsK
KyAgICBlbHNlCisgICAgICAgIGFwcGVuZChpc1plcm8sIE1vdmVEb3VibGUsIHplcm8sIHJlc3Vs
dCk7CisgICAgYXBwZW5kKGlzWmVybywgSnVtcCk7CisgICAgaXNaZXJvLT5zZXRTdWNjZXNzb3Jz
KGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVj
ayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbiBvcmlnaW4pCit7CisgICAgVU5V
U0VEX1BBUkFNKG9yaWdpbik7IC8vIE9PUFMKKworICAgIGlmICghbV90aWVyVXApCisgICAgICAg
IHJldHVybjsKKworICAgIFRtcCBjb3VudGRvd25QdHIgPSBncHIoKTsKKyAgICBUbXAgb2xkQ291
bnRkb3duID0gZ3ByKCk7CisgICAgVG1wIG5ld0NvdW50ZG93biA9IGdwcigpOworCisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVw
KSksIGNvdW50ZG93blB0cik7CisgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNvdW50ZG93
blB0ciksIG9sZENvdW50ZG93bik7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRJ
bW1Gb3JtKGRlY3JlbWVudENvdW50KSk7CisgICAgYXBwZW5kKE1vdmUzMiwgb2xkQ291bnRkb3du
LCBuZXdDb3VudGRvd24pOworICAgIGFwcGVuZChTdWIzMiwgQXJnOjppbW0oZGVjcmVtZW50Q291
bnQpLCBuZXdDb3VudGRvd24pOworICAgIGFwcGVuZChNb3ZlMzIsIG5ld0NvdW50ZG93biwgQXJn
OjphZGRyKGNvdW50ZG93blB0cikpOworCisgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50
KEIzOjpWb2lkKTsKKyAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgZWZmZWN0
cy53cml0ZXMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaC0+ZWZmZWN0cyA9IGVm
ZmVjdHM7CisKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCB0aWVyVXAgPSBqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCB0aWVyVXBSZXN1bWUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICBw
YXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
dGllclVwLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhUGFk
ZGluZ0J5dGVzID0gMDsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvU3BpbGwg
PSB7IH07CisgICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsLmFkZChHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJl
Z2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFQYWRkaW5n
Qnl0ZXMpOworCisgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG1fZnVuY3Rpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAg
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNr
Qnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKKyAg
ICAgICAgICAgIGppdC5qdW1wKHRpZXJVcFJlc3VtZSk7CisKKyAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPE5vUHRyVGFnPihjYWxsKSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRo
dW5rczo6c2luZ2xldG9uKCkuc3R1Yih0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOworCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCksIG5ld0NvdW50ZG93biwgb2xkQ291bnRkb3duKTsK
K30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29w
KFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsK
KworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhi
b2R5KTsKKworICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKKyAgICBlbWl0VGllclVwQ2hlY2so
VGllclVwQ291bnQ6Omxvb3BEZWNyZW1lbnQoKSwgb3JpZ2luKCkpOworCisgICAgcmV0dXJuIENv
bnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxv
Y2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6
Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQor
eworICAgIHJldHVybiBDb250cm9sRGF0YShCMzo6T3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9y
VHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX2NvZGUuYWRkQmxvY2soKSk7
Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkQmxv
Y2soVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBz
aWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpCbG9jaywgbV9jb2Rl
LmFkZEJsb2NrKCkpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIAorICAgIC8v
IFdhc20gYm9vbHMgYXJlIGkzMi4KKyAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAg
bV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFrZW4sIG5vdFRha2VuKTsKKworICAgIG1f
Y3VycmVudEJsb2NrID0gdGFrZW47CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEob3JpZ2luKCks
IHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OklmLCBjb250aW51
YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgY3Vy
cmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
Y3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgQVNTRVJUKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgIG1fY3VycmVu
dEJsb2NrID0gZGF0YS5zcGVjaWFsOworICAgIGRhdGEuY29udmVydElmVG9CbG9jaygpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBD
b250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6ZSgpIDw9IDEpOwor
ICAgIGlmIChyZXR1cm5WYWx1ZXMuc2l6ZSgpKSB7CisgICAgICAgIFRtcCByZXR1cm5WYWx1ZUdQ
UiA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIFRtcCByZXR1cm5WYWx1
ZUZQUiA9IFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIHN3aXRjaCAoZGF0
YS5zaWduYXR1cmUoKSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGFw
cGVuZChNb3ZlMzIsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAg
ICAgYXBwZW5kKFJldDMyLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgcmV0dXJuVmFs
dWVzWzBdLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0NjQsIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoK
KyAgICAgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFs
dWVGUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBh
cHBlbmQoTW92ZURvdWJsZSwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAg
ICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhcHBlbmQoUmV0Vm9pZCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworLy8gTk9URTogQWxsIGJyYW5jaGVzIGluIFdhc20gYXJl
IG9uIDMyLWJpdCBpbnRzCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9s
RGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRo
QmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJlc3VsdEZvckJyYW5jaCgpKTsKKworICAgIEJhc2lj
QmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICBpZiAoY29u
ZGl0aW9uKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9uKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBw
ZW5kKEp1bXApOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQp
OworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0
YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHRGb3JCcmFuY2goKSk7
CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0
LnJlc3VsdEZvckJyYW5jaCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0
cy5zaXplKCk7ICsraSkgeworICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSB0YXJnZXRzW2ld
LT50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShpKSwgY29uc3RhbnQpOworICAgICAgICBh
cHBlbmQoQnJhbmNoMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBjb25z
dGFudCwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
dGFyZ2V0LCBjb250aW51YXRpb24pOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGlu
dWF0aW9uOworICAgIH0KKworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+
c2V0U3VjY2Vzc29ycyhkZWZhdWx0VGFyZ2V0LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpOworCisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJv
bEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CisK
KyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucmVzdWx0KTsK
KyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0
YS5jb250aW51YXRpb24pOworCisgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkp
OworfQorCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJv
bEVudHJ5JiBlbnRyeSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBkYXRh
ID0gZW50cnkuY29udHJvbERhdGE7CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVh
dGlvbjsKKworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CisgICAgICAg
IGFwcGVuZChkYXRhLnNwZWNpYWwsIEp1bXApOworICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1
Y2Nlc3NvcnMobV9jdXJyZW50QmxvY2spOworICAgIH0KKworICAgIGZvciAoVG1wIHJlc3VsdCA6
IGRhdGEucmVzdWx0KQorICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBl
bmQocmVzdWx0KTsKKworICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgYWZ0
ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhlcmUuCisg
ICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCisgICAgICAgIHJldHVy
biBhZGRSZXR1cm4oZGF0YSwgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsK
KworICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWdu
YXR1cmUucmV0dXJuVHlwZSgpOworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2Ug
VHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2Fz
ZSBUeXBlOjpJNjQ6CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzOworCisgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CisgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRz
ID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90
PihhcmdzLnNpemUoKSkpOworCisgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtl
ZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBp
bXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAgIFRt
cCB0YXJnZXRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICAvLyBPT1BTOiBUcnkgdG8gaXNlbCB0
aGlzIGJldHRlcgorICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oSW5zdGFuY2U6Om9m
ZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpLCB0YXJnZXRJbnN0YW5jZSk7Cisg
ICAgICAgIGFwcGVuZChBZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCB0YXJnZXRJbnN0YW5jZSk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGFyZ2V0SW5zdGFuY2UpLCB0YXJnZXRJbnN0
YW5jZSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworCisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybyksIHRhcmdldEluc3RhbmNlLCB0YXJnZXRJbnN0YW5jZSk7CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVy
QmxvY2spOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9i
YmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2
aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1
bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tp
bmcuCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworCisgICAgICAgICAgICBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3Ms
IFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgICAgIHBhdGNo
QXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0
aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAg
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGVtaXRQYXRjaHBv
aW50KGlzV2FzbUJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7
CisgICAgICAgICAgICBhcHBlbmQoaXNXYXNtQmxvY2ssIEp1bXApOworICAgICAgICAgICAgaXNX
YXNtQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRtcCBqdW1wRGVzdGluYXRpb24gPSBncHIoKTsKKyAgICAgICAg
ICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKEluc3RhbmNlOjpv
ZmZzZXRPZldhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSksIGp1bXBEZXN0aW5hdGlv
bik7CisgICAgICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBBZGQ2NCwgaW5zdGFuY2VW
YWx1ZSgpLCBqdW1wRGVzdGluYXRpb24pOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJC
bG9jaywgTW92ZSwgQXJnOjphZGRyKGp1bXBEZXN0aW5hdGlvbiksIGp1bXBEZXN0aW5hdGlvbik7
CisKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBl
KHJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlu
bmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQg
PSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwg
cGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4K
KyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2Fs
bGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmcpKTsKKworICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRj
aEFyZ3M7CisgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKGp1bXBEZXN0aW5hdGlvbik7CisK
KyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUs
IHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3MsIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVw
IHJlcCkgeworICAgICAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
W3JldHVyblR5cGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGppdC5jYWxs
KHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZW1pdFBhdGNocG9pbnQoaXNFbWJl
ZGRlckJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7CisgICAg
ICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBKdW1wKTsKKyAgICAgICAgICAgIGlzRW1i
ZWRkZXJCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworICAgICAgICB9CisKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgICAgIC8vIFRoZSBjYWxs
IGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBv
ciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCisgICAgICAgIHJlc3RvcmVXZWJBc3Nl
bWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1v
cnksIGluc3RhbmNlVmFsdWUoKSwgY29udGludWF0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7
CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisKKyAgICAgICAgVmVj
dG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3Ms
IFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgcGF0Y2hBcmdz
LmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAgICB9KTsKKworICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFw
cGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2Fs
bCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwg
V1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFy
Z3MudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBh
cmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworICAgIC8vIE5vdGU6IGNh
bGwgaW5kaXJlY3QgY2FuIGNhbGwgZWl0aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJlY2F1c2UKKyAgICAvLyBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiBpcyBsaWtlIGNhbGxpbmcgaW50byB0aGUgZW1iZWRkZXIsIHdlIGNvbnNlcnZhdGl2
ZWx5IGFzc3VtZSBhbGwgY2FsbCBpbmRpcmVjdHMKKyAgICAvLyBjYW4gYmUgdG8gdGhlIGVtYmVk
ZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sgY2FsY3VsYXRpb24uCisgICAgbV9tYXhOdW1KU0NhbGxB
cmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyID0gZ3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVy
ID0gZ3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0
aCA9IGdwcigpOworICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRk
ckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mRnVuY3Rp
b25zKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxp
ZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpLCBCMzo6V2lkdGg2NCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZM
ZW5ndGgoKSwgQjM6OldpZHRoNjQpKTsKKworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRy
KGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSksIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJMZW5ndGgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxh
YmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSwgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpLCBp
bnN0YW5jZXNCdWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92ZTMyLCBjYWxs
ZWVJbmRleCwgY2FsbGVlSW5kZXgpOworCisgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBs
b29raW5nIGZvciBpcyB2YWxpZC4KKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5k
KEJyYW5jaDMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNh
bGxlZUluZGV4LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc0NhbGxJbmRpcmVjdCk7CisgICAgfSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxs
ZWVDb2RlID0gZ3ByKCk7CisgICAgeworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWdu
YXR1cmVJbmRleCA9IGdwcigpOworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhl
IHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1v
dmUsIEFyZzo6aW1tKHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxl
ZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2Fs
bGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXIsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29k
ZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVlIGNvZGUuCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0
aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBp
ZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5v
dCBpbml0aWFsaXplZC4KKyAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRs
ZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52
YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzcyMTAKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVn
ZW4gYXNzdW1lcyBpNjQiKTsKKyAgICAgICAgLy8gT09QUzogVGhpcyBzZWVtcyBkdW1iIHRvIGRv
IHR3byBjaGVja3MganVzdCBmb3IgYSBuaWNlciBlcnJvciBoZXJlLi4uCisKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChTaWduYXR1cmU6OmludmFsaWRJbmRleCA9PSAwLCAiIik7CisgICAgICAgICAgICBhcHBl
bmQoQnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjYWxs
ZWVTaWduYXR1cmVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6TnVsbFRhYmxlRW50cnkpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBn
cHIoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgVG1wIG5l
d0NvbnRleHRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbmRl
eChpbnN0YW5jZXNCdWZmZXIsIGNhbGxlZUluZGV4LCA4LCAwKSwgbmV3Q29udGV4dEluc3RhbmNl
KTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRvQ29udGV4dFN3
aXRjaCk7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZv
aWQpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Cisg
ICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhp
bmcgd2l0aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Cisg
ICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0gcGFyYW1zWzBdLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1sxXS5ncHIoKTsK
KyAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5
ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIEFTU0VSVChuZXdD
b250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkg
c2l6ZSByZWdpc3RlcgorICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5z
aXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBd
LnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6
ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1v
cnk6OnZvaWQqLgorICAgICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChkb0NvbnRl
eHRTd2l0Y2gsIHBhdGNocG9pbnQsIFRtcCgpLCBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNl
VmFsdWUoKSk7CisgICAgICAgIGFwcGVuZChkb0NvbnRleHRTd2l0Y2gsIEp1bXApOworICAgICAg
ICBkb0NvbnRleHRTd2l0Y2gtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZUNvZGUpLCBjYWxsZWVDb2RlKTsKKworICAgIFR5cGUgcmV0dXJu
VHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7
CisgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6Okkz
MjoKKyAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjMyOgorICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBhdXRvKiBwYXRjaCA9
IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgIHBhdGNoLT5lZmZlY3Rz
LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgcGF0Y2gtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0
cnVlOworICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdp
c3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgLy8gV2Ug
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcgc28KKyAgICAvLyBiZWNhdXNlIHRoZSB3YXNtLT53YXNtIHRo
dW5rIHVuY29uZGl0aW9uYWxseSBvdmVycmlkZXMgdGhlIHNpemUgcmVnaXN0ZXJzLgorICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNt
IHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJz
IGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIx
ODEKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgIFZlY3RvcjxDb25zdHJhaW5l
ZFRtcD4gZW1pdEFyZ3M7CisgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUpOworICAgIHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBh
dGNoLCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgZW1p
dEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgfSk7CisgICAgcGF0Y2gtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9
PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgIH0pOworCisgICAg
ZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIFdURk1vdmUoZW1p
dEFyZ3MpKTsKKworICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdl
YkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1v
cnkuCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9j
ayk7CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeShj
b25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKQor
eworICAgIC8vIE9PUFM6IFdlIGtpbmRhIHdhbnQgdHlwZXMgaGVyZSB0byBkaXN0aW5ndWlzaCBp
MzIvaTY0L2YzMi9mNjQhCisgICAgUkVMRUFTRV9BU1NFUlQoZHN0LmlzR1AoKSA9PSBzb3VyY2Uu
aXNHUCgpKTsKKyAgICBhcHBlbmQoZHN0LmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBzb3Vy
Y2UsIGRzdCk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVz
dWx0KQoreworICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAg
ICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrW3Jlc3Vs
dFN0YWNrLnNpemUoKSAtIDEgLSBpXSk7Cit9CisKKy8vc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Np
b25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBBaXJJUkdlbmVyYXRvcjo6
RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKKy8veworLy8gICAgZGF0YUxvZyhjb21t
YSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKy8vICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lv
biA6IGV4cHJlc3Npb25TdGFjaykKKy8vICAgICAgICBkYXRhTG9nKGNvbW1hLCAqZXhwcmVzc2lv
bik7CisvL30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJv
bEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0
YWNrKQoreworICAgIFVOVVNFRF9QQVJBTShjb250cm9sU3RhY2spOworICAgIFVOVVNFRF9QQVJB
TShleHByZXNzaW9uU3RhY2spOworCisgICAgLy8gT09QUyEKKyAgICAvKgorICAgIGRhdGFMb2dM
bigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgZGF0YUxv
Z0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsKKyAgICBkYXRhTG9n
TG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGRhdGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKKyAgICAg
ICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAgZHVtcEV4cHJlc3Npb25T
dGFjayhjb21tYSwgKmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGV4cHJlc3Npb25TdGFjayA9
ICZjb250cm9sU3RhY2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGRhdGFM
b2dMbigpOworICAgIH0KKyAgICBkYXRhTG9nTG4oKTsKKyAgICAqLworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBCMzo6T3JpZ2luCit7CisgICAgcmV0dXJuIEIzOjpPcmln
aW4oKTsKKyAgICAvL09wY29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUo
KSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKKyAgICAvL0FTU0VS
VChpc1ZhbGlkT3BUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG9yaWdpbi5vcGNvZGUoKSkpKTsK
KyAgICAvL3JldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOworfQorCitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50
OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBt
b2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1
bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJ
VCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigp
OworCisgICAgQjM6OlByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZSA9IHByb2Nl
ZHVyZS5jb2RlKCk7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRT
dHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5kYXRh
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNvZGVP
cmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgd2UgY2Fu
bm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJzKCkg
b3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAgLy8gZG9uJ3Qgc3Ry
aWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCksIHdoaWNoIHNhdmVz
IGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAgICAvLyBPT1BTOiBE
byB3ZSBuZWVkIHRoaXM/IFNob3VsZCB3ZSBqdXN0IHNldCBpdCBkaXJlY3RseSBvbiBDb2RlPwor
ICAgIHByb2NlZHVyZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFsc2UpOworICAgIAorICAgIHBy
b2NlZHVyZS5zZXRPcHRMZXZlbChjb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlCisgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZl
bCgpCisgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgp
KTsKKworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVz
dWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRpb25Nb2Rl
LCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsK
KyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCisgICAgICAgICAgICBibG9jay0+c3VjY2Vzc29y
QmxvY2soaSktPmFkZFByZWRlY2Vzc29yKGJsb2NrKTsKKyAgICB9CisgICAgLy9CMzo6QWlyOjp2
YWxpZGF0ZShjb2RlKTsKKyAgICAvLyBPT1BTOiBWYWxpZGF0ZSAnY29kZScgaGVyZSEKKyAgICAK
KyAgICB7CisgICAgICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOworICAg
ICAgICBCMzo6QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRy
eXBvaW50SklUKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOworICAgICAgICByZXN1bHQt
PmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVy
QXRPZmZzZXRMaXN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30K
Kwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUg
b3BlcmF0aW9uLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCkKK3sK
KyAgICAvL0FTU0VSVChvcGVyYXRpb24gPT0gRGl2IHx8IG9wZXJhdGlvbiA9PSBNb2QgfHwgb3Bl
cmF0aW9uID09IFVEaXYgfHwgb3BlcmF0aW9uID09IFVNb2QpOyAvLyBPT1BTCisgICAgLy9jb25z
dCBCMzo6VHlwZSB0eXBlID0gbGVmdC0+dHlwZSgpOworICAgIFVOVVNFRF9QQVJBTShvcGVyYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwor
CisgICAgLyoKKyAgICB7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8g
T09QUzogTmVlZCB0eXBlcyBmb3IgYnJhbmNoIGhlcmUhCisgICAgICAgICAgICBLaW5kIG9wID0g
QnJhbmNoVGVzdDY0IDogQnJhbmNoVGVzdDMyOworICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6
OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCByaWdodCwgcmlnaHQpOworICAgICAgICB9
LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAo
b3BlcmF0aW9uID09IERpdikgeworICAgICAgICAvLyBPT1BTOiBOZWVkIHR5cGVzIGhlcmUhCisg
ICAgICAgIC8vaW50NjRfdCBtaW4gPSB0eXBlID09IEludDMyID8gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKTsK
KworICAgICAgICBpbnQ2NF90IG1pbiA9IHR5cGUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCk7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8gT09Q
UzogVHJ5IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAgICAgICAgICBUbXAgbWlu
VG1wID0gZ3ByKCk7CisgICAgICAgICAgICBUbXAgbmVnT25lID0gZ3ByKCk7CisKKyAgICAgICAg
ICAgIEtpbmQgb3AgPSBpczY0Qml0T3Aob3BlcmF0aW9uKSA/IENvbXBhcmU2NCA6IENvbXBhcmUz
MjsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShtaW4pLCBtaW5UbXApOwor
ICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
KSwgbGVmdCwgbWluVG1wLCBtaW5UbXApOworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
aW1tKC0xKSwgbmVnT25lKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCksIHJpZ2h0LCBuZWdPbmUsIG5lZ09uZSk7CisgICAgICAgICAg
ICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpJbnRlZ2Vy
T3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9CisgICAgKi8KK30KKworLy8gT09QUzogSW1w
bGVtZW50IHRoZXNlIGRpdiBvcHMhISEKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7
CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAg
VU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2Owor
ICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAg
IC8vICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJB
TShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bj
b2RlIG9wID0gTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdo
dCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRp
dlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZGF0YUxvZ0xuKCJ1bmltcGxl
bWVudGVkIGkzMmRpdnMiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRy
dWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShs
ZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQp
OworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgLy9lbWl0Q2hlY2tzRm9y
TW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGRh
dGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsKKyAg
ICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVT
RURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAg
IC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8v
ICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShy
aWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2Rl
IG9wID0gRGl2OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7
CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMy
ZGl2cyIpOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAv
L2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAg
IFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9j
b25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9w
LCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZGF0YUxv
Z0xuKCJ1bmltcGxlbWVudGVkIGkzMmRpdnMiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAv
L2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOworICAgIFVO
VVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9Q
QVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgLy9l
bWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHBy
ZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAg
Q1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3Ag
PSBVTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Cisg
ICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMy
KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0u
Z3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50
KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fz
c2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgeworICAgICAgICBhdXRvKiBwYXRj
aHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVt
aXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQzMl90ICgqcG9wY291bnQpKGludDMyX3QpID0g
W10gKGludDMyX3QgdmFsdWUpIC0+IHVpbnQzMl90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3Vu
dCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9u
KCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IGppdC5jb3VudFBvcHVsYXRpb242NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRf
dCAoKnBvcGNvdW50KShpbnQ2NF90KSA9IFtdIChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7
IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBv
cGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1
dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAg
ICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyNpZiBDUFUoWDg2XzY0KQor
ICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1z
WzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252
ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2Vu
ZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2
KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQVShY
ODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBq
aXQuY29udmVydFVJbnQ2NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkp
OworI2VuZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9p
bnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRO
ZWFyZXN0SW50RG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9
KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBy
ZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBw
YXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNo
cG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBd
LmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2lu
dChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9G
bG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAv
L2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOyAvLyBPT1BT
OiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJs
ZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91
YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFu
LCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBC
Mzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
VU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9ib29s
IGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsgLy8gT09QUzogaW1w
bGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0
d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0
d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3Vu
ZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSog
dHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVj
aywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
KyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50
MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7
IH07Cit9CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIFVOVVNFRF9Q
QVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vYm9vbCBiID0gdHJ1
ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0
aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwg
b3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0
T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFs
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tW
YWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6
OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIFVO
VVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vYm9vbCBi
ID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxl
bWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcs
IG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91
dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
IHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
VHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmln
aW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBq
aXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVu
Y1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShy
ZXN1bHQpOworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBJNjRUcnVuY1NGNjQiKTsKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAg
ICAvLyAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAg
VG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAg
ICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7Cisg
ICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3Jp
Z2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0
YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRz
KTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93
RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7
CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRj
aHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJs
ZVRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgVU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVt
ZW50IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhh
biwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0
YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhh
dmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQg
aW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAg
ICAgLy8gdGhlIG51bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25l
ZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBy
cyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVl
ZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsK
KyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3Jh
dGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAg
ICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2
KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAg
ICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0
LnRydW5jYXRlRG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCks
IHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShhcmcpOwor
ICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIGRhdGFMb2dMbigiaW5pbXBsZW1lbnRlZCBp
NjR0cnVuY3NmMzIiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRydWU7
CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOyAvLyBPT1BTOiBJbXBsZW1lbnQgdGhp
cyEKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgp
LAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0
ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZC
b3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCks
IG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigp
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50
cnVuY2F0ZUZsb2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7Cisg
ICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMy
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0
KTsKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBP
T1BTOiBpbXBsZW1lbnQgdGhpcworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0
LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAg
ICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdp
bigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0
cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNr
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29uc3RhbnQ7CisgICAg
aWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0
cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywg
d2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAgICAgICAvLyB0aGUg
bnVtYmVycyB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2lu
Y2Ugd2UgY2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBk
byBpdAorICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAg
c2lnbkJpdENvbnN0YW50ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAt
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworICAgIH0KKyAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFw
cGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGlmIChpc1g4NigpKSB7Cisg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChzaWduQml0Q29uc3RhbnQsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAx
OworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29u
c3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAg
ICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9
IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
VWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFu
dCk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25l
KCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBp
ZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAg
ICAgIGFwcGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKyAgICAKKyAgICBUbXAgZWN4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAg
ICBhcHBlbmQoTW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUsIHNoaWZ0LCBl
Y3gpOworICAgIGFwcGVuZChvcCwgZWN4LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJTdWIoQjM6OkFpcjo6T3Bjb2RlIG9wLCBF
eHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYg
KGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAg
ICBhcHBlbmQob3AsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAg
Ly8gbWVhbnMKKyAgICAvLyBiID0gYiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3Vs
dCk7CisgICAgYXBwZW5kKG9wLCByaHMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUg
b3AsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQob3AgPT0gQWJzRmxvYXQgfHwgb3AgPT0g
QWJzRG91YmxlKTsKKworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3Jt
KG9wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQo
aXNYODYoKSk7CisKKyAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICBpZiAob3AgPT0gQWJz
RmxvYXQpIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKH4oMXVsbCA8PCAzMSkpLCBj
b25zdGFudCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0
KTsKKyAgICAgICAgYXBwZW5kKEFuZEZsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ofigxdWxsIDw8IDYzKSksIGNvbnN0
YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsK
KyAgICAgICAgYXBwZW5kKEFuZERvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5P
cChCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUg
cmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRt
cCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgbGhzLCByaHMsIHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7
CisKKyAgICAvLyBPcCBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBPcCBhCisgICAg
Ly8gT09QUzogdmVyaWZ5CisgICAgYXBwZW5kKE1vdmVEb3VibGUsIGxocywgcmVzdWx0KTsKKyAg
ICBhcHBlbmQob3AsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDZWlsRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JF
cXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRlbW90ZUY2ND4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RG91YmxlVG9GbG9h
dCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFs
ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwgPSBtX2NvZGUu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQsIEFyZzo6ZG91
YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBh
cHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
aXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24p
OworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAg
YXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVuZChn
cmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
Z3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNldFN1
Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91Ymxl
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyTWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJs
b2NrLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlz
RXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+
c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3Zl
RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwg
QXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFy
ZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24p
OworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAg
YXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFk
ZEZsb2F0aW5nUG9pbnRCaW5PcChNdWxEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJp
bk9wKERpdkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgLy8gT09QUzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBmb3IgdGhlIGltbXMg
YW5kIHR3byBvcGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRt
cCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7CisgICAgVG1wIHZhbHVlID0g
Z3ByKCk7CisKKyAgICAvLyBPT1BTOiBDYW4gZml0IGluIEltbS9CaXRJbW0gaW5zdGVhZCBvZiBC
aWdJbW0/CisgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBl
bmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQz
MiwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcw
LCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1
ZSk7CisgICAgYXBwZW5kKEFuZDMyLCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVu
ZChPcjMyLCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2
YWx1ZSwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUz
MiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCB0ZW1wLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJSZWludGVycHJldEkzMj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQW5kNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMk5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NEd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJT
cXJ0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwg
YXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJn
Ojpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NEVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NERpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9P
UFM6IHdoYXQgYWJvdXQgY2hpbGwtbmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGlu
Z1BvaW50QmluT3AoRGl2RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZs
b2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9z
NjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVGbG9hdCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKE5lZ2F0ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IGVsc2UgeworICAgICAgICBUbXAgY29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgICAg
IGFwcGVuZChNdWxGbG9hdCwgY29uc3RhbnQsIGFyZzAsIHJlc3VsdCk7CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQW5kMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVs
b3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0NjQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRBYnM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2lu
dEFicyhBYnNEb3VibGUsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29weXNpZ24+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBi
ZXR0ZXIgY29kZWdlbiBoZXJlIGZvciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24g
eDg2CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1w
IHNpZ24gPSBncHIoKTsKKyAgICBUbXAgdmFsdWUgPSBncHIoKTsKKworICAgIGFwcGVuZChNb3Zl
RG91YmxlVG82NCwgYXJnMSwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgw
eDgwMDAwMDAwMDAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCBzaWdu
LCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmZmZmZmZmZmYpLCB2YWx1ZSk7Cisg
ICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjY0
LCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdmFsdWUs
IHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9GbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0Um90bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMdD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0kzMj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0Rv
dWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJs
ZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpk
b3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0
ZW1wID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5k
KENvbnZlcnRJbnQ2NFRvRmxvYXQsIHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclM+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUnNoaWZ0
MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NENlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
Q2VpbERvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRGbG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChGbG9v
ckRvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjMyLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkRmxvYXRpbmdQb2ludEFicyhBYnNGbG9hdCwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1pbj4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNC
bG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVx
dWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVx
dWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERv
dWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAs
IGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVx
dWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcw
LCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJs
ZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAg
bm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwp
OworCisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVy
VGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxGbG9h
dCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViNjQsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJSZWludGVycHJldEYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJB
ZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQWRkMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFN1Yj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGlm
IChpc1ZhbGlkRm9ybShTdWJEb3VibGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKQor
ICAgICAgICBhcHBlbmQoU3ViRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGVsc2Ug
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTdWJEb3VibGUsIHJlc3VsdCwg
YXJnMCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjMyLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0THRTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTY0PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRYb3I+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9yNjQsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE11bDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBpZiAoaXNWYWxpZEZvcm0oU3ViRmxvYXQsIEFyZzo6VG1wLCBBcmc6
OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoU3ViRmxvYXQsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAg
ICAgICBhcHBlbmQoTW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU3Vi
RmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRQcm9tb3RlRjMyPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRGbG9hdFRvRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQWRkRG91YmxlLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFVJMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJOZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIFJFTEVBU0VfQVNTRVJUKGFyZzAgJiYgYXJnMSk7CisgICAgYXBwZW5kKENvbXBhcmUz
MiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NFJlaW50ZXJwcmV0STY0PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJGbG9vcj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChGbG9vckZsb2F0LCBhcmcwLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJFcXo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDMy
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRSZWludGVycHJldEY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0U2hyUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRT
aGlmdChSc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVXJzaGlmdDY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0U3FydD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0NjQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJHdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJXcmFwSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1v
dmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90bD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0MzIsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyR3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5l
Zz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdh
dGVEb3VibGUsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChOZWdhdGVEb3Vi
bGUsIGFyZzAsIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCBjb25zdGFudCA9IGFk
ZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxk
b3VibGU+KC0xLjApKSk7CisgICAgICAgIGFwcGVuZChNdWxGbG9hdCwgY29uc3RhbnQsIGFyZzAs
IHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAg
ICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJs
b2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0Vx
dWFsLCBBbmREb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWws
IEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAg
IGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
bm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3Jz
KGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRG91
YmxlLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhhbiwgSnVtcCk7CisgICAgbGVz
c1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2Nr
ID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlVT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQWRkNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21CM0lS
R2VuZXJhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29u
c3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9
IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTUsNyArMzE1LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbgog
ICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gZWZmZWN0czsKICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3Rl
clNldChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKLSAgICBwYXRjaHBvaW50LT5hcHBlbmQo
aW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50
LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsgLy8gT09Q
UzogUHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nIGFyZyEKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbSkgewogICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUik7CkBAIC00NTksOSArNDU5LDkgQEAgdm9pZCBCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAogCiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIElu
c3RhbmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBj
YW5vbmljYWwgbG9jYXRpb24gaXMuCi0gICAgICAgIFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpKTsK
LSAgICAgICAgVmFsdWUqIGFjdHVhbFN0YWNrTGltaXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBw
b2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGlt
aXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgIFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJ
bnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpKTsKKyAgICAgICAg
VmFsdWUqIGFjdHVhbFN0YWNrTGltaXQgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0KTsKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGltaXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7IC8vIE9P
UFM6IHNob3VsZCBiZSBibG9jayEKICAgICB9CiAKICAgICBpZiAoISFtZW1vcnkpIHsKQEAgLTE2
MDksNiArMTYwOSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQK
ICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKICNpZiBDUFUoWDg2XzY0KQpAQCAtMTYyOSw2ICsxNjMwLDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbgogICAgIGlmIChpc1g4NigpKQog
ICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogI2lm
IENQVShYODZfNjQpCkBAIC0xODM4LDcgKzE4NDAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lz
dGVycyA9IDE7CiAgICAgfQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewot
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsgLy8gT09QUzogVGhpcyBsb29rcyBzdXBlciB3cm9uZyBnaXZlbiB3ZSBkb24ndCBzYXkgd2Ug
Y2xvYmJlciB0aGlzIQogICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CiAg
ICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7CiAgICAgICAgIGlmIChpc1g4
NigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkIz
Q29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUg
Ildhc21BaXJJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgpAQCAt
MjcxLDcgKzI3Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGkK
IAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgICAgIFRpZXJVcENvdW50KiB0aWVy
VXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5j
dGlvbkluZGV4XSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwg
ZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENv
bXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCks
IHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUs
IGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgICAg
IGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwzNiBAQCBjb25zdCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24mIHdhc21DYWxsaW5nCiAgICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVu
dGlvbjsKIH0KIAorY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252
ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdD
b252ZW50aW9uQWlyPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBz
dGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9y
PFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKK2NvbnN0IFdhc21D
YWxsaW5nQ29udmVudGlvbkFpciYgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFdhc21DYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGlj
V2FzbUNhbGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNX
YXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1dhc21D
YWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgVmVjdG9yPFJlZz4gZ3ByQXJn
dW1lbnRSZWdpc3RlcnMoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzOyArK2kpCisgICAgICAgICAgICBncHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEdQUklu
Zm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKworICAgICAgICBWZWN0b3I8UmVnPiBmcHJBcmd1
bWVudFJlZ2lzdGVycyhGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdp
c3RlcnM7ICsraSkKKyAgICAgICAgICAgIGZwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gRlBSSW5m
bzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIHN0YXRpY1dhc21DYWxsaW5nQ29u
dmVudGlvbi5jb25zdHJ1Y3QoV1RGTW92ZShncHJBcmd1bWVudFJlZ2lzdGVycyksIFdURk1vdmUo
ZnByQXJndW1lbnRSZWdpc3RlcnMpLCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAj
aW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNB
cmd1bWVudFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCkBAIC00NCwyNyAr
NDUsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1
bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5
cGUpOwordHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZz
ZXQpOwogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9m
ZnNldD4KIGNsYXNzIENhbGxpbmdDb252ZW50aW9uIHsKIHB1YmxpYzoKICAgICBDYWxsaW5nQ29u
dmVudGlvbihWZWN0b3I8UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVn
aXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotICAgICAgICA6IG1fZ3ByQXJncyhncHJB
cmdzKQotICAgICAgICAsIG1fZnByQXJncyhmcHJBcmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2
ZVJlZ2lzdGVycyhjYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZN
b3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnByQXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAg
ICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMp
KQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJn
dW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3MsIEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgY291
bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CisgICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxs
QXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBz
aXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGNvdW50IDwgcmVn
QXJncy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gQjM6OlZhbHVlUmVwOjpyZWcocmVnQXJn
c1tjb3VudCsrXSk7CiAKICAgICAgICAgY291bnQrKzsKICAgICAgICAgQjM6OlZhbHVlUmVwIHJl
c3VsdCA9IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09mZnNldCk7Ci0gICAgICAg
IHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0LCB0eXBlKTsKKyAgICAgICAg
c3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtNzMsMTAgKzc0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEIzOjpJbnQzMjoKICAgICAgICAgY2FzZSBCMzo6
SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdz
LCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQpOwogICAgICAgICBjYXNlIEIzOjpGbG9hdDoKICAgICAgICAgY2FzZSBCMzo6RG91Ymxl
OgotICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlw
ZSwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFy
c2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0
KTsKICAgICAgICAgY2FzZSBCMzo6Vm9pZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0xODksMTkgKzE5MCwxNDMgQEAgcHVibGljOgogICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1f
Y2FsbGVyU2F2ZVJlZ2lzdGVyczsKIH07CiAKLWlubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0
KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlKQordGVtcGxhdGU8dW5zaWduZWQgaGVh
ZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CitjbGFzcyBDYWxsaW5nQ29udmVudGlv
bkFpciB7CitwdWJsaWM6CisgICAgQ2FsbGluZ0NvbnZlbnRpb25BaXIoVmVjdG9yPFJlZz4mJiBn
cHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJl
Z2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAg
LCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdp
c3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHNjcmF0Y2ggPSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICBzY3JhdGNo
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAg
c2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkp
OworICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2dwckFyZ3MpCisgICAgICAgICAgICBzY3JhdGNo
LmNsZWFyKHJlZyk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cykKKyAgICAgICAgICAgIHNjcmF0Y2guY2xlYXIocmVnKTsKKyAgICAgICAgZm9yIChSZWcgcmVn
IDogc2NyYXRjaCkKKyAgICAgICAgICAgIG1fc2NyYXRjaEdQUnMuYXBwZW5kKHJlZyk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2NyYXRjaEdQUnMuc2l6ZSgpID49IDMpOworICAgIH0KKwor
ICAgIEdQUlJlZyBwcm9sb2d1ZVNjcmF0Y2goc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
YXRjaEdQUnNbaV0uZ3ByKCk7IH0KKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
UmVnRnVuYywgdHlwZW5hbWUgU3RhY2tGdW5jPgorICAgIHZvaWQgbWFyc2hhbGxBcmd1bWVudElt
cGwoY29uc3QgVmVjdG9yPFJlZz4mIHJlZ0FyZ3MsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3Rh
Y2tPZmZzZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1bmMsIGNvbnN0IFN0YWNrRnVuYyYgc3RhY2tG
dW5jKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgcmVnQXJncy5zaXplKCkpIHsK
KyAgICAgICAgICAgIHJlZ0Z1bmMocmVnQXJnc1tjb3VudCsrXSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjb3VudCsrOworICAgICAgICBzdGFja0Z1bmMoc3Rh
Y2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNl
dCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0
YWNrRnVuYz4KKyAgICB2b2lkIG1hcnNoYWxsQXJndW1lbnQoVHlwZSB0eXBlLCBzaXplX3QmIGdw
QXJndW1lbnRDb3VudCwgc2l6ZV90JiBmcEFyZ3VtZW50Q291bnQsIHNpemVfdCYgc3RhY2tPZmZz
ZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1bmMsIGNvbnN0IFN0YWNrRnVuYyYgc3RhY2tGdW5jKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6
STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1l
bnRJbXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgcmVnRnVuYywg
c3RhY2tGdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoK
KyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1w
bChtX2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNr
RnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVyU2l6ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFk
ZXJTaXplOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgbG9h
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOwor
ICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNr
T2Zmc2V0ID0gaGVhZGVyU2l6ZTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgbWFyc2hhbGxBcmd1
bWVudChzaWduYXR1cmUuYXJndW1lbnQoaSksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3RvcihCMzo6QWlyOjpUbXAocmVnKSwgaSk7CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09mZnNldCkgeworICAg
ICAgICAgICAgICAgICAgICBmdW5jdG9yKEIzOjpBaXI6OkFyZzo6YWRkcihCMzo6QWlyOjpUbXAo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBzdGFja09mZnNldCksIGkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSXQncyBleHBlY3RlZCB0aGF0
IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhlIGdlbmVyYXRvciBmb3IgdGhlIGNhbGwgb3Bl
cmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXR1cENh
bGwoQjM6OkFpcjo6Q29kZSYgY29kZSwgVHlwZSByZXR1cm5UeXBlLCBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50LCBjb25zdCBWZWN0b3I8QjM6OkFpcjo6VG1wPiYgYXJncywgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50
Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAg
c2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KTsKKworICAgICAgICBmb3IgKGF1dG8gdG1wIDogYXJncykgeworICAgICAgICAgICAgbWFyc2hh
bGxBcmd1bWVudCh0bXAuaXNHUCgpID8gVHlwZTo6STY0IDogVHlwZTo6RjY0LCBncEFyZ3VtZW50
Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsCisgICAgICAgICAgICAgICAgWyZd
IChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wLCBCMzo6VmFsdWVS
ZXA6OnJlZyhyZWcpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIFsmXSAo
c2l6ZV90IHN0YWNrT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wLCBC
Mzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoc3RhY2tPZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUlu
Qnl0ZXMoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3Rh
Y2tPZmZzZXQpKTsKKworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworCisgICAg
ICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlw
ZTo6RjY0OgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpW
YWx1ZVJlcDo6cmVnKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9ncHJBcmdzOworICAgIGNvbnN0
IFZlY3RvcjxSZWc+IG1fZnByQXJnczsKKyAgICBWZWN0b3I8UmVnPiBtX3NjcmF0Y2hHUFJzOwor
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBS
ZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7Cit9OworCitpbmxpbmUgdW5zaWduZWQg
bmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KQogewogICAgIHJldHVybiBjdXJy
ZW50T2Zmc2V0ICsgc2l6ZW9mKFJlZ2lzdGVyKTsKIH0KIAogY29uc3RleHByIHVuc2lnbmVkIGpz
Y0hlYWRlclNpemUgPSBFeGVjU3RhdGU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZihS
ZWdpc3Rlcik7Ci10eXBlZGVmIENhbGxpbmdDb252ZW50aW9uPGpzY0hlYWRlclNpemUsIG5leHRK
U0NPZmZzZXQ+IEpTQ0NhbGxpbmdDb252ZW50aW9uOwotCi10eXBlZGVmIEpTQ0NhbGxpbmdDb252
ZW50aW9uIFdhc21DYWxsaW5nQ29udmVudGlvbjsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRp
b24gPSBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3Vz
aW5nIFdhc21DYWxsaW5nQ29udmVudGlvbiA9IEpTQ0NhbGxpbmdDb252ZW50aW9uOwogY29uc3Qg
SlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxpbmdDb252ZW50aW9uKCk7CiBjb25zdCBXYXNt
Q2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogCit1c2luZyBKU0ND
YWxsaW5nQ29udmVudGlvbkFpciA9IENhbGxpbmdDb252ZW50aW9uQWlyPGpzY0hlYWRlclNpemUs
IG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyID0gSlNDQ2Fs
bGluZ0NvbnZlbnRpb25BaXI7Citjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbkFpciYganNjQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKTsKK2NvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbkFpciYgd2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyKCk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360423</attachid>
            <date>2019-01-28 19:31:01 -0800</date>
            <delta_ts>2019-01-28 23:27:37 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>164020</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDkgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgICAgICBicmVhazsKICAgICB9CiAK
KyAgICBpZiAoIXZhbHVlKSAvLyBPT1BTCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xv
YmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlk
ZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQog
ICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hB
cmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUo
KQogewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2
b2lkIENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8
UmVnPiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVk
UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vh
a1JhbmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9p
ZCBlbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0
ZXhwciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzkzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVk
ZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNt
RnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bj
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25z
dHJhaW5lZFRtcCB7CisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25z
dHJhaW5lZFRtcCh0bXAsIHRtcC5pc1JlZygpID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygp
KSA6IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWlu
ZWRUbXAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAg
ICAgICAsIHJlcChyZXApCisgICAgeworICAgIH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZh
bHVlUmVwIHJlcDsKK307CisKK2NsYXNzIEFpcklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBz
dHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdp
biwgVHlwZSByZXR1cm5UeXBlLCBUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNC
bG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAg
ICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250
aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwg
cmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFS
QU0ob3JpZ2luKTsgLy8gT09QUworICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlID09IFR5cGU6OlZvaWQpOworICAgICAgICB9CisK
KyAgICAgICAgQ29udHJvbERhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9v
cDogICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9j
a1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0
LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwor
ICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCpzcGVj
aWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUi
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
YmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBy
ZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3Qg
eyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAg
ICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0
SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAs
IDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRG
b3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tU
eXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHJl
dHVyblR5cGU7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVG1wOworICAg
IHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhwcmVzc2lvbkxp
c3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBD
b250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlv
blBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25z
dCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb247CisKKyAgICB1c2luZyBFcnJvclR5cGUg
PSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVj
dGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4K
KyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFp
bChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFp
bHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZh
aWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2Rl
ZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAg
IGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDAp
CisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9j
ZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKKworICAgIC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAg
ICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExv
YWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
c3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
IHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRv
cnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblpl
cm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAg
Ly8gQ29udHJvbCBmbG93CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRv
cExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShD
b250cm9sRGF0YSYpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENv
bnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERh
dGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lv
blN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKworICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoQjM6
OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1
YihCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5n
UG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3Ao
QjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENv
bnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Np
b25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CisKK3ByaXZhdGU6CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGlmICghaW5zdC5pc1ZhbGlkRm9y
bSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGluc3QpOworICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJsb2Nr
LCBLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8v
IE9PUFM6IEFkZCBvcmlnaW4KKyAgICAgICAgYXV0byYgaW5zdCA9IGJsb2NrLT5hcHBlbmQoa2lu
ZCwgbnVsbHB0ciwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAg
ICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoS2luZCBraW5kLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIGtpbmQsIHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIFRtcCB0
bXAoQjM6OkJhbmsgYmFuaykgeyByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsgfQorICAgIFRt
cCBncHIoKSB7IHJldHVybiB0bXAoQjM6OkdQKTsgfQorICAgIFRtcCBmcHIoKSB7IHJldHVybiB0
bXAoQjM6OkZQKTsgfQorICAgIFRtcCB0bXBGb3JUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIGNhc2UgVHlw
ZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBmcHIo
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGFkZFBhdGNocG9pbnQoQjM6OlR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb2MuYWRkPEIzOjpQYXRjaHBvaW50
VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCMzo6UGF0Y2hwb2ludFZhbHVl
KiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgZW1p
dFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxB
cmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFy
Z3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAg
IHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVj
dG9yPENvbnN0cmFpbmVkVG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsK
KyAgICB9CisKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ss
IEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFp
bmVkVG1wPigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+Cisg
ICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxp
bmVTaXplPiYmIGFyZ3MpCisgICAgeworICAgICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwp
CisgICAgICAgICAgICBtX3BhdGNocG9pbnRTcGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBhdGNo
cG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6UGF0
Y2hwb2ludFNwZWNpYWw+KCkpKTsKKworICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNoLCBB
cmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOworICAgICAgICBJbnN0IHJlc3VsdE1v
djsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50eXBl
KCkgIT0gQjM6OlZvaWQpOworICAgICAgICAgICAgc3dpdGNoIChwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoK
KyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5yZWcoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdE1vdiA9IEluc3QocmVzdWx0Lmlz
R1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAocGF0Y2gtPnJlc3VsdENvbnN0
cmFpbnQucmVnKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKHBhdGNo
LT50eXBlKCkgPT0gQjM6OlZvaWQpOworICAgICAgICAKKyAgICAgICAgZm9yIChDb25zdHJhaW5l
ZFRtcCYgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8gT09QUzogVWdoLCB0aGlzIGlzIHN1
cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBCMzo6VmFsdWUqIGhlcmUuCisgICAg
ICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdvcmssIGJ1dCBvdXIgYWx0ZXJuYXRp
dmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAgICAgLy8gb3IgcmVpbnZlbnQgcGFy
dCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1
ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNHUCgpID8gQjM6
OkludDY0IDogQjM6OkRvdWJsZSwgMCk7CisgICAgICAgICAgICBwYXRjaC0+YXBwZW5kKGR1bW15
VmFsdWUsIHRtcC5yZXApOworICAgICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtpbmQoKSkgewor
ICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcC50bXApOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAg
IC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2FudCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2
MyBhbmQgZjMyL2Y2NAorICAgICAgICAgICAgICAgIHBhdGNoLT5lYXJseUNsb2JiZXJlZCgpLmNs
ZWFyKHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0
bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCB0bXAucmVwLnJlZygp
KTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcCh0bXAucmVwLnJlZygpKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6
U3RhY2tBcmd1bWVudDogeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2Fu
dCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2MyBhbmQgZjMyL2Y2NAorICAgICAgICAg
ICAgICAgIGF1dG8gYXJnID0gQXJnOjpjYWxsQXJnKHRtcC5yZXAub2Zmc2V0RnJvbVNQKCkpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUg
OiBNb3ZlRG91YmxlLCB0bXAudG1wLCBhcmcpOworICAgICAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXRjaC0+cmVz
dWx0Q29uc3RyYWludC5pc1JlZygpKQorICAgICAgICAgICAgcGF0Y2gtPmxhdGVDbG9iYmVyZWQo
KS5jbGVhcihwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHBhdGNoLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKGdwcigpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0
Y2gtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoZnByKCkpOworCisgICAgICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICAgICAgYmFz
aWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgICAgICBpZiAocmVzdWx0TW92KSB7
CisgICAgICAgICAgICB2YWxpZGF0ZUluc3QocmVzdWx0TW92KTsKKyAgICAgICAgICAgIGJhc2lj
QmxvY2stPmFwcGVuZChXVEZNb3ZlKHJlc3VsdE1vdikpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5jaCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZv
aWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYgZW1pdEJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBn
ZW5lcmF0b3IpCisgICAgeworICAgICAgICAvLyBXZSBmYWlsIGFsb25nIHRoZSAidHJ1dGh5IiBl
ZGdlIG9mICdicmFuY2gnCisKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZhaWxlZCA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgICAgICAKKyAgICAgICAgZW1pdEJyYW5jaCgpOworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWlsZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
YXV0byogZmFpbGVkUGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAg
ICBmYWlsZWRQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1p
dFBhdGNocG9pbnQoZmFpbGVkLCBmYWlsZWRQYXRjaHBvaW50LCBUbXAoKSk7CisgICAgICAgIGFw
cGVuZChmYWlsZWQsIE9vcHMpOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5B
cmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEZ1bmMgZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgZW1pdENDYWxsKG1fY3VycmVudEJsb2NrLCBmdW5jLCByZXN1
bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2lj
QmxvY2sqIGJsb2NrLCBGdW5jIGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAg
ICB7CisgICAgICAgIEIzOjpUeXBlIHJlc3VsdFR5cGUgPSBCMzo6Vm9pZDsKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdFR5cGUgPSByZXN1bHQuaXNHUCgpID8gQjM6Oklu
dDY0IDogQjM6OkRvdWJsZTsKKworICAgICAgICBhdXRvIG1ha2VEdW1teVZhbHVlID0gWyZdIChU
bXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmlzR1AoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkludDY0LCAwKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6RG91
YmxlLCAwKTsKKyAgICAgICAgfTsKKworICAgICAgICBCMzo6VmFsdWUqIGR1bW15RnVuYyA9IG1f
cHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oZnVuYykpOworICAgICAgICBCMzo6VmFsdWUqIG9yaWdpbiA9IG1fcHJvYy5hZGQ8
QjM6OkNDYWxsVmFsdWU+KHJlc3VsdFR5cGUsIEIzOjpPcmlnaW4oKSwgQjM6OkVmZmVjdHM6Om5v
bmUoKSwgZHVtbXlGdW5jLCBtYWtlRHVtbXlWYWx1ZSh0aGVBcmdzKS4uLik7CisKKyAgICAgICAg
SW5zdCBpbnN0KENDYWxsLCBvcmlnaW4pOworCisgICAgICAgIFRtcCBjYWxsZWUgPSBncHIoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
ZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQocmVzdWx0KTsKKworICAgICAgICBmb3IgKFRtcCB0bXAgOiBWZWN0b3I8VG1wLCBzaXpl
b2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZCh0bXApOworCisgICAgICAgIGJsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAg
fQorCisgICAgc3RhdGljIEIzOjpBaXI6Ok9wY29kZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0
eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6
STMyOgorICAgICAgICAgICAgcmV0dXJuIE1vdmUzMjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6
CisgICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAg
ICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisg
ICAgdm9pZCBlbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmln
aW4pOworCisgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7
CisgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVP
cFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50
MzJfdCBvZmZzZXQpOworCisgICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSYgZHN0
LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlz
dCYgc3RhY2spOworCisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoQjM6Ok9wY29kZSwg
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOworCisgICAgaW50MzJf
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlw
ZSYsIHVpbnQzMl90KTsKKworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFz
aWNCbG9jayosIFRtcCk7CisgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7
IE5vLCBZZXMgfTsKKyAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFRtcCBpbnN0YW5j
ZSwgQmFzaWNCbG9jayopOworCisgICAgQjM6Ok9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzogV2Ug
bmVlZCB0byBtYWtlIGFuIEFpcjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGZy
b20gQjMgY29kZS4KKworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJz
ZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAg
ICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07
CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsg
VUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07
CisKKyAgICBCMzo6UHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQ29kZSYgbV9jb2RlOworICAgIEJh
c2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1f
cm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wLCBUeXBlPj4g
bV9sb2NhbHM7CisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24g
aW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIEdQUlJl
ZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fbWVtb3J5
U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2Ug
fTsKKworICAgIFRtcCBtX2luc3RhbmNlVmFsdWU7IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29y
IGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4g
dXNlZC4KKyAgICBib29sIG1fdXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9OworICAgIFRtcCBp
bnN0YW5jZVZhbHVlKCkKKyAgICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUgPSB0cnVl
OworICAgICAgICByZXR1cm4gbV9pbnN0YW5jZVZhbHVlOworICAgIH0KKworICAgIHVpbnQzMl90
IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OworCisgICAgQjM6OlBhdGNocG9pbnRTcGVj
aWFsKiBtX3BhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworfTsKKworY29uc3QgVG1wIEFp
cklSR2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24gPSBUbXAoKTsKKworLy8gTWVtb3J5IGFjY2Vz
c2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMg
dGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK2ludDMyX3QgQWlySVJHZW5l
cmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMy
X3Qgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
IHsKKyAgICAgICAgVG1wIHByZXZpb3VzUHRyID0gcHRyOworICAgICAgICBwdHIgPSBncHIoKTsK
KyAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmJpZ0ltbShvZmZzZXQpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgY29uc3Rh
bnQsIHByZXZpb3VzUHRyLCBwdHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0
dXJuIG9mZnNldDsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ssIFRtcCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2Fs
bEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0
Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dElu
c3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3Rv
cmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1
c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVn
aXN0ZXIuCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOwor
ICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVj
dHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5n
ZTo6dG9wKCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7
CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFI7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7CisgICAgICAg
IGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICB9
KTsKKyAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24q
IGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlKQorICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY29t
cGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5j
dGlvbkluZGV4KQorICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHByb2NlZHVy
ZSkKKyAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQorICAgICwgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKK3sKKyAgICBtX2N1cnJlbnRCbG9jayA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fcm9vdEJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisK
KyAgICAvLyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUg
aWYgdGhlcmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxl
ciBmb3Igbm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIz
CisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CisgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CisK
KyAgICBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyOworICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBt
X2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKworICAgIGlmICht
b2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICBBU1NFUlQoIXBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgbV9tZW1vcnlTaXplR1BS
ID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9y
IChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJl
Z2lzdGVyKTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAgICBU
aHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRp
b24pOworCisgICAgaWYgKGluZm8ubWVtb3J5KSB7CisgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91
bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQ
UikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIEludmFsaWRHUFJSZWcgPT0g
cGlubmVkR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9m
Qm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21v
ZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAg
ICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFu
IGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRpb24gY2hlY2sgYmVjYXVzZSB0aGV5IGNh
biByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAgICAgICAgICAgLy8gb3V0LW9m
LWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRo
ZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0
aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigp
LnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRzKDEpOworCisgICAgR1BSUmVnIGNvbnRleHRJbnN0
YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigp
LnByb2xvZ3VlU2NyYXRjaCgyKSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKworICAgIFJl
ZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVT
aGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBjb2RlLmVtaXRE
ZWZhdWx0UHJvbG9ndWUoaml0KTsKKworICAgICAgICB7CisgICAgICAgICAgICBHUFJSZWcgY2Fs
bGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOwor
ICAgICAgICAgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbY29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0
aW9uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICBq
aXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBDaGVja2Vk
PGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtUGFyZW50Q2hlY2tTaXplID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgMTAyNCk7CisgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBleHRyYUZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIHN0ZDo6bWF4PHVpbnQzMl90PigKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgZm9yIGZ1bmN0aW9ucyB0aGF0
IGFyZSB0ZXJtaW5hbCBub2RlcyBpbiB0aGUgY2FsbAorICAgICAgICAgICAgICAgIC8vIHRyZWUs
IChlLmcgdGhleSBkb24ndCBtYWtlIGFueSBjYWxscykgYW5kIGhhdmUgYSBzbWFsbCBlbm91Z2gg
ZnJhbWUgc2l6ZS4gVGhpcyB3b3JrcyBieQorICAgICAgICAgICAgICAgIC8vIGhhdmluZyBhbnkg
c3VjaCB0ZXJtaW5hbCBub2RlIGhhdmUgaXRzIHBhcmVudCBjYWxsZXIgaW5jbHVkZSBzb21lIGV4
dHJhIHNpemUgaW4gaXRzCisgICAgICAgICAgICAgICAgLy8gb3duIGNoZWNrIGZvciBpdC4gVGhl
IGdvYWwgaGVyZSBpcyB0d29mb2xkOgorICAgICAgICAgICAgICAgIC8vIDEuIEVtaXQgbGVzcyBj
b2RlLgorICAgICAgICAgICAgICAgIC8vIDIuIFRyeSB0byBzcGVlZCB0aGluZ3MgdXAgYnkgc2tp
cHBpbmcgc3RhY2sgY2hlY2tzLgorICAgICAgICAgICAgICAgIG1pbmltdW1QYXJlbnRDaGVja1Np
emUsCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hl
Y2tzIGluIHRoZSBXYXNtIC0+IEVtYmVkZGVyIGNhbGwgSUMgc3R1Yi4gU2luY2UgdGhlc2Ugd2ls
bAorICAgICAgICAgICAgICAgIC8vIHNwaWxsIGFsbCBhcmd1bWVudHMgdG8gdGhlIHN0YWNrLCB3
ZSBlbnN1cmUgdGhhdCBhIHN0YWNrIGNoZWNrIGhlcmUgY292ZXJzIHRoZQorICAgICAgICAgICAg
ICAgIC8vIHN0YWNrIHRoYXQgc3VjaCBhIHN0dWIgd291bGQgdXNlLgorICAgICAgICAgICAgICAg
IChDaGVja2VkPHVpbnQzMl90PihtX21heE51bUpTQ2FsbEFyZ3VtZW50cykgKiBzaXplb2YoUmVn
aXN0ZXIpICsganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5oZWFkZXJTaXplSW5CeXRlcygpKS51bnNh
ZmVHZXQoKQorICAgICAgICAgICAgKSk7CisgICAgICAgICAgICBjb25zdCBpbnQzMl90IGNoZWNr
U2l6ZSA9IG1fbWFrZXNDYWxscyA/ICh3YXNtRnJhbWVTaXplICsgZXh0cmFGcmFtZVNpemUpLnVu
c2FmZUdldCgpIDogd2FzbUZyYW1lU2l6ZS51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIGJvb2wg
bmVlZFVuZGVyZmxvd0NoZWNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBP
cHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZs
b3dDaGVjayA9IG1fbWFrZXNDYWxscyB8fCB3YXNtRnJhbWVTaXplID49IG1pbmltdW1QYXJlbnRD
aGVja1NpemUgfHwgbmVlZFVuZGVyZmxvd0NoZWNrOworCisgICAgICAgICAgICAvLyBUaGlzIGFs
bG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1l
IHNpemUgaXMgd2l0aGluCisgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVp
ciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgorICAgICAgICAgICAg
aWYgKG5lZWRzT3ZlcmZsb3dDaGVjaykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2go
MCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpOworCisgICAgICAgICAgICAgICAgaWYgKENvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4
dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgb3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRV
bmRlcmZsb3dDaGVjaykpCisgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQu
YnJhbmNoUHRyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2gxLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNo
UHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gxLCBzY3JhdGNoMikpOworICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJv
d1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAm
JiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxv
dyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRv
IGJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0
YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBX
ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBw
YXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBz
dGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9y
RW50cnlwb2ludCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGdwcigpOwor
ICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2Ug
aW5zdGFuY2UgdmFsdWUuCisgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNl
KSwgbV9pbnN0YW5jZVZhbHVlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVl
ID0gVG1wKGNvbnRleHRJbnN0YW5jZSk7CisKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7
CisgICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Cisg
ICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2
NDoKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0geyBncHIoKSwgdHlwZSB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2
NDoKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0geyBmcHIoKSwgdHlwZSB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgd2FzbUNhbGxpbmdDb252ZW50
aW9uQWlyKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUsIFsmXSAoY29uc3QgQXJnJiBhcmcsIHVu
c2lnbmVkIGkpIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAg
ICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCBhcmcsIG1f
bG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
Okk2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlRmxvYXQsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfSk7CisKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6OmZ1
bmN0aW9uRW50cnlEZWNyZW1lbnQoKSwgQjM6Ok9yaWdpbigpKTsKK30KKwordm9pZCBBaXJJUkdl
bmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBt
ZW1vcnksIFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVzdG9yZVdh
c21Db250ZXh0SW5zdGFuY2UoYmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlmIChyZXN0b3JlQ2Fj
aGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CisgICAgICAg
IC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3
aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxJbnN0YW5jZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFj
a0xpbWl0KCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAiIik7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0
dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChB
cmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCks
IEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgICAgIGFwcGVu
ZChibG9jaywgTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNl
dE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSwgdGVtcCk7CisgICAgICAgIGFwcGVuZChi
bG9jaywgTW92ZSwgQXJnOjphZGRyKHRlbXApLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2Nr
LCBNb3ZlLCB0ZW1wLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoISFtZW1vcnkpIHsKKyAg
ICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCk7CisgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJzOworICAgICAgICBj
bG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOworICAgICAgICBmb3Ig
KGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnMpCisgICAgICAgICAgICBjbG9i
YmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOworCisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9
IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgICAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihjbG9iYmVycyk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5u
ZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRS
ZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdz
ID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVn
cy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZz
ZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2Fs
Y3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBh
cmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVt
b3J5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIs
IHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQ
YXRjaHBvaW50KHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lk
IEFpcklSR2VuZXJhdG9yOjplbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEV4
Y2VwdGlvblR5cGUgdHlwZSkKK3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgIGF1dG8ganVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBqaXQu
YWRkTGlua1Rhc2soW2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93
RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxv
dz4gdG90YWxCeXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCArPSBt
X2xvY2Fscy5zaXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NPTVBJ
TEVfRkFJTF9JRigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBDaGVj
a2VkU3RhdGU6OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGxv
Y2FscyIpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBj
YXNlIFR5cGU6Okk2NDogeworICAgICAgICAgICAgVG1wIGxvY2FsID0gZ3ByKCk7CisgICAgICAg
ICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAg
ICAgIGFwcGVuZChYb3I2NCwgbG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDog
eworICAgICAgICAgICAgVG1wIGxvY2FsID0gZnByKCk7CisgICAgICAgICAgICBtX2xvY2Fscy51
bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIFRtcCB0ZW1wID0g
Z3ByKCk7CisgICAgICAgICAgICAvLyBJRUVFIDc1NCAiMCIgaXMganVzdCBpbnQzMi82NCB6ZXJv
LgorICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgICAgIGFw
cGVuZCh0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwg
dGVtcCwgbG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFM6
IElzIHRoaXMgY29ycmVjdD8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZh
bHVlKSAtPiBFeHByZXNzaW9uVHlwZQoreworICAgIFRtcCByZXN1bHQ7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAg
IHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUp
LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNl
IFR5cGU6OkY2NDogeworICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgVG1wIHRtcCA9
IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCB0bXApOwor
ICAgICAgICBhcHBlbmQodHlwZSA9PSBUeXBlOjpGMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0
VG9Eb3VibGUsIHRtcCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworCit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50
cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fbG9jYWxzLnNpemUoKSA9PSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
KTsgLy8gV2UgaGFuZGxlIGFyZ3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xv
Y2Fsc1tpbmRleF0uZmlyc3QpOworICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XS5maXJzdC5p
c0dQKCkgPyBncHIoKSA6IGZwcigpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9s
b2NhbHNbaW5kZXhdLnNlY29uZCksIG1fbG9jYWxzW2luZGV4XS5maXJzdCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJs
ZSA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0
b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6VW5yZWFjaGFibGUpOworICAgIH0pOworICAgIHVucmVhY2hhYmxlLT5lZmZlY3Rz
LnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBlbWl0UGF0Y2hwb2ludCh1bnJlYWNoYWJsZSwgVG1wKCkp
OworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1v
cnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCosIEluc3RhbmNlKiwg
aW50MzJfdCkgPSBbXSAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGludDMy
X3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJh
bWUoY2FsbEZyYW1lKTsKKworICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0
dXJuIC0xOworCisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5KCktPmdyb3co
UGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWls
UmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFp
bFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdy
b3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7Cisg
ICAgfTsKKworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRDQ2FsbChncm93TWVtb3J5LCBy
ZXN1bHQsIFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIGluc3RhbmNlVmFsdWUoKSwg
ZGVsdGEpOworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRC
bG9jayk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRD
dXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihu
dWxscHRyKS0+c2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9u
IHRoaXMgc2l6ZSIpOworCisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBUbXAgdGVtcDEgPSBn
cHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQo
TW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5U2l6ZSgpKSwgdGVtcDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVl
ID0gMTY7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwg
c2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3Jy
ZWN0LiIpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSgxNiksIHJlc3VsdCk7CisgICAgYWRk
U2hpZnQoVXJzaGlmdDY0LCB0ZW1wMSwgcmVzdWx0LCByZXN1bHQpOworICAgIGFwcGVuZChNb3Zl
MzIsIHJlc3VsdCwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOwor
ICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnNlY29uZCksIHZh
bHVlLCBtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9i
YWxzW2luZGV4XS50eXBlOworCisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAg
IFRtcCB0ZW1wID0gZ3ByKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkds
b2JhbHMoKSksIHRlbXApOworCisgICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90
PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9y
bShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBw
ZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJl
c3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQo
QWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVl
VHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXApLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIHRlbXAg
PSBncHIoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3Rh
bmNlOjpvZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwg
QXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwg
dGVtcCk7CisKKyAgICBUeXBlIHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKwor
ICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhG
b3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5
cGUodHlwZSksIHZhbHVlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0
ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFy
Zzo6YWRkcih0ZW1wKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFp
cklSR2VuZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBzaXplT2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7
CisgICAgVU5VU0VEX1BBUkFNKHNpemVPZk9wZXJhdGlvbik7IC8vIE9PUFMKKworICAgIHN3aXRj
aCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTIQorCisgICAgICAgIC8v
IFdlJ3JlIG5vdCB1c2luZyBzaWduYWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9y
ZSBjaGVjayB0aGF0IG5vIG1lbW9yeSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkg
c2l6ZS4KKyAgICAgICAgLy9BU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgLy9BU1NF
UlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICAgICAgLy9tX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHNDaGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBtX21lbW9yeVNpemVHUFIsIHBvaW50ZXIsIHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCAtIDEp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZzogeworICAgICAgICAvLyBXZSd2ZSB2aXJ0dWFsbHkgbWFwcGVkIDRHaUIrcmVkem9uZSBmb3Ig
dGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJs
ZSwgY29udGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50XSwKKyAgICAgICAgLy8gYW5kIGV2
ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJm
b3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBX
ZWJBc3NlbWJseSByZWdpc3RlcgorICAgICAgICAvLyBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJp
dC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlciArIG9mZnNldCBhY2Nlc3NlcyBwZXJmb3Jt
IHRoZSBhZGRpdGlvbiBpbiA2NC1iaXQgd2hpY2ggY2FuIHB1c2ggYW4gYWNjZXNzIGFib3ZlCisg
ICAgICAgIC8vIHRoZSAzMi1iaXQgbGltaXQgKHRoZSBvZmZzZXQgaXMgdW5zaWduZWQgMzItYml0
KS4gVGhlIHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxsIG9mZnNldHMsIGFuZCB3ZSdsbCBl
eHBsaWNpdGx5IGJvdW5kcyBjaGVjayBhbnkKKyAgICAgICAgLy8gcmVnaXN0ZXIgKyBsYXJnZSBv
ZmZzZXQgYWNjZXNzLiBXZSBkb24ndCB0aGluayB0aGlzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyZXF1
ZW50bHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIHRoYXQgcmVnaXN0
ZXIgKyBsYXJnZSBvZmZzZXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNlIHRoYXQn
cyB0ZWNobmljYWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZyB0aGUK
KyAgICAgICAgLy8gUFJPVF9OT05FIHJlZ2lvbiwgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBh
IHNtYWxsZXIgaW1tZWRpYXRlIGJlY2F1c2UgaXQgY2FuIGNvZGVnZW5zIGJldHRlci4gV2Uga25v
dyB0aGF0IGFueXRoaW5nIGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAgLy8gdGhhbiB0aGUg
ZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0
aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVkICdtYXhpbXVtJyB0aGVuIHdlIHN0
aWxsIGtub3cgdGhhdAorICAgICAgICAvLyBhbnkgYWNjZXNzIGVxdWFsIHRvIG9yIGdyZWF0ZXIg
dGhhbiA0R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBhZGQgdGhlIHJlZHpvbmUuCisgICAgICAg
IGlmIChvZmZzZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFMhCisgICAgICAgICAg
ICAvL3NpemVfdCBtYXhpbXVtID0gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkgPyBtX2luZm8ubWVt
b3J5Lm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpOworICAgICAgICAgICAgLy9tX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFdhc21Cb3VuZHND
aGVja1ZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2ludGVyLCBzaXplT2ZPcGVyYXRpb24gKyBv
ZmZzZXQgLSAxLCBtYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgfQorCisgICAgVG1wIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIHBvaW50
ZXIsIHJlc3VsdCk7CisgICAgYXBwZW5kKEFkZDY0LCBUbXAobV9tZW1vcnlCYXNlR1BSKSwgcmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9h
ZE9wKExvYWRPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhV
OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6Cisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDE2VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgIHJldHVy
biAyOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQzMlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgIGNhc2Ug
TG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lu
bGluZSBUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAgICBpbnQzMl90IG9mZnNl
dCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAg
aW1tVG1wOworICAgIFRtcCBuZXdQdHI7CisgICAgVG1wIHJlc3VsdDsKKworICAgIGF1dG8gbG9h
ZEFyZyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQs
IEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZkxvYWRPcChvcCkpKSkKKyAgICAgICAgICAgIHJldHVy
biBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1wID0gZ3ByKCk7Cisg
ICAgICAgIG5ld1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
b2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIHBvaW50ZXIs
IG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsKKyAgICB9OworCisg
ICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CisgICAg
ICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDhTaWduZWRFeHRlbmRUbzMy
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAg
ICBhcHBlbmQoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAg
ICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogeworICAgICAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4LCBsb2FkQXJnKCksIHJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDhVOiB7CisgICAgICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90aGVyIHpleHQgaGVyZT8KKyAg
ICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOCwgbG9hZEFyZygpLCBy
ZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okkz
MkxvYWQxNlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2Fk
MTZTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogeworICAgICAgICByZXN1
bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQs
IHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDE2VTogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExv
YWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVk
IGFub3RoZXIgemV4dCBoZXJlPworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBw
ZW5kKExvYWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkMzJVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZTMy
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2ln
bkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTW92ZSwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIGxvYWRBcmcoKSwgcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2Fk
OiB7CisgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwg
bG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50
MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci5pc0dQ
KCkpOworCisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBz
aXplT2ZMb2FkT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMg
aXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBz
byB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9u
LiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIz
OjpWb2lkKTsKKyAgICAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2gsIFRtcCgpKTsKKworICAgICAgICAvLyBXZSB3b24ndCByZWFjaCBoZXJlLCBzbyB3ZSBqdXN0
IHBpY2sgYSByYW5kb20gcmVnLgorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQx
NlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToK
KyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAg
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGdw
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9h
ZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSBlbHNlCisg
ICAgICAgIHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisKKyAgICByZXR1
cm4geyB9OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBv
cCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4
OgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlODoKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
NjRTdG9yZTE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJT
dG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3RvcmVP
cFR5cGU6OkYzMlN0b3JlOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFN0b3JlT3BUeXBl
OjpJNjRTdG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKwor
aW5saW5lIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9m
ZnNldCkKK3sKKyAgICBpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9p
bnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAgaW1tVG1wOworICAgIFRtcCBuZXdQdHI7CisKKyAg
ICBhdXRvIHN0b3JlQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJG
b3JtKG9mZnNldCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mU3RvcmVPcChvcCkpKSkKKyAgICAg
ICAgICAgIHJldHVybiBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1w
ID0gZ3ByKCk7CisgICAgICAgIG5ld1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0ob2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1U
bXAsIHBvaW50ZXIsIG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsK
KyAgICB9OworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAgICAgIGFwcGVuZChT
dG9yZTgsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2
OgorICAgICAgICBhcHBlbmQoU3RvcmUxNiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkkzMlN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZTMyLCB2YWx1ZSwgc3RvcmVB
cmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3Jl
OgorICAgICAgICBhcHBlbmQoTW92ZSwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1v
dmVGbG9hdCwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHZhbHVl
LCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnN0b3JlKFN0b3Jl
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
dWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBvaW50ZXIu
aXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNl
dCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2gg
dGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRpb24gZXJy
b3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVudGltZSBleGNl
cHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBhdXRvKiB0aHJvd0V4Y2VwdGlvbiA9IGFk
ZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbi0+c2V0R2VuZXJh
dG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworICAg
ICAgICBlbWl0UGF0Y2hwb2ludCh0aHJvd0V4Y2VwdGlvbiwgVG1wKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBlbWl0U3RvcmVPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRl
ciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZhbHVlLCBvZmZzZXQpOworCisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVy
bywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VS
VChub25aZXJvLmlzR1AoKSA9PSB6ZXJvLmlzR1AoKSk7CisgICAgcmVzdWx0ID0gbm9uWmVyby5p
c0dQKCkgPyBncHIoKSA6IGZwcigpOworICAgIGlmIChub25aZXJvLmlzR1AoKSkKKyAgICAgICAg
YXBwZW5kKE1vdmUsIG5vblplcm8sIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmQo
TW92ZURvdWJsZSwgbm9uWmVybywgcmVzdWx0KTsKKworICAgIEJhc2ljQmxvY2sqIGlzWmVybyA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29k
ZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzWmVybywgY29udGludWF0aW9uKTsKKworICAgIGlmICh6
ZXJvLmlzR1AoKSkKKyAgICAgICAgYXBwZW5kKGlzWmVybywgTW92ZSwgemVybywgcmVzdWx0KTsK
KyAgICBlbHNlCisgICAgICAgIGFwcGVuZChpc1plcm8sIE1vdmVEb3VibGUsIHplcm8sIHJlc3Vs
dCk7CisgICAgYXBwZW5kKGlzWmVybywgSnVtcCk7CisgICAgaXNaZXJvLT5zZXRTdWNjZXNzb3Jz
KGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaWVyVXBDaGVj
ayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbiBvcmlnaW4pCit7CisgICAgVU5V
U0VEX1BBUkFNKG9yaWdpbik7IC8vIE9PUFMKKworICAgIGlmICghbV90aWVyVXApCisgICAgICAg
IHJldHVybjsKKworICAgIFRtcCBjb3VudGRvd25QdHIgPSBncHIoKTsKKyAgICBUbXAgb2xkQ291
bnRkb3duID0gZ3ByKCk7CisgICAgVG1wIG5ld0NvdW50ZG93biA9IGdwcigpOworCisgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVw
KSksIGNvdW50ZG93blB0cik7CisgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNvdW50ZG93
blB0ciksIG9sZENvdW50ZG93bik7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRJ
bW1Gb3JtKGRlY3JlbWVudENvdW50KSk7CisgICAgYXBwZW5kKE1vdmUzMiwgb2xkQ291bnRkb3du
LCBuZXdDb3VudGRvd24pOworICAgIGFwcGVuZChTdWIzMiwgQXJnOjppbW0oZGVjcmVtZW50Q291
bnQpLCBuZXdDb3VudGRvd24pOworICAgIGFwcGVuZChNb3ZlMzIsIG5ld0NvdW50ZG93biwgQXJn
OjphZGRyKGNvdW50ZG93blB0cikpOworCisgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50
KEIzOjpWb2lkKTsKKyAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgZWZmZWN0
cy53cml0ZXMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaC0+ZWZmZWN0cyA9IGVm
ZmVjdHM7CisKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCB0aWVyVXAgPSBqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCB0aWVyVXBSZXN1bWUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICBw
YXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
dGllclVwLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhUGFk
ZGluZ0J5dGVzID0gMDsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvU3BpbGwg
PSB7IH07CisgICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsLmFkZChHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJl
Z2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFQYWRkaW5n
Qnl0ZXMpOworCisgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG1fZnVuY3Rpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAg
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNr
Qnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKKyAg
ICAgICAgICAgIGppdC5qdW1wKHRpZXJVcFJlc3VtZSk7CisKKyAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPE5vUHRyVGFnPihjYWxsKSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRo
dW5rczo6c2luZ2xldG9uKCkuc3R1Yih0cmlnZ2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOworCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCksIG5ld0NvdW50ZG93biwgb2xkQ291bnRkb3duKTsK
K30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29w
KFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsK
KworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhi
b2R5KTsKKworICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKKyAgICBlbWl0VGllclVwQ2hlY2so
VGllclVwQ291bnQ6Omxvb3BEZWNyZW1lbnQoKSwgb3JpZ2luKCkpOworCisgICAgcmV0dXJuIENv
bnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxv
Y2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6
Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQor
eworICAgIHJldHVybiBDb250cm9sRGF0YShCMzo6T3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9y
VHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX2NvZGUuYWRkQmxvY2soKSk7
Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkQmxv
Y2soVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBz
aWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpCbG9jaywgbV9jb2Rl
LmFkZEJsb2NrKCkpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIAorICAgIC8v
IFdhc20gYm9vbHMgYXJlIGkzMi4KKyAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAg
bV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFrZW4sIG5vdFRha2VuKTsKKworICAgIG1f
Y3VycmVudEJsb2NrID0gdGFrZW47CisgICAgcmVzdWx0ID0gQ29udHJvbERhdGEob3JpZ2luKCks
IHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OklmLCBjb250aW51
YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgY3Vy
cmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
Y3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgQVNTRVJUKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgIG1fY3VycmVu
dEJsb2NrID0gZGF0YS5zcGVjaWFsOworICAgIGRhdGEuY29udmVydElmVG9CbG9jaygpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBD
b250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6ZSgpIDw9IDEpOwor
ICAgIGlmIChyZXR1cm5WYWx1ZXMuc2l6ZSgpKSB7CisgICAgICAgIFRtcCByZXR1cm5WYWx1ZUdQ
UiA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIFRtcCByZXR1cm5WYWx1
ZUZQUiA9IFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIHN3aXRjaCAoZGF0
YS5zaWduYXR1cmUoKSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGFw
cGVuZChNb3ZlMzIsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAg
ICAgYXBwZW5kKFJldDMyLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgcmV0dXJuVmFs
dWVzWzBdLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0NjQsIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoK
KyAgICAgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFs
dWVGUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBh
cHBlbmQoTW92ZURvdWJsZSwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAg
ICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhcHBlbmQoUmV0Vm9pZCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworLy8gTk9URTogQWxsIGJyYW5jaGVzIGluIFdhc20gYXJl
IG9uIDMyLWJpdCBpbnRzCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9s
RGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRo
QmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJlc3VsdEZvckJyYW5jaCgpKTsKKworICAgIEJhc2lj
QmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICBpZiAoY29u
ZGl0aW9uKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9uKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBw
ZW5kKEp1bXApOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQp
OworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0
YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHRGb3JCcmFuY2goKSk7
CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0
LnJlc3VsdEZvckJyYW5jaCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0
cy5zaXplKCk7ICsraSkgeworICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSB0YXJnZXRzW2ld
LT50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShpKSwgY29uc3RhbnQpOworICAgICAgICBh
cHBlbmQoQnJhbmNoMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBjb25z
dGFudCwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
dGFyZ2V0LCBjb250aW51YXRpb24pOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGlu
dWF0aW9uOworICAgIH0KKworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+
c2V0U3VjY2Vzc29ycyhkZWZhdWx0VGFyZ2V0LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpOworCisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJv
bEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CisK
KyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucmVzdWx0KTsK
KyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0
YS5jb250aW51YXRpb24pOworCisgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkp
OworfQorCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJv
bEVudHJ5JiBlbnRyeSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBkYXRh
ID0gZW50cnkuY29udHJvbERhdGE7CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVh
dGlvbjsKKworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CisgICAgICAg
IGFwcGVuZChkYXRhLnNwZWNpYWwsIEp1bXApOworICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1
Y2Nlc3NvcnMobV9jdXJyZW50QmxvY2spOworICAgIH0KKworICAgIGZvciAoVG1wIHJlc3VsdCA6
IGRhdGEucmVzdWx0KQorICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBl
bmQocmVzdWx0KTsKKworICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNvZGUgYWZ0
ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhlcmUuCisg
ICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCisgICAgICAgIHJldHVy
biBhZGRSZXR1cm4oZGF0YSwgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsK
KworICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWdu
YXR1cmUucmV0dXJuVHlwZSgpOworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2Ug
VHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2Fz
ZSBUeXBlOjpJNjQ6CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzOworCisgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CisgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRz
ID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90
PihhcmdzLnNpemUoKSkpOworCisgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtl
ZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBp
bXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAgIFRt
cCB0YXJnZXRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICAvLyBPT1BTOiBUcnkgdG8gaXNlbCB0
aGlzIGJldHRlcgorICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oSW5zdGFuY2U6Om9m
ZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpLCB0YXJnZXRJbnN0YW5jZSk7Cisg
ICAgICAgIGFwcGVuZChBZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCB0YXJnZXRJbnN0YW5jZSk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGFyZ2V0SW5zdGFuY2UpLCB0YXJnZXRJbnN0
YW5jZSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworCisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybyksIHRhcmdldEluc3RhbmNlLCB0YXJnZXRJbnN0YW5jZSk7CisgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVy
QmxvY2spOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9i
YmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2
aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1
bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tp
bmcuCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworCisgICAgICAgICAgICBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3Ms
IFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgICAgIHBhdGNo
QXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0
aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAg
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGVtaXRQYXRjaHBv
aW50KGlzV2FzbUJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7
CisgICAgICAgICAgICBhcHBlbmQoaXNXYXNtQmxvY2ssIEp1bXApOworICAgICAgICAgICAgaXNX
YXNtQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRtcCBqdW1wRGVzdGluYXRpb24gPSBncHIoKTsKKyAgICAgICAg
ICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKEluc3RhbmNlOjpv
ZmZzZXRPZldhc21Ub0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSksIGp1bXBEZXN0aW5hdGlv
bik7CisgICAgICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBBZGQ2NCwgaW5zdGFuY2VW
YWx1ZSgpLCBqdW1wRGVzdGluYXRpb24pOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJC
bG9jaywgTW92ZSwgQXJnOjphZGRyKGp1bXBEZXN0aW5hdGlvbiksIGp1bXBEZXN0aW5hdGlvbik7
CisKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBl
KHJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlu
bmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQg
PSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwg
cGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4K
KyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2Fs
bGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmcpKTsKKworICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRj
aEFyZ3M7CisgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKGp1bXBEZXN0aW5hdGlvbik7CisK
KyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUs
IHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3MsIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVw
IHJlcCkgeworICAgICAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
W3JldHVyblR5cGVdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIGppdC5jYWxs
KHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRh
Zyk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZW1pdFBhdGNocG9pbnQoaXNFbWJl
ZGRlckJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7CisgICAg
ICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBKdW1wKTsKKyAgICAgICAgICAgIGlzRW1i
ZWRkZXJCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworICAgICAgICB9CisKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgICAgIC8vIFRoZSBjYWxs
IGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBv
ciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCisgICAgICAgIHJlc3RvcmVXZWJBc3Nl
bWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1v
cnksIGluc3RhbmNlVmFsdWUoKSwgY29udGludWF0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7
CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisKKyAgICAgICAgVmVj
dG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIGFyZ3Ms
IFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgcGF0Y2hBcmdz
LmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAgICB9KTsKKworICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFw
cGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2Fs
bCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwg
V1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFy
Z3MudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBh
cmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworICAgIC8vIE5vdGU6IGNh
bGwgaW5kaXJlY3QgY2FuIGNhbGwgZWl0aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJlY2F1c2UKKyAgICAvLyBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiBpcyBsaWtlIGNhbGxpbmcgaW50byB0aGUgZW1iZWRkZXIsIHdlIGNvbnNlcnZhdGl2
ZWx5IGFzc3VtZSBhbGwgY2FsbCBpbmRpcmVjdHMKKyAgICAvLyBjYW4gYmUgdG8gdGhlIGVtYmVk
ZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sgY2FsY3VsYXRpb24uCisgICAgbV9tYXhOdW1KU0NhbGxB
cmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyID0gZ3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVy
ID0gZ3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0
aCA9IGdwcigpOworICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRk
ckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mRnVuY3Rp
b25zKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxp
ZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpLCBCMzo6V2lkdGg2NCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZM
ZW5ndGgoKSwgQjM6OldpZHRoNjQpKTsKKworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRy
KGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSksIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJMZW5ndGgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxh
YmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSwgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpLCBp
bnN0YW5jZXNCdWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92ZTMyLCBjYWxs
ZWVJbmRleCwgY2FsbGVlSW5kZXgpOworCisgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBs
b29raW5nIGZvciBpcyB2YWxpZC4KKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5k
KEJyYW5jaDMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNh
bGxlZUluZGV4LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc0NhbGxJbmRpcmVjdCk7CisgICAgfSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxs
ZWVDb2RlID0gZ3ByKCk7CisgICAgeworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWdu
YXR1cmVJbmRleCA9IGdwcigpOworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhl
IHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1v
dmUsIEFyZzo6aW1tKHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxl
ZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2Fs
bGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXIsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29k
ZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVlIGNvZGUuCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0
aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBp
ZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5v
dCBpbml0aWFsaXplZC4KKyAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRs
ZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52
YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzcyMTAKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVn
ZW4gYXNzdW1lcyBpNjQiKTsKKyAgICAgICAgLy8gT09QUzogVGhpcyBzZWVtcyBkdW1iIHRvIGRv
IHR3byBjaGVja3MganVzdCBmb3IgYSBuaWNlciBlcnJvciBoZXJlLi4uCisKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChTaWduYXR1cmU6OmludmFsaWRJbmRleCA9PSAwLCAiIik7CisgICAgICAgICAgICBhcHBl
bmQoQnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjYWxs
ZWVTaWduYXR1cmVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6TnVsbFRhYmxlRW50cnkpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBn
cHIoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgVG1wIG5l
d0NvbnRleHRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbmRl
eChpbnN0YW5jZXNCdWZmZXIsIGNhbGxlZUluZGV4LCA4LCAwKSwgbmV3Q29udGV4dEluc3RhbmNl
KTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRvQ29udGV4dFN3
aXRjaCk7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZv
aWQpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Cisg
ICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhp
bmcgd2l0aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Cisg
ICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0gcGFyYW1zWzBdLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1sxXS5ncHIoKTsK
KyAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5
ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIEFTU0VSVChuZXdD
b250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkg
c2l6ZSByZWdpc3RlcgorICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5z
aXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBd
LnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6
ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1v
cnk6OnZvaWQqLgorICAgICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChkb0NvbnRl
eHRTd2l0Y2gsIHBhdGNocG9pbnQsIFRtcCgpLCBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNl
VmFsdWUoKSk7CisgICAgICAgIGFwcGVuZChkb0NvbnRleHRTd2l0Y2gsIEp1bXApOworICAgICAg
ICBkb0NvbnRleHRTd2l0Y2gtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZUNvZGUpLCBjYWxsZWVDb2RlKTsKKworICAgIFR5cGUgcmV0dXJu
VHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7
CisgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6Okkz
MjoKKyAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjMyOgorICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBhdXRvKiBwYXRjaCA9
IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgIHBhdGNoLT5lZmZlY3Rz
LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgcGF0Y2gtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0
cnVlOworICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdp
c3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgLy8gV2Ug
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcgc28KKyAgICAvLyBiZWNhdXNlIHRoZSB3YXNtLT53YXNtIHRo
dW5rIHVuY29uZGl0aW9uYWxseSBvdmVycmlkZXMgdGhlIHNpemUgcmVnaXN0ZXJzLgorICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNt
IHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJz
IGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIx
ODEKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgIFZlY3RvcjxDb25zdHJhaW5l
ZFRtcD4gZW1pdEFyZ3M7CisgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUpOworICAgIHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBh
dGNoLCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgZW1p
dEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgfSk7CisgICAgcGF0Y2gtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9
PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgIH0pOworCisgICAg
ZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIFdURk1vdmUoZW1p
dEFyZ3MpKTsKKworICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdl
YkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1v
cnkuCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9j
ayk7CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeShj
b25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKQor
eworICAgIC8vIE9PUFM6IFdlIGtpbmRhIHdhbnQgdHlwZXMgaGVyZSB0byBkaXN0aW5ndWlzaCBp
MzIvaTY0L2YzMi9mNjQhCisgICAgUkVMRUFTRV9BU1NFUlQoZHN0LmlzR1AoKSA9PSBzb3VyY2Uu
aXNHUCgpKTsKKyAgICBhcHBlbmQoZHN0LmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBzb3Vy
Y2UsIGRzdCk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVz
dWx0KQoreworICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAg
ICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrW3Jlc3Vs
dFN0YWNrLnNpemUoKSAtIDEgLSBpXSk7Cit9CisKKy8vc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Np
b25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBBaXJJUkdlbmVyYXRvcjo6
RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKKy8veworLy8gICAgZGF0YUxvZyhjb21t
YSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKy8vICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lv
biA6IGV4cHJlc3Npb25TdGFjaykKKy8vICAgICAgICBkYXRhTG9nKGNvbW1hLCAqZXhwcmVzc2lv
bik7CisvL30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJv
bEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0
YWNrKQoreworICAgIFVOVVNFRF9QQVJBTShjb250cm9sU3RhY2spOworICAgIFVOVVNFRF9QQVJB
TShleHByZXNzaW9uU3RhY2spOworCisgICAgLy8gT09QUyEKKyAgICAvKgorICAgIGRhdGFMb2dM
bigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgZGF0YUxv
Z0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsKKyAgICBkYXRhTG9n
TG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGRhdGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKKyAgICAg
ICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAgZHVtcEV4cHJlc3Npb25T
dGFjayhjb21tYSwgKmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGV4cHJlc3Npb25TdGFjayA9
ICZjb250cm9sU3RhY2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGRhdGFM
b2dMbigpOworICAgIH0KKyAgICBkYXRhTG9nTG4oKTsKKyAgICAqLworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBCMzo6T3JpZ2luCit7CisgICAgcmV0dXJuIEIzOjpPcmln
aW4oKTsKKyAgICAvL09wY29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUo
KSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKKyAgICAvL0FTU0VS
VChpc1ZhbGlkT3BUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG9yaWdpbi5vcGNvZGUoKSkpKTsK
KyAgICAvL3JldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOworfQorCitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50
OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBt
b2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1
bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJ
VCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigp
OworCisgICAgQjM6OlByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZSA9IHByb2Nl
ZHVyZS5jb2RlKCk7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRT
dHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5kYXRh
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNvZGVP
cmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgd2UgY2Fu
bm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJzKCkg
b3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAgLy8gZG9uJ3Qgc3Ry
aWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCksIHdoaWNoIHNhdmVz
IGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAgICAvLyBPT1BTOiBE
byB3ZSBuZWVkIHRoaXM/IFNob3VsZCB3ZSBqdXN0IHNldCBpdCBkaXJlY3RseSBvbiBDb2RlPwor
ICAgIHByb2NlZHVyZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFsc2UpOworICAgIAorICAgIHBy
b2NlZHVyZS5zZXRPcHRMZXZlbChjb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlCisgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZl
bCgpCisgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgp
KTsKKworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVz
dWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRpb25Nb2Rl
LCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsK
KyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCisgICAgICAgICAgICBibG9jay0+c3VjY2Vzc29y
QmxvY2soaSktPmFkZFByZWRlY2Vzc29yKGJsb2NrKTsKKyAgICB9CisgICAgLy9CMzo6QWlyOjp2
YWxpZGF0ZShjb2RlKTsKKyAgICAvLyBPT1BTOiBWYWxpZGF0ZSAnY29kZScgaGVyZSEKKyAgICAK
KyAgICB7CisgICAgICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOworICAg
ICAgICBCMzo6QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRy
eXBvaW50SklUKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOworICAgICAgICByZXN1bHQt
PmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVy
QXRPZmZzZXRMaXN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30K
Kwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KEIzOjpPcGNvZGUg
b3BlcmF0aW9uLCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCkKK3sK
KyAgICAvL0FTU0VSVChvcGVyYXRpb24gPT0gRGl2IHx8IG9wZXJhdGlvbiA9PSBNb2QgfHwgb3Bl
cmF0aW9uID09IFVEaXYgfHwgb3BlcmF0aW9uID09IFVNb2QpOyAvLyBPT1BTCisgICAgLy9jb25z
dCBCMzo6VHlwZSB0eXBlID0gbGVmdC0+dHlwZSgpOworICAgIFVOVVNFRF9QQVJBTShvcGVyYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwor
CisgICAgLyoKKyAgICB7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8g
T09QUzogTmVlZCB0eXBlcyBmb3IgYnJhbmNoIGhlcmUhCisgICAgICAgICAgICBLaW5kIG9wID0g
QnJhbmNoVGVzdDY0IDogQnJhbmNoVGVzdDMyOworICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6
OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCByaWdodCwgcmlnaHQpOworICAgICAgICB9
LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAo
b3BlcmF0aW9uID09IERpdikgeworICAgICAgICAvLyBPT1BTOiBOZWVkIHR5cGVzIGhlcmUhCisg
ICAgICAgIC8vaW50NjRfdCBtaW4gPSB0eXBlID09IEludDMyID8gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKTsK
KworICAgICAgICBpbnQ2NF90IG1pbiA9IHR5cGUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCk7CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8gT09Q
UzogVHJ5IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAgICAgICAgICBUbXAgbWlu
VG1wID0gZ3ByKCk7CisgICAgICAgICAgICBUbXAgbmVnT25lID0gZ3ByKCk7CisKKyAgICAgICAg
ICAgIEtpbmQgb3AgPSBpczY0Qml0T3Aob3BlcmF0aW9uKSA/IENvbXBhcmU2NCA6IENvbXBhcmUz
MjsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShtaW4pLCBtaW5UbXApOwor
ICAgICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
KSwgbGVmdCwgbWluVG1wLCBtaW5UbXApOworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
aW1tKC0xKSwgbmVnT25lKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCksIHJpZ2h0LCBuZWdPbmUsIG5lZ09uZSk7CisgICAgICAgICAg
ICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpJbnRlZ2Vy
T3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9CisgICAgKi8KK30KKworLy8gT09QUzogSW1w
bGVtZW50IHRoZXNlIGRpdiBvcHMhISEKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5
cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7
CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAg
VU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2RlIG9wID0gRGl2Owor
ICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAg
IC8vICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJB
TShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bj
b2RlIG9wID0gTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdo
dCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRp
dlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZGF0YUxvZ0xuKCJ1bmltcGxl
bWVudGVkIGkzMmRpdnMiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRy
dWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOworICAgIFVOVVNFRF9QQVJBTShs
ZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQp
OworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgLy9lbWl0Q2hlY2tzRm9y
TW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGRh
dGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsKKyAg
ICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICBVTlVT
RURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3AgPSBVTW9kOworICAg
IC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9wLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMyZGl2cyIpOworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8v
ICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgIFVOVVNFRF9QQVJBTShy
aWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9jb25zdCBCMzo6T3Bjb2Rl
IG9wID0gRGl2OworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7
CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2Ms
IG9wLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVz
c2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBkYXRhTG9nTG4oInVuaW1wbGVtZW50ZWQgaTMy
ZGl2cyIpOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIC8vYm9vbCBiID0gdHJ1ZTsKKyAgICAv
L2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAg
IFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9j
b25zdCBCMzo6T3Bjb2RlIG9wID0gTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9w
LCBsZWZ0LCByaWdodCk7CisgICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIGNoaWxsKG9wKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZGF0YUxv
Z0xuKCJ1bmltcGxlbWVudGVkIGkzMmRpdnMiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAv
L2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOworICAgIFVO
VVNFRF9QQVJBTShsZWZ0KTsKKyAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgIFVOVVNFRF9Q
QVJBTShyZXN1bHQpOworICAgIC8vY29uc3QgQjM6Ok9wY29kZSBvcCA9IFVEaXY7CisgICAgLy9l
bWl0Q2hlY2tzRm9yTW9kT3JEaXYob3AsIGxlZnQsIHJpZ2h0KTsKKyAgICAvL3Jlc3VsdCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgb3AsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHBy
ZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBpMzJkaXZzIik7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgLy9ib29sIGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAg
Q1JBU0goKTsKKyAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAvL2NvbnN0IEIzOjpPcGNvZGUgb3Ag
PSBVTW9kOworICAgIC8vZW1pdENoZWNrc0Zvck1vZE9yRGl2KG9wLCBsZWZ0LCByaWdodCk7Cisg
ICAgLy9yZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIG9w
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMy
KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0u
Z3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50
KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fz
c2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgeworICAgICAgICBhdXRvKiBwYXRj
aHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVt
aXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQzMl90ICgqcG9wY291bnQpKGludDMyX3QpID0g
W10gKGludDMyX3QgdmFsdWUpIC0+IHVpbnQzMl90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3Vu
dCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9u
KCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IGppdC5jb3VudFBvcHVsYXRpb242NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRf
dCAoKnBvcGNvdW50KShpbnQ2NF90KSA9IFtdIChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7
IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBv
cGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1
dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAg
ICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyNpZiBDUFUoWDg2XzY0KQor
ICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1z
WzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252
ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2Vu
ZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2
KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQVShY
ODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBq
aXQuY29udmVydFVJbnQ2NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkp
OworI2VuZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9p
bnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRO
ZWFyZXN0SW50RG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9
KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBy
ZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBw
YXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBm
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNo
cG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBd
LmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2lu
dChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9G
bG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICAv
L2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOyAvLyBPT1BT
OiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KERvdWJs
ZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gY29uc3RhbnQoRG91
YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFu
LCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1f
cHJvYywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBC
Mzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9IHBhdGNocG9pbnQ7CisgICAgKi8KKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
VU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9ib29s
IGIgPSB0cnVlOworICAgIC8vaWYgKGIpCisgICAgLy8gICAgQ1JBU0goKTsgLy8gT09QUzogaW1w
bGVtZW50IHRoaXMhCisKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0
d2lzZV9jYXN0PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0
d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3Vu
ZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSog
dHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVj
aywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
KyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50
MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7
IH07Cit9CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIFVOVVNFRF9Q
QVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vYm9vbCBiID0gdHJ1
ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxlbWVudCB0
aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQz
Ml90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUsIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhhbiwg
b3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0
T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFs
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tW
YWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJv
YywgSW50MzIsIG9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6
OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIFVO
VVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIC8vYm9vbCBi
ID0gdHJ1ZTsKKyAgICAvL2lmIChiKQorICAgIC8vICAgIENSQVNIKCk7IC8vIE9PUFM6IGltcGxl
bWVudCB0aGlzIQorCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBt
aW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oLTEuMCkpKTsKKyAgICBUbXAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEJpdEFuZCwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTGVzc1RoYW4sIG9yaWdpbigpLCBhcmcs
IG1heCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
R3JlYXRlclRoYW4sIG9yaWdpbigpLCBhcmcsIG1pbikpOworICAgIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCksIG91
dE9mQm91bmRzLCBjb25zdGFudChJbnQzMiwgMCkpOworICAgIENoZWNrVmFsdWUqIHRyYXAgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdp
bigpLCBvdXRPZkJvdW5kcyk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
IHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
VHJ1bmMpOworICAgIH0pOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBvcmln
aW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBq
aXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVu
Y1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShhcmcpOworICAgIFVOVVNFRF9QQVJBTShy
ZXN1bHQpOworICAgIGRhdGFMb2dMbigidW5pbXBsZW1lbnRlZCBJNjRUcnVuY1NGNjQiKTsKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRydWU7CisgICAgLy9pZiAoYikKKyAg
ICAvLyAgICBDUkFTSCgpOyAvLyBPT1BTOiBpbXBsZW1lbnQgdGhpcyEKKworICAgIC8qCisgICAg
VG1wIG1heCA9IGNvbnN0YW50KERvdWJsZSwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAg
ICBUbXAgbWluID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7Cisg
ICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgb3Jp
Z2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0
YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRz
KTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93
RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7
CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAgICBwYXRj
aHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJs
ZVRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHJlc3VsdCA9
IHBhdGNocG9pbnQ7CisgICAgKi8KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgVU5VU0VEX1BBUkFNKGFyZyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgYm9v
bCBiID0gdHJ1ZTsKKyAgICBpZiAoYikKKyAgICAgICAgQ1JBU0goKTsgLy8gT09QUzogaW1wbGVt
ZW50IHRoaXMhCisgICAgLyoKKyAgICBUbXAgbWF4ID0gY29uc3RhbnQoRG91YmxlLCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChEb3VibGUs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAgIFRtcCBvdXRPZkJvdW5kcyA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBMZXNzVGhh
biwgb3JpZ2luKCksIGFyZywgbWF4KSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAg
b3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVx
dWFsLCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksIG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0
YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhh
dmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQg
aW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAg
ICAgLy8gdGhlIG51bWJlcnMgYXJlIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25l
ZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBy
cyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVl
ZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBjb25zdGFudChEb3VibGUsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsK
KyAgICB9CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigpKTsKKyAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoc2lnbkJpdENvbnN0YW50
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3Jh
dGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAg
ICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2
KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAg
ICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0
LnRydW5jYXRlRG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCks
IHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICByZXN1bHQgPSBwYXRjaHBvaW50OworICAgICovCisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFVOVVNFRF9QQVJBTShhcmcpOwor
ICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIGRhdGFMb2dMbigiaW5pbXBsZW1lbnRlZCBp
NjR0cnVuY3NmMzIiKTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICAvL2Jvb2wgYiA9IHRydWU7
CisgICAgLy9pZiAoYikKKyAgICAvLyAgICBDUkFTSCgpOyAvLyBPT1BTOiBJbXBsZW1lbnQgdGhp
cyEKKyAgICAvKgorICAgIFRtcCBtYXggPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBjb25zdGFudChGbG9hdCwgYml0d2lzZV9jYXN0PHVp
bnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4oKSwgYXJnLCBtYXgp
LAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0
ZXJFcXVhbCwgb3JpZ2luKCksIGFyZywgbWluKSk7CisgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwgb3V0T2ZC
b3VuZHMsIGNvbnN0YW50KEludDMyLCAwKSk7CisgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCks
IG91dE9mQm91bmRzKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CisgICAgfSk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIG9yaWdpbigp
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50
cnVuY2F0ZUZsb2F0VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7Cisg
ICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMy
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0
KTsKKyAgICBib29sIGIgPSB0cnVlOworICAgIGlmIChiKQorICAgICAgICBDUkFTSCgpOyAvLyBP
T1BTOiBpbXBsZW1lbnQgdGhpcworICAgIC8qCisgICAgVG1wIG1heCA9IGNvbnN0YW50KEZsb2F0
LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAg
ICBUbXAgbWluID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgVG1wIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIG9yaWdpbigpLAorICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIExlc3NUaGFuLCBvcmlnaW4o
KSwgYXJnLCBtYXgpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgYXJnLCBtaW4pKTsKKyAgICBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdp
bigpLCBvdXRPZkJvdW5kcywgY29uc3RhbnQoSW50MzIsIDApKTsKKyAgICBDaGVja1ZhbHVlKiB0
cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNr
LCBvcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29uc3RhbnQ7CisgICAg
aWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0
cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywg
d2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAgICAgICAvLyB0aGUg
bnVtYmVycyB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2lu
Y2Ugd2UgY2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBk
byBpdAorICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAg
c2lnbkJpdENvbnN0YW50ID0gY29uc3RhbnQoRmxvYXQsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAt
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworICAgIH0KKyAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgb3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmFw
cGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIGlmIChpc1g4NigpKSB7Cisg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChzaWduQml0Q29uc3RhbnQsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAx
OworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29u
c3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAg
ICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9
IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
VWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFu
dCk7CisgICAgfSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25l
KCk7CisgICAgcmVzdWx0ID0gcGF0Y2hwb2ludDsKKyAgICAqLworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBp
ZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAg
ICAgIGFwcGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKyAgICAKKyAgICBUbXAgZWN4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAg
ICBhcHBlbmQoTW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUsIHNoaWZ0LCBl
Y3gpOworICAgIGFwcGVuZChvcCwgZWN4LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJTdWIoQjM6OkFpcjo6T3Bjb2RlIG9wLCBF
eHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYg
KGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAg
ICBhcHBlbmQob3AsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAg
Ly8gbWVhbnMKKyAgICAvLyBiID0gYiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3Vs
dCk7CisgICAgYXBwZW5kKG9wLCByaHMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUg
b3AsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQob3AgPT0gQWJzRmxvYXQgfHwgb3AgPT0g
QWJzRG91YmxlKTsKKworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3Jt
KG9wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQo
aXNYODYoKSk7CisKKyAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICBpZiAob3AgPT0gQWJz
RmxvYXQpIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKH4oMXVsbCA8PCAzMSkpLCBj
b25zdGFudCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0
KTsKKyAgICAgICAgYXBwZW5kKEFuZEZsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ofigxdWxsIDw8IDYzKSksIGNvbnN0
YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsK
KyAgICAgICAgYXBwZW5kKEFuZERvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5P
cChCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUg
cmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRt
cCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgbGhzLCByaHMsIHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7
CisKKyAgICAvLyBPcCBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBPcCBhCisgICAg
Ly8gT09QUzogdmVyaWZ5CisgICAgYXBwZW5kKE1vdmVEb3VibGUsIGxocywgcmVzdWx0KTsKKyAg
ICBhcHBlbmQob3AsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDZWlsRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JF
cXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRlbW90ZUY2ND4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RG91YmxlVG9GbG9h
dCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFs
ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwgPSBtX2NvZGUu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQsIEFyZzo6ZG91
YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBh
cHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
aXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24p
OworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAg
YXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVuZChn
cmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
Z3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNldFN1
Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91Ymxl
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyTWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJs
b2NrLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlz
RXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+
c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3Zl
RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwg
QXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFy
ZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24p
OworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAg
YXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFk
ZEZsb2F0aW5nUG9pbnRCaW5PcChNdWxEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJp
bk9wKERpdkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgLy8gT09QUzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBmb3IgdGhlIGltbXMg
YW5kIHR3byBvcGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRt
cCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7CisgICAgVG1wIHZhbHVlID0g
Z3ByKCk7CisKKyAgICAvLyBPT1BTOiBDYW4gZml0IGluIEltbS9CaXRJbW0gaW5zdGVhZCBvZiBC
aWdJbW0/CisgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBl
bmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQz
MiwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcw
LCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1
ZSk7CisgICAgYXBwZW5kKEFuZDMyLCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVu
ZChPcjMyLCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2
YWx1ZSwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUz
MiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCB0ZW1wLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJSZWludGVycHJldEkzMj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQW5kNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMk5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NEd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJT
cXJ0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwg
YXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJn
Ojpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NEVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NERpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9P
UFM6IHdoYXQgYWJvdXQgY2hpbGwtbmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGlu
Z1BvaW50QmluT3AoRGl2RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZs
b2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9z
NjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVGbG9hdCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKE5lZ2F0ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAg
IGVsc2UgeworICAgICAgICBUbXAgY29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgICAg
IGFwcGVuZChNdWxGbG9hdCwgY29uc3RhbnQsIGFyZzAsIHJlc3VsdCk7CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQW5kMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVs
b3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0NjQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRBYnM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2lu
dEFicyhBYnNEb3VibGUsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29weXNpZ24+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBi
ZXR0ZXIgY29kZWdlbiBoZXJlIGZvciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24g
eDg2CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1w
IHNpZ24gPSBncHIoKTsKKyAgICBUbXAgdmFsdWUgPSBncHIoKTsKKworICAgIGFwcGVuZChNb3Zl
RG91YmxlVG82NCwgYXJnMSwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgw
eDgwMDAwMDAwMDAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCBzaWdu
LCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmZmZmZmZmZmYpLCB2YWx1ZSk7Cisg
ICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjY0
LCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdmFsdWUs
IHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9GbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0Um90bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMdD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0kzMj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0Rv
dWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJs
ZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpk
b3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0
ZW1wID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5k
KENvbnZlcnRJbnQ2NFRvRmxvYXQsIHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclM+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUnNoaWZ0
MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NENlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
Q2VpbERvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRGbG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChGbG9v
ckRvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjMyLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkRmxvYXRpbmdQb2ludEFicyhBYnNGbG9hdCwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1pbj4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNC
bG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVx
dWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVx
dWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERv
dWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAs
IGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVx
dWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcw
LCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJs
ZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAg
bm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwp
OworCisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVy
VGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxGbG9h
dCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViNjQsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJSZWludGVycHJldEYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJB
ZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQWRkMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFN1Yj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGlm
IChpc1ZhbGlkRm9ybShTdWJEb3VibGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKQor
ICAgICAgICBhcHBlbmQoU3ViRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGVsc2Ug
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTdWJEb3VibGUsIHJlc3VsdCwg
YXJnMCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjMyLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0THRTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTY0PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRYb3I+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoWG9yNjQsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE11bDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBpZiAoaXNWYWxpZEZvcm0oU3ViRmxvYXQsIEFyZzo6VG1wLCBBcmc6
OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoU3ViRmxvYXQsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAg
ICAgICBhcHBlbmQoTW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU3Vi
RmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRQcm9tb3RlRjMyPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENvbnZlcnRGbG9hdFRvRG91
YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQWRkRG91YmxlLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVM+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFVJMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJOZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIFJFTEVBU0VfQVNTRVJUKGFyZzAgJiYgYXJnMSk7CisgICAgYXBwZW5kKENvbXBhcmUz
MiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NFJlaW50ZXJwcmV0STY0PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJGbG9vcj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChGbG9vckZsb2F0LCBhcmcwLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJFcXo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDMy
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRSZWludGVycHJldEY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0U2hyUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRT
aGlmdChSc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVXJzaGlmdDY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0U3FydD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoTHNoaWZ0NjQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJHdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJXcmFwSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1v
dmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90bD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVMZWZ0MzIsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyR3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5l
Zz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdh
dGVEb3VibGUsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChOZWdhdGVEb3Vi
bGUsIGFyZzAsIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCBjb25zdGFudCA9IGFk
ZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxk
b3VibGU+KC0xLjApKSk7CisgICAgICAgIGFwcGVuZChNdWxGbG9hdCwgY29uc3RhbnQsIGFyZzAs
IHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAg
ICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJs
b2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0Vx
dWFsLCBBbmREb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWws
IEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAg
IGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
bm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3Jz
KGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRG91
YmxlLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhhbiwgSnVtcCk7CisgICAgbGVz
c1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2Nr
ID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlVT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQWRkNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21CM0lS
R2VuZXJhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29u
c3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9
IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTUsNyArMzE1LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbgog
ICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gZWZmZWN0czsKICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3Rl
clNldChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKLSAgICBwYXRjaHBvaW50LT5hcHBlbmQo
aW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50
LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsgLy8gT09Q
UzogUHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nIGFyZyEKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbSkgewogICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUik7CkBAIC00NTksOSArNDU5LDkgQEAgdm9pZCBCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAogCiAgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIElu
c3RhbmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBj
YW5vbmljYWwgbG9jYXRpb24gaXMuCi0gICAgICAgIFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpKTsK
LSAgICAgICAgVmFsdWUqIGFjdHVhbFN0YWNrTGltaXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBw
b2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGlt
aXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgIFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJ
bnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpKTsKKyAgICAgICAg
VmFsdWUqIGFjdHVhbFN0YWNrTGltaXQgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBwb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0KTsKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGltaXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7IC8vIE9P
UFM6IHNob3VsZCBiZSBibG9jayEKICAgICB9CiAKICAgICBpZiAoISFtZW1vcnkpIHsKQEAgLTE2
MDksNiArMTYwOSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQK
ICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKICNpZiBDUFUoWDg2XzY0KQpAQCAtMTYyOSw2ICsxNjMwLDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbgogICAgIGlmIChpc1g4NigpKQog
ICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogI2lm
IENQVShYODZfNjQpCkBAIC0xODM4LDcgKzE4NDAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lz
dGVycyA9IDE7CiAgICAgfQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewot
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsgLy8gT09QUzogVGhpcyBsb29rcyBzdXBlciB3cm9uZyBnaXZlbiB3ZSBkb24ndCBzYXkgd2Ug
Y2xvYmJlciB0aGlzIQogICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CiAg
ICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7CiAgICAgICAgIGlmIChpc1g4
NigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkIz
Q29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUg
Ildhc21BaXJJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgpAQCAt
MjcxLDcgKzI3Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGkK
IAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgICAgIFRpZXJVcENvdW50KiB0aWVy
VXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5j
dGlvbkluZGV4XSA6IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwg
ZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENv
bXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCks
IHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUs
IGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgICAg
IGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwzNiBAQCBjb25zdCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24mIHdhc21DYWxsaW5nCiAgICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVu
dGlvbjsKIH0KIAorY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252
ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdD
b252ZW50aW9uQWlyPiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBz
dGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9y
PFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKK2NvbnN0IFdhc21D
YWxsaW5nQ29udmVudGlvbkFpciYgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFdhc21DYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGlj
V2FzbUNhbGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNX
YXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1dhc21D
YWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgVmVjdG9yPFJlZz4gZ3ByQXJn
dW1lbnRSZWdpc3RlcnMoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzOyArK2kpCisgICAgICAgICAgICBncHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEdQUklu
Zm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKworICAgICAgICBWZWN0b3I8UmVnPiBmcHJBcmd1
bWVudFJlZ2lzdGVycyhGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdp
c3RlcnM7ICsraSkKKyAgICAgICAgICAgIGZwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gRlBSSW5m
bzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIHN0YXRpY1dhc21DYWxsaW5nQ29u
dmVudGlvbi5jb25zdHJ1Y3QoV1RGTW92ZShncHJBcmd1bWVudFJlZ2lzdGVycyksIFdURk1vdmUo
ZnByQXJndW1lbnRSZWdpc3RlcnMpLCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAj
aW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNB
cmd1bWVudFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCkBAIC00NCwyNyAr
NDUsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1
bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5
cGUpOwordHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZz
ZXQpOwogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9m
ZnNldD4KIGNsYXNzIENhbGxpbmdDb252ZW50aW9uIHsKIHB1YmxpYzoKICAgICBDYWxsaW5nQ29u
dmVudGlvbihWZWN0b3I8UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVn
aXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotICAgICAgICA6IG1fZ3ByQXJncyhncHJB
cmdzKQotICAgICAgICAsIG1fZnByQXJncyhmcHJBcmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2
ZVJlZ2lzdGVycyhjYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZN
b3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnByQXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAg
ICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMp
KQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJn
dW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3MsIEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgY291
bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CisgICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxs
QXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBz
aXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGNvdW50IDwgcmVn
QXJncy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gQjM6OlZhbHVlUmVwOjpyZWcocmVnQXJn
c1tjb3VudCsrXSk7CiAKICAgICAgICAgY291bnQrKzsKICAgICAgICAgQjM6OlZhbHVlUmVwIHJl
c3VsdCA9IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09mZnNldCk7Ci0gICAgICAg
IHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0LCB0eXBlKTsKKyAgICAgICAg
c3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtNzMsMTAgKzc0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEIzOjpJbnQzMjoKICAgICAgICAgY2FzZSBCMzo6
SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdz
LCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQpOwogICAgICAgICBjYXNlIEIzOjpGbG9hdDoKICAgICAgICAgY2FzZSBCMzo6RG91Ymxl
OgotICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlw
ZSwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFy
c2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0
KTsKICAgICAgICAgY2FzZSBCMzo6Vm9pZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0xODksMTkgKzE5MCwxNDMgQEAgcHVibGljOgogICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1f
Y2FsbGVyU2F2ZVJlZ2lzdGVyczsKIH07CiAKLWlubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0
KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlKQordGVtcGxhdGU8dW5zaWduZWQgaGVh
ZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CitjbGFzcyBDYWxsaW5nQ29udmVudGlv
bkFpciB7CitwdWJsaWM6CisgICAgQ2FsbGluZ0NvbnZlbnRpb25BaXIoVmVjdG9yPFJlZz4mJiBn
cHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJl
Z2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAg
LCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdp
c3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHNjcmF0Y2ggPSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICBzY3JhdGNo
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAg
c2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkp
OworICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2dwckFyZ3MpCisgICAgICAgICAgICBzY3JhdGNo
LmNsZWFyKHJlZyk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cykKKyAgICAgICAgICAgIHNjcmF0Y2guY2xlYXIocmVnKTsKKyAgICAgICAgZm9yIChSZWcgcmVn
IDogc2NyYXRjaCkKKyAgICAgICAgICAgIG1fc2NyYXRjaEdQUnMuYXBwZW5kKHJlZyk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2NyYXRjaEdQUnMuc2l6ZSgpID49IDMpOworICAgIH0KKwor
ICAgIEdQUlJlZyBwcm9sb2d1ZVNjcmF0Y2goc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
YXRjaEdQUnNbaV0uZ3ByKCk7IH0KKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
UmVnRnVuYywgdHlwZW5hbWUgU3RhY2tGdW5jPgorICAgIHZvaWQgbWFyc2hhbGxBcmd1bWVudElt
cGwoY29uc3QgVmVjdG9yPFJlZz4mIHJlZ0FyZ3MsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3Rh
Y2tPZmZzZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1bmMsIGNvbnN0IFN0YWNrRnVuYyYgc3RhY2tG
dW5jKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgcmVnQXJncy5zaXplKCkpIHsK
KyAgICAgICAgICAgIHJlZ0Z1bmMocmVnQXJnc1tjb3VudCsrXSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjb3VudCsrOworICAgICAgICBzdGFja0Z1bmMoc3Rh
Y2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNl
dCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0
YWNrRnVuYz4KKyAgICB2b2lkIG1hcnNoYWxsQXJndW1lbnQoVHlwZSB0eXBlLCBzaXplX3QmIGdw
QXJndW1lbnRDb3VudCwgc2l6ZV90JiBmcEFyZ3VtZW50Q291bnQsIHNpemVfdCYgc3RhY2tPZmZz
ZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1bmMsIGNvbnN0IFN0YWNrRnVuYyYgc3RhY2tGdW5jKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6
STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1l
bnRJbXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgcmVnRnVuYywg
c3RhY2tGdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoK
KyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1w
bChtX2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNr
RnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVyU2l6ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFk
ZXJTaXplOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgbG9h
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOwor
ICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNr
T2Zmc2V0ID0gaGVhZGVyU2l6ZTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgbWFyc2hhbGxBcmd1
bWVudChzaWduYXR1cmUuYXJndW1lbnQoaSksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3RvcihCMzo6QWlyOjpUbXAocmVnKSwgaSk7CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09mZnNldCkgeworICAg
ICAgICAgICAgICAgICAgICBmdW5jdG9yKEIzOjpBaXI6OkFyZzo6YWRkcihCMzo6QWlyOjpUbXAo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBzdGFja09mZnNldCksIGkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSXQncyBleHBlY3RlZCB0aGF0
IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhlIGdlbmVyYXRvciBmb3IgdGhlIGNhbGwgb3Bl
cmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXR1cENh
bGwoQjM6OkFpcjo6Q29kZSYgY29kZSwgVHlwZSByZXR1cm5UeXBlLCBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50LCBjb25zdCBWZWN0b3I8QjM6OkFpcjo6VG1wPiYgYXJncywgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50
Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAg
c2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KTsKKworICAgICAgICBmb3IgKGF1dG8gdG1wIDogYXJncykgeworICAgICAgICAgICAgbWFyc2hh
bGxBcmd1bWVudCh0bXAuaXNHUCgpID8gVHlwZTo6STY0IDogVHlwZTo6RjY0LCBncEFyZ3VtZW50
Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsCisgICAgICAgICAgICAgICAgWyZd
IChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wLCBCMzo6VmFsdWVS
ZXA6OnJlZyhyZWcpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIFsmXSAo
c2l6ZV90IHN0YWNrT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wLCBC
Mzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoc3RhY2tPZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUlu
Qnl0ZXMoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3Rh
Y2tPZmZzZXQpKTsKKworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworCisgICAg
ICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlw
ZTo6RjY0OgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpW
YWx1ZVJlcDo6cmVnKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9ncHJBcmdzOworICAgIGNvbnN0
IFZlY3RvcjxSZWc+IG1fZnByQXJnczsKKyAgICBWZWN0b3I8UmVnPiBtX3NjcmF0Y2hHUFJzOwor
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBS
ZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7Cit9OworCitpbmxpbmUgdW5zaWduZWQg
bmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KQogewogICAgIHJldHVybiBjdXJy
ZW50T2Zmc2V0ICsgc2l6ZW9mKFJlZ2lzdGVyKTsKIH0KIAogY29uc3RleHByIHVuc2lnbmVkIGpz
Y0hlYWRlclNpemUgPSBFeGVjU3RhdGU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZihS
ZWdpc3Rlcik7Ci10eXBlZGVmIENhbGxpbmdDb252ZW50aW9uPGpzY0hlYWRlclNpemUsIG5leHRK
U0NPZmZzZXQ+IEpTQ0NhbGxpbmdDb252ZW50aW9uOwotCi10eXBlZGVmIEpTQ0NhbGxpbmdDb252
ZW50aW9uIFdhc21DYWxsaW5nQ29udmVudGlvbjsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRp
b24gPSBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3Vz
aW5nIFdhc21DYWxsaW5nQ29udmVudGlvbiA9IEpTQ0NhbGxpbmdDb252ZW50aW9uOwogY29uc3Qg
SlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxpbmdDb252ZW50aW9uKCk7CiBjb25zdCBXYXNt
Q2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogCit1c2luZyBKU0ND
YWxsaW5nQ29udmVudGlvbkFpciA9IENhbGxpbmdDb252ZW50aW9uQWlyPGpzY0hlYWRlclNpemUs
IG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyID0gSlNDQ2Fs
bGluZ0NvbnZlbnRpb25BaXI7Citjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbkFpciYganNjQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKTsKK2NvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbkFpciYgd2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyKCk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360444</attachid>
            <date>2019-01-28 23:27:37 -0800</date>
            <delta_ts>2019-01-29 01:00:02 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>160586</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDkgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgICAgICBicmVhazsKICAgICB9CiAK
KyAgICBpZiAoIXZhbHVlKSAvLyBPT1BTCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xv
YmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlk
ZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQog
ICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hB
cmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUo
KQogewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2
b2lkIENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8
UmVnPiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVk
UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vh
a1JhbmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9p
ZCBlbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0
ZXhwciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzMwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVk
ZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNt
RnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bj
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25z
dHJhaW5lZFRtcCB7CisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25z
dHJhaW5lZFRtcCh0bXAsIHRtcC5pc1JlZygpID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygp
KSA6IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWlu
ZWRUbXAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAg
ICAgICAsIHJlcChyZXApCisgICAgeworICAgIH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZh
bHVlUmVwIHJlcDsKK307CisKK2NsYXNzIEFpcklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBz
dHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdp
biwgVHlwZSByZXR1cm5UeXBlLCBUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNC
bG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAg
ICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250
aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwg
cmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFS
QU0ob3JpZ2luKTsgLy8gT09QUworICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlID09IFR5cGU6OlZvaWQpOworICAgICAgICB9CisK
KyAgICAgICAgQ29udHJvbERhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9v
cDogICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9j
a1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0
LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwor
ICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCpzcGVj
aWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUi
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
YmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBy
ZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3Qg
eyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAg
ICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0
SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAs
IDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRG
b3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tU
eXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHJl
dHVyblR5cGU7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVG1wOworICAg
IHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhwcmVzc2lvbkxp
c3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBD
b250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlv
blBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25z
dCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb247CisKKyAgICB1c2luZyBFcnJvclR5cGUg
PSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVj
dGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4K
KyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFp
bChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFp
bHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZh
aWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2Rl
ZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAg
IGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDAp
CisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9j
ZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKKworICAgIC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAg
ICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExv
YWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
c3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
IHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRv
cnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblpl
cm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAg
Ly8gQ29udHJvbCBmbG93CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRv
cExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShD
b250cm9sRGF0YSYpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENv
bnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERh
dGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lv
blN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKworICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoQjM6
OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1
YihCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5n
UG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3Ao
QjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENv
bnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Np
b25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CisKK3ByaXZhdGU6CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGlmICghaW5zdC5pc1ZhbGlkRm9y
bSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGluc3QpOworICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJsb2Nr
LCBLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8v
IE9PUFM6IEFkZCBvcmlnaW4KKyAgICAgICAgYXV0byYgaW5zdCA9IGJsb2NrLT5hcHBlbmQoa2lu
ZCwgbnVsbHB0ciwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAg
ICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoS2luZCBraW5kLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIGtpbmQsIHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIFRtcCB0
bXAoQjM6OkJhbmsgYmFuaykgeyByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsgfQorICAgIFRt
cCBncHIoKSB7IHJldHVybiB0bXAoQjM6OkdQKTsgfQorICAgIFRtcCBmcHIoKSB7IHJldHVybiB0
bXAoQjM6OkZQKTsgfQorICAgIFRtcCB0bXBGb3JUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIGNhc2UgVHlw
ZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBmcHIo
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGFkZFBhdGNocG9pbnQoQjM6OlR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb2MuYWRkPEIzOjpQYXRjaHBvaW50
VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCMzo6UGF0Y2hwb2ludFZhbHVl
KiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgZW1p
dFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxB
cmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFy
Z3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAg
IHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVj
dG9yPENvbnN0cmFpbmVkVG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsK
KyAgICB9CisKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ss
IEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFp
bmVkVG1wPigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+Cisg
ICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxp
bmVTaXplPiYmIGFyZ3MpCisgICAgeworICAgICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwp
CisgICAgICAgICAgICBtX3BhdGNocG9pbnRTcGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBhdGNo
cG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6UGF0
Y2hwb2ludFNwZWNpYWw+KCkpKTsKKworICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNoLCBB
cmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOworICAgICAgICBJbnN0IHJlc3VsdE1v
djsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50eXBl
KCkgIT0gQjM6OlZvaWQpOworICAgICAgICAgICAgc3dpdGNoIChwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoK
KyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5yZWcoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdE1vdiA9IEluc3QocmVzdWx0Lmlz
R1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAocGF0Y2gtPnJlc3VsdENvbnN0
cmFpbnQucmVnKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKHBhdGNo
LT50eXBlKCkgPT0gQjM6OlZvaWQpOworICAgICAgICAKKyAgICAgICAgZm9yIChDb25zdHJhaW5l
ZFRtcCYgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8gT09QUzogVWdoLCB0aGlzIGlzIHN1
cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBCMzo6VmFsdWUqIGhlcmUuCisgICAg
ICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdvcmssIGJ1dCBvdXIgYWx0ZXJuYXRp
dmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAgICAgLy8gb3IgcmVpbnZlbnQgcGFy
dCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1
ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNHUCgpID8gQjM6
OkludDY0IDogQjM6OkRvdWJsZSwgMCk7CisgICAgICAgICAgICBwYXRjaC0+YXBwZW5kKGR1bW15
VmFsdWUsIHRtcC5yZXApOworICAgICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtpbmQoKSkgewor
ICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcC50bXApOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAg
IC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2FudCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2
MyBhbmQgZjMyL2Y2NAorICAgICAgICAgICAgICAgIHBhdGNoLT5lYXJseUNsb2JiZXJlZCgpLmNs
ZWFyKHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0
bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCB0bXAucmVwLnJlZygp
KTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcCh0bXAucmVwLnJlZygpKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6
U3RhY2tBcmd1bWVudDogeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2Fu
dCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2MyBhbmQgZjMyL2Y2NAorICAgICAgICAg
ICAgICAgIGF1dG8gYXJnID0gQXJnOjpjYWxsQXJnKHRtcC5yZXAub2Zmc2V0RnJvbVNQKCkpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUg
OiBNb3ZlRG91YmxlLCB0bXAudG1wLCBhcmcpOworICAgICAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXRjaC0+cmVz
dWx0Q29uc3RyYWludC5pc1JlZygpKQorICAgICAgICAgICAgcGF0Y2gtPmxhdGVDbG9iYmVyZWQo
KS5jbGVhcihwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHBhdGNoLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAg
ICBpbnN0LmFyZ3MuYXBwZW5kKGdwcigpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0
Y2gtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQoZnByKCkpOworCisgICAgICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICAgICAgYmFz
aWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgICAgICBpZiAocmVzdWx0TW92KSB7
CisgICAgICAgICAgICB2YWxpZGF0ZUluc3QocmVzdWx0TW92KTsKKyAgICAgICAgICAgIGJhc2lj
QmxvY2stPmFwcGVuZChXVEZNb3ZlKHJlc3VsdE1vdikpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5jaCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZv
aWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYgZW1pdEJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBn
ZW5lcmF0b3IpCisgICAgeworICAgICAgICAvLyBXZSBmYWlsIGFsb25nIHRoZSAidHJ1dGh5IiBl
ZGdlIG9mICdicmFuY2gnCisKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZhaWxlZCA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgICAgICAKKyAgICAgICAgZW1pdEJyYW5jaCgpOworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWlsZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
YXV0byogZmFpbGVkUGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAg
ICBmYWlsZWRQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1p
dFBhdGNocG9pbnQoZmFpbGVkLCBmYWlsZWRQYXRjaHBvaW50LCBUbXAoKSk7CisgICAgICAgIGFw
cGVuZChmYWlsZWQsIE9vcHMpOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5B
cmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEZ1bmMgZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgZW1pdENDYWxsKG1fY3VycmVudEJsb2NrLCBmdW5jLCByZXN1
bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2lj
QmxvY2sqIGJsb2NrLCBGdW5jIGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAg
ICB7CisgICAgICAgIEIzOjpUeXBlIHJlc3VsdFR5cGUgPSBCMzo6Vm9pZDsKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdFR5cGUgPSByZXN1bHQuaXNHUCgpID8gQjM6Oklu
dDY0IDogQjM6OkRvdWJsZTsKKworICAgICAgICBhdXRvIG1ha2VEdW1teVZhbHVlID0gWyZdIChU
bXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmlzR1AoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkludDY0LCAwKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6RG91
YmxlLCAwKTsKKyAgICAgICAgfTsKKworICAgICAgICBCMzo6VmFsdWUqIGR1bW15RnVuYyA9IG1f
cHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oZnVuYykpOworICAgICAgICBCMzo6VmFsdWUqIG9yaWdpbiA9IG1fcHJvYy5hZGQ8
QjM6OkNDYWxsVmFsdWU+KHJlc3VsdFR5cGUsIEIzOjpPcmlnaW4oKSwgQjM6OkVmZmVjdHM6Om5v
bmUoKSwgZHVtbXlGdW5jLCBtYWtlRHVtbXlWYWx1ZSh0aGVBcmdzKS4uLik7CisKKyAgICAgICAg
SW5zdCBpbnN0KENDYWxsLCBvcmlnaW4pOworCisgICAgICAgIFRtcCBjYWxsZWUgPSBncHIoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
ZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIGluc3QuYXJncy5h
cHBlbmQocmVzdWx0KTsKKworICAgICAgICBmb3IgKFRtcCB0bXAgOiBWZWN0b3I8VG1wLCBzaXpl
b2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZCh0bXApOworCisgICAgICAgIGJsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAg
fQorCisgICAgc3RhdGljIEIzOjpBaXI6Ok9wY29kZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0
eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6
STMyOgorICAgICAgICAgICAgcmV0dXJuIE1vdmUzMjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6
CisgICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAg
ICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisg
ICAgdm9pZCBlbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmln
aW4pOworCisgICAgRXhwcmVzc2lvblR5cGUgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7
CisgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVP
cFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50
MzJfdCBvZmZzZXQpOworCisgICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSYgZHN0
LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlz
dCYgc3RhY2spOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+CisgICAgdm9pZCBl
bWl0Q2hlY2tzRm9yTW9kT3JEaXYoYm9vbCBpc1NpZ25lZERpdiwgRXhwcmVzc2lvblR5cGUgbGVm
dCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOworCisgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKKwor
ICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayosIFRtcCk7Cisg
ICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCB7IE5vLCBZZXMgfTsKKyAgICB2
b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYsIFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayopOwor
CisgICAgQjM6Ok9yaWdpbiBvcmlnaW4oKTsgLy8gT09QUzogV2UgbmVlZCB0byBtYWtlIGFuIEFp
cjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGZyb20gQjMgY29kZS4KKworICAg
IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07Cisg
ICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlNb2Rl
IG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgY29uc3QgQ29tcGls
YXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07
CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKKyAgICBj
b25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CisKKyAgICBCMzo6UHJvY2Vk
dXJlJiBtX3Byb2M7CisgICAgQ29kZSYgbV9jb2RlOworICAgIEJhc2ljQmxvY2sqIG1fY3VycmVu
dEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0
ciB9OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8VG1wLCBUeXBlPj4gbV9sb2NhbHM7CisgICAgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAv
LyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVz
cyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2UgfTsKKworICAgIFRtcCBtX2lu
c3RhbmNlVmFsdWU7IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0
aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4KKyAgICBib29sIG1f
dXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9OworICAgIFRtcCBpbnN0YW5jZVZhbHVlKCkKKyAg
ICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUgPSB0cnVlOworICAgICAgICByZXR1cm4g
bV9pbnN0YW5jZVZhbHVlOworICAgIH0KKworICAgIHVpbnQzMl90IG1fbWF4TnVtSlNDYWxsQXJn
dW1lbnRzIHsgMCB9OworCisgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFsKiBtX3BhdGNocG9pbnRT
cGVjaWFsIHsgbnVsbHB0ciB9OworfTsKKworY29uc3QgVG1wIEFpcklSR2VuZXJhdG9yOjplbXB0
eUV4cHJlc3Npb24gPSBUbXAoKTsKKworLy8gTWVtb3J5IGFjY2Vzc2VzIGluIFdlYkFzc2VtYmx5
IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMgdGhleSBoYXZlIHNpZ25lZCAz
Mi1iaXQgb2Zmc2V0cyBpbiBCMy4KK2ludDMyX3QgQWlySVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRl
clBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2Zmc2V0KQoreworICAg
IGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpIHsKKyAgICAgICAgVG1wIHBy
ZXZpb3VzUHRyID0gcHRyOworICAgICAgICBwdHIgPSBncHIoKTsKKyAgICAgICAgVG1wIGNvbnN0
YW50ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCBj
b25zdGFudCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgY29uc3RhbnQsIHByZXZpb3VzUHRyLCBw
dHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG9mZnNldDsKK30KKwor
dm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9j
ayogYmxvY2ssIFRtcCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygp
KSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsK
KyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNN
YWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OnN0b3JlV2Fz
bUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAg
ICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAg
IH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGlu
c3RhbmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBCZWNhdXNl
IFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNlIHJlZ2lzdGVyIGFu
ZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQgaW4gdGhlIGNhbGxl
ciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBBcmd1bWVudFJlZyB0
byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIuCisgICAgYXV0byog
cGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIEIzOjpFZmZlY3RzIGVm
ZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0g
dHJ1ZTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUo
UmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7CisgICAgR1BSUmVnIHdhc21D
b250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7CisgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBd
LmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICB9KTsKKyAgICBlbWl0UGF0Y2hw
b2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKK30KKworQWlySVJHZW5l
cmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1v
cnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorICAgIDogbV9pbmZv
KGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBp
bGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQorICAgICwg
bV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHByb2NlZHVyZSkKKyAgICAsIG1fY29kZSht
X3Byb2MuY29kZSgpKQorICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyh1bmxpbmtlZFdh
c21Ub1dhc21DYWxscykKK3sKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgIG1fcm9vdEJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisKKyAgICAvLyBGSVhNRSB3ZSBk
b24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUgaWYgdGhlcmUncyBubyBtZW1v
cnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxlciBmb3Igbm93LiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIzCisgICAgY29uc3QgUGlubmVk
UmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKwor
ICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAg
bV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBtX3dhc21Db250ZXh0
SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOworICAg
IGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIo
bV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKworICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6
OlNpZ25hbGluZykgeworICAgICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1sw
XS5zaXplT2Zmc2V0KTsKKyAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXpl
UmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQorICAgICAg
ICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKKyAgICB9CisK
KyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAgICBUaHVua3M6OnNpbmdsZXRvbigp
LnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOworCisgICAgaWYgKGlu
Zm8ubWVtb3J5KSB7CisgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUikgeworICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91
bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1f
bWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChwaW5uZWRHUFIsIEludmFsaWRHUFJSZWcgPT0gcGlubmVkR1BSKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMtPmVtaXRU
aHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNz
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2Fz
ZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgICAgIC8vIE1vc3QgbWVtb3J5
IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0CisgICAgICAg
ICAgICAvLyBleGNlcHRpb24gY2hlY2sgYmVjYXVzZSB0aGV5IGNhbiByZWx5IG9uIGZhdWx0IGhh
bmRsaW5nIHRvIGRldGVjdAorICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4g
RmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZQorICAgICAgICAgICAgLy8g
dGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRp
b25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb2RlLnNldE51bUVu
dHJ5cG9pbnRzKDEpOworCisgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgy
KSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKworICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1
ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6
OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpB
aXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0
KTsKKworICAgICAgICB7CisgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgICAgICAgICAgYXV0byBt
b3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
Y29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIs
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIH0K
KworICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFt
ZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBt
aW5pbXVtUGFyZW50Q2hlY2tTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgMTAyNCk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYUZy
YW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCks
IHN0ZDo6bWF4PHVpbnQzMl90PigKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0
byBlbGlkZSBzdGFjayBjaGVja3MgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSB0ZXJtaW5hbCBub2Rl
cyBpbiB0aGUgY2FsbAorICAgICAgICAgICAgICAgIC8vIHRyZWUsIChlLmcgdGhleSBkb24ndCBt
YWtlIGFueSBjYWxscykgYW5kIGhhdmUgYSBzbWFsbCBlbm91Z2ggZnJhbWUgc2l6ZS4gVGhpcyB3
b3JrcyBieQorICAgICAgICAgICAgICAgIC8vIGhhdmluZyBhbnkgc3VjaCB0ZXJtaW5hbCBub2Rl
IGhhdmUgaXRzIHBhcmVudCBjYWxsZXIgaW5jbHVkZSBzb21lIGV4dHJhIHNpemUgaW4gaXRzCisg
ICAgICAgICAgICAgICAgLy8gb3duIGNoZWNrIGZvciBpdC4gVGhlIGdvYWwgaGVyZSBpcyB0d29m
b2xkOgorICAgICAgICAgICAgICAgIC8vIDEuIEVtaXQgbGVzcyBjb2RlLgorICAgICAgICAgICAg
ICAgIC8vIDIuIFRyeSB0byBzcGVlZCB0aGluZ3MgdXAgYnkgc2tpcHBpbmcgc3RhY2sgY2hlY2tz
LgorICAgICAgICAgICAgICAgIG1pbmltdW1QYXJlbnRDaGVja1NpemUsCisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hlY2tzIGluIHRoZSBXYXNtIC0+
IEVtYmVkZGVyIGNhbGwgSUMgc3R1Yi4gU2luY2UgdGhlc2Ugd2lsbAorICAgICAgICAgICAgICAg
IC8vIHNwaWxsIGFsbCBhcmd1bWVudHMgdG8gdGhlIHN0YWNrLCB3ZSBlbnN1cmUgdGhhdCBhIHN0
YWNrIGNoZWNrIGhlcmUgY292ZXJzIHRoZQorICAgICAgICAgICAgICAgIC8vIHN0YWNrIHRoYXQg
c3VjaCBhIHN0dWIgd291bGQgdXNlLgorICAgICAgICAgICAgICAgIChDaGVja2VkPHVpbnQzMl90
PihtX21heE51bUpTQ2FsbEFyZ3VtZW50cykgKiBzaXplb2YoUmVnaXN0ZXIpICsganNjQ2FsbGlu
Z0NvbnZlbnRpb24oKS5oZWFkZXJTaXplSW5CeXRlcygpKS51bnNhZmVHZXQoKQorICAgICAgICAg
ICAgKSk7CisgICAgICAgICAgICBjb25zdCBpbnQzMl90IGNoZWNrU2l6ZSA9IG1fbWFrZXNDYWxs
cyA/ICh3YXNtRnJhbWVTaXplICsgZXh0cmFGcmFtZVNpemUpLnVuc2FmZUdldCgpIDogd2FzbUZy
YW1lU2l6ZS51bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNr
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpv
bmVTaXplKCk7CisgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXND
YWxscyB8fCB3YXNtRnJhbWVTaXplID49IG1pbmltdW1QYXJlbnRDaGVja1NpemUgfHwgbmVlZFVu
ZGVyZmxvd0NoZWNrOworCisgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9u
cyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCisg
ICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2
ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgorICAgICAgICAgICAgaWYgKG5lZWRzT3ZlcmZsb3dD
aGVjaykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVT
Y3JhdGNoKDEpOworCisgICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkK
KyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJ
bnN0YW5jZSk7CisKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0
KCkpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHNj
cmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZs
b3c7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCisg
ICAgICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6QWJvdmUsIHNjcmF0Y2gxLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpOworICAg
ICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
QmVsb3csIHNjcmF0Y2gxLCBzY3JhdGNoMikpOworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbb3ZlcmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9t
V2FzbVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWVkZWQs
IGJ1dCB0aGUgaW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3QuCisgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNo
KGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3Jh
dGNoUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlKGNvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIFdlIHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24ndCBhY3R1YWxseSBu
ZWVkIHRvIGJlY2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50IGNvbnNlcnZh
dGl2ZWx5IHNhaWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBjaGVjaykgd2hpY2gg
cHJldmVudCBpdCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0pOworCisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBXVEZN
b3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygp
KSB7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGdwcigpOworICAgICAgICAvLyBPT1BTOiBX
b3VsZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCisg
ICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNlKSwgbV9pbnN0YW5jZVZhbHVl
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gVG1wKGNvbnRleHRJbnN0
YW5jZSk7CisKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAgbV9sb2NhbHMuZ3Jv
dyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlwZSA9
IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIG1f
bG9jYWxzW2ldID0geyBncHIoKSwgdHlwZSB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIG1f
bG9jYWxzW2ldID0geyBmcHIoKSwgdHlwZSB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkubG9hZEFyZ3Vt
ZW50cyhzaWduYXR1cmUsIFsmXSAoY29uc3QgQXJnJiBhcmcsIHVuc2lnbmVkIGkpIHsKKyAgICAg
ICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJ
MzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQs
IGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIGFyZywgbV9sb2Nh
bHNbaV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSk7
CisKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6OmZ1bmN0aW9uRW50cnlEZWNyZW1l
bnQoKSwgQjM6Ok9yaWdpbigpKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdl
YkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hl
ZFN0YWNrTGltaXQsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFRtcCBpbnN0YW5j
ZSwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2Uo
YmxvY2ssIGluc3RhbmNlKTsKKworICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBS
ZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBj
YWNoZXMgdGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2Fs
IGxvY2F0aW9uIGlzLgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0
aWNfY2FzdDxJbnN0YW5jZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFja0xpbWl0KCkpKSA9PSBzaXpl
b2YodWludDY0X3QpLCAiIik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlk
QWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpLCBC
Mzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9y
bShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCksIEIzOjpXaWR0aDY0KSk7Cisg
ICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgQXJn
OjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFs
U3RhY2tMaW1pdCgpKSwgdGVtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgQXJnOjph
ZGRyKHRlbXApLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCB0ZW1wLCBBcmc6
OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0
KCkpKTsKKyAgICB9CisKKyAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgY29uc3QgUGlubmVk
UmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7Cisg
ICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJzOworICAgICAgICBjbG9iYmVycy5zZXQocGlubmVk
UmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOworICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5l
ZFJlZ3MtPnNpemVSZWdpc3RlcnMpCisgICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXpl
UmVnaXN0ZXIpOworCisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIz
OjpWb2lkKTsKKyAgICAgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25l
KCk7CisgICAgICAgIGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgZWZmZWN0
cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzID0gZWZmZWN0czsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVycyk7CisK
KyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9p
bnRlcjsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy0+c2l6
ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93
aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50
IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ld
LnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVS
ZWdpc3Rlcik7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9p
bnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpl
bWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEV4Y2VwdGlvblR5cGUgdHlwZSkK
K3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1
aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGF1dG8ganVtcFRv
RXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBqaXQuYWRkTGlua1Rhc2soW2p1bXBU
b0V4Y2VwdGlvblN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIGxpbmtC
dWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVu
a1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21U
aHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNr
ZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCArPSBtX2xvY2Fscy5zaXplKCk7Cisg
ICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NPTVBJTEVfRkFJTF9JRigodG90YWxC
eXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJm
bG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3Qg
YWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGxvY2FscyIpOworCisgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDogewor
ICAgICAgICAgICAgVG1wIGxvY2FsID0gZ3ByKCk7CisgICAgICAgICAgICBtX2xvY2Fscy51bmNo
ZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIGFwcGVuZChYb3I2NCwg
bG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDogeworICAgICAgICAgICAgVG1w
IGxvY2FsID0gZnByKCk7CisgICAgICAgICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQoeyBs
b2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgICAgICAg
ICAvLyBJRUVFIDc1NCAiMCIgaXMganVzdCBpbnQzMi82NCB6ZXJvLgorICAgICAgICAgICAgYXBw
ZW5kKFhvcjY0LCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgICAgIGFwcGVuZCh0eXBlID09IFR5cGU6
OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwgdGVtcCwgbG9jYWwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFM6IElzIHRoaXMgY29ycmVjdD8K
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9u
VHlwZQoreworICAgIFRtcCByZXN1bHQ7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBU
eXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCByZXN1bHQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDogeworICAg
ICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgVG1wIHRtcCA9IGdwcigpOworICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCB0bXApOworICAgICAgICBhcHBlbmQodHlw
ZSA9PSBUeXBlOjpGMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9Eb3VibGUsIHRtcCwgcmVz
dWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9j
YWxzLnNpemUoKSA9PSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsgLy8gV2UgaGFuZGxlIGFy
Z3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3Qp
OworICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XS5maXJzdC5pc0dQKCkgPyBncHIoKSA6IGZw
cigpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnNlY29u
ZCksIG1fbG9jYWxzW2luZGV4XS5maXJzdCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJsZSA9IGFkZFBhdGNocG9pbnQo
QjM6OlZvaWQpOworICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6VW5yZWFjaGFi
bGUpOworICAgIH0pOworICAgIHVucmVhY2hhYmxlLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsK
KyAgICBlbWl0UGF0Y2hwb2ludCh1bnJlYWNoYWJsZSwgVG1wKCkpOworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUg
ZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBp
bnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAodm9p
ZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGludDMyX3QgZGVsdGEpIC0+IGludDMy
X3QgeworICAgICAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKwor
ICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAg
IGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5KCktPmdyb3coUGFnZUNvdW50KGRlbHRhKSk7
CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3Io
KSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVs
dGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93
U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNl
ZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRP
Zk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CisgICAgfTsKKworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGVtaXRDQ2FsbChncm93TWVtb3J5LCByZXN1bHQsIFRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOworICAgIHJlc3Rv
cmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpObywgbV9p
bmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRyKS0+c2l6ZSgpKSkg
PT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOworCisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKworICAgIFJFTEVB
U0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGlu
c3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgdGVt
cDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7CisgICAgc3RhdGlj
X2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMg
bXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOworICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmltbSgxNiksIHJlc3VsdCk7CisgICAgYWRkU2hpZnQoVXJzaGlmdDY0LCB0
ZW1wMSwgcmVzdWx0LCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlMzIsIHJlc3VsdCwgcmVzdWx0
KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldExvY2Fs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAgIGFwcGVuZChtb3ZlT3BG
b3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnNlY29uZCksIHZhbHVlLCBtX2xvY2Fsc1tpbmRl
eF0uZmlyc3QpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6Omdl
dEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOwor
CisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAgIFRtcCB0ZW1wID0gZ3ByKCk7
CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zm
c2V0T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRk
cihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSksIHRlbXApOwor
CisgICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihS
ZWdpc3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0
aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVl
VHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3VsdCk7CisgICAgZWxzZSB7
CisgICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpi
aWdJbW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1w
LCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjph
ZGRyKHRlbXApLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIHRlbXAgPSBncHIoKTsKKworICAgIFJF
TEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkdsb2Jh
bHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNl
VmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwgdGVtcCk7CisKKyAgICBUeXBl
IHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKworICAgIGludDMyX3Qgb2Zmc2V0
ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBpZiAo
QXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHRvQjNUeXBlKHR5
cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIHZhbHVlLCBB
cmc6OmFkZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCB0ZW1wMiA9
IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIp
OworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBw
ZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1wKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFpcklSR2VuZXJhdG9yOjpFeHBy
ZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVy
YXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBUbXAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcG9pbnRlciwgcmVzdWx0KTsKKworICAgIHN3
aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogewor
CisgICAgICAgIC8vIFdlJ3JlIG5vdCB1c2luZyBzaWduYWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBt
dXN0IHRoZXJlZm9yZSBjaGVjayB0aGF0IG5vIG1lbW9yeSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3Vy
cmVudCBtZW1vcnkgc2l6ZS4KKyAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6ZUdQUik7CisgICAg
ICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQpOworICAgICAgICBU
bXAgdGVtcCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oc2l6ZU9m
T3BlcmF0aW9uICsgb2Zmc2V0IC0gMSksIHRlbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIHJl
c3VsdCwgdGVtcCk7CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBhcHBl
bmQoQnJhbmNoNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwg
dGVtcCwgVG1wKG1fbWVtb3J5U2l6ZUdQUikpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHsKKyAgICAgICAgLy8gV2UndmUgdmlydHVh
bGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUgZm9yIHRoaXMgbWVtb3J5LiBPbmx5IHRoZSB1c2VyLWFs
bG9jYXRlZCBwYWdlcyBhcmUgYWRkcmVzc2FibGUsIGNvbnRpZ3VvdXNseSBpbiByYW5nZSBbMCwg
Y3VycmVudF0sCisgICAgICAgIC8vIGFuZCBldmVyeXRoaW5nIGFib3ZlIGlzIG1hcHBlZCBQUk9U
X05PTkUuIFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkgZXhwbGljaXQgYm91bmRzIGNoZWNr
IGluIHRoZSA0R2lCIHJhbmdlIGJlY2F1c2UgV2ViQXNzZW1ibHkgcmVnaXN0ZXIKKyAgICAgICAg
Ly8gbWVtb3J5IGFjY2Vzc2VzIGFyZSAzMi1iaXQuIEhvd2V2ZXIgV2ViQXNzZW1ibHkgcmVnaXN0
ZXIgKyBvZmZzZXQgYWNjZXNzZXMgcGVyZm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNo
IGNhbiBwdXNoIGFuIGFjY2VzcyBhYm92ZQorICAgICAgICAvLyB0aGUgMzItYml0IGxpbWl0ICh0
aGUgb2Zmc2V0IGlzIHVuc2lnbmVkIDMyLWJpdCkuIFRoZSByZWR6b25lIHdpbGwgY2F0Y2ggbW9z
dCBzbWFsbCBvZmZzZXRzLCBhbmQgd2UnbGwgZXhwbGljaXRseSBib3VuZHMgY2hlY2sgYW55Cisg
ICAgICAgIC8vIHJlZ2lzdGVyICsgbGFyZ2Ugb2Zmc2V0IGFjY2Vzcy4gV2UgZG9uJ3QgdGhpbmsg
dGhpcyB3aWxsIGJlIGdlbmVyYXRlZCBmcmVxdWVudGx5LgorICAgICAgICAvLworICAgICAgICAv
LyBXZSBjb3VsZCBjaGVjayB0aGF0IHJlZ2lzdGVyICsgbGFyZ2Ugb2Zmc2V0IGRvZXNuJ3QgZXhj
ZWVkIDRHaUIrcmVkem9uZSBzaW5jZSB0aGF0J3MgdGVjaG5pY2FsbHkgdGhlIGxpbWl0IHdlIG5l
ZWQgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgdGhlCisgICAgICAgIC8vIFBST1RfTk9ORSByZWdpb24s
IGJ1dCBpdCdzIGJldHRlciBpZiB3ZSB1c2UgYSBzbWFsbGVyIGltbWVkaWF0ZSBiZWNhdXNlIGl0
IGNhbiBjb2RlZ2VucyBiZXR0ZXIuIFdlIGtub3cgdGhhdCBhbnl0aGluZyBlcXVhbCB0byBvciBn
cmVhdGVyCisgICAgICAgIC8vIHRoYW4gdGhlIGRlY2xhcmVkICdtYXhpbXVtJyB3aWxsIHRyYXAs
IHNvIHdlIGNhbiBjb21wYXJlIGFnYWluc3QgdGhhdCBudW1iZXIuIElmIHRoZXJlIHdhcyBubyBk
ZWNsYXJlZCAnbWF4aW11bScgdGhlbiB3ZSBzdGlsbCBrbm93IHRoYXQKKyAgICAgICAgLy8gYW55
IGFjY2VzcyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gNEdpQiB3aWxsIHRyYXAsIG5vIG5lZWQg
dG8gYWRkIHRoZSByZWR6b25lLgorICAgICAgICBpZiAob2Zmc2V0ID49IE1lbW9yeTo6ZmFzdE1h
cHBlZFJlZHpvbmVCeXRlcygpKSB7CisgICAgICAgICAgICBzaXplX3QgbWF4aW11bSA9IG1faW5m
by5tZW1vcnkubWF4aW11bSgpID8gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkuYnl0ZXMoKSA6IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKworICAgICAgICAgICAgVG1wIHRl
bXAgPSBncHIoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShzaXplT2ZP
cGVyYXRpb24gKyBvZmZzZXQgLSAxKSwgdGVtcCk7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQs
IHJlc3VsdCwgdGVtcCk7CisgICAgICAgICAgICBUbXAgc2l6ZVRlbXAgPSBncHIoKTsgCisgICAg
ICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0obWF4aW11bSksIHNpemVUZW1wKTsKKwor
ICAgICAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKEJyYW5j
aDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIHRlbXAsIHNp
emVUZW1wKTsKKyAgICAgICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nl
c3MpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIH0KKworICAgIGFwcGVuZChBZGQ2NCwgVG1wKG1fbWVtb3J5QmFzZUdQUiksIHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChM
b2FkT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToKKyAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VToKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOgorICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQx
NlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgorICAgICAgICByZXR1cm4gMjsK
KyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkMzJTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICBjYXNlIExvYWRP
cFR5cGU6OkYzMkxvYWQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6CisgICAgICAgIHJldHVybiA4
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUg
VG1wIEFpcklSR2VuZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCit7CisgICAgaW50MzJfdCBvZmZzZXQgPSBm
aXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOworCisgICAgVG1wIGltbVRt
cDsKKyAgICBUbXAgbmV3UHRyOworICAgIFRtcCByZXN1bHQ7CisKKyAgICBhdXRvIGxvYWRBcmcg
PSBbJl0gKCkgeworICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6
d2lkdGhGb3JCeXRlcyhzaXplT2ZMb2FkT3Aob3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJn
OjphZGRyKHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIGltbVRtcCA9IGdwcigpOworICAgICAg
ICBuZXdQdHIgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNl
dCksIGltbVRtcCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQ
dHIpOworICAgICAgICByZXR1cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3
aXRjaCAob3ApIHsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzogeworICAgICAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbG9h
ZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQ4UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBw
ZW5kKExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBh
cHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6IHsKKyAgICAgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkOCwgbG9hZEFyZygpLCByZXN1bHQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VTog
eworICAgICAgICAvLyBPT1BTOiBEbyBJIG5lZWQgYW5vdGhlciB6ZXh0IGhlcmU/CisgICAgICAg
IHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDgsIGxvYWRBcmcoKSwgcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2Fk
MTZTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTG9hZDE2U2ln
bmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6IHsKKyAgICAgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkMTZTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCks
IHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1
bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxv
YWQxNlU6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChMb2FkMTYs
IGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBM
b2FkT3BUeXBlOjpJNjRMb2FkMTZVOiB7CisgICAgICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90
aGVyIHpleHQgaGVyZT8KKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChM
b2FkMTYsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMy
VTogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgbG9h
ZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQzMlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFw
cGVuZChNb3ZlMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRl
bmQzMlRvUHRyLCByZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICAgICAgYXBwZW5kKE1vdmUsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9
IGZwcigpOworICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCBsb2FkQXJnKCksIHJlc3VsdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDogewor
ICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwg
RXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qg
b2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBvaW50ZXIuaXNHUCgpKTsK
KworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9m
TG9hZE9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlzIHBy
b3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28gd2Ug
aGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gSG93
ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY2NDM1CisgICAgICAgIGF1dG8qIHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9p
ZCk7CisgICAgICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRo
aXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVt
b3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNoLCBU
bXAoKSk7CisKKyAgICAgICAgLy8gV2Ugd29uJ3QgcmVhY2ggaGVyZSwgc28gd2UganVzdCBwaWNr
IGEgcmFuZG9tIHJlZy4KKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIExvYWRP
cFR5cGU6OkkzMkxvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOgor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STMyTG9hZDE2VToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAg
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQ4VToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgICAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDMyUzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOgorICAgICAgICBj
YXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgICAgICByZXN1bHQgPSBncHIoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGZw
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0gZWxzZQorICAgICAg
ICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2lu
dGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCit7
CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAg
ICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNh
c2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3Rv
cmUxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBl
OjpGMzJTdG9yZToKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0
U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIHJldHVybiA4
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2lubGlu
ZSB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQp
Cit7CisgICAgaW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIs
IHVvZmZzZXQpOworCisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgYXV0
byBzdG9yZUFyZyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShv
ZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZlN0b3JlT3Aob3ApKSkpCisgICAgICAgICAg
ICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIGltbVRtcCA9IGdw
cigpOworICAgICAgICBuZXdQdHIgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBw
b2ludGVyLCBuZXdQdHIpOworICAgICAgICByZXR1cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAg
fTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4
LCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVP
cFR5cGU6Okk2NFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAg
ICAgICAgYXBwZW5kKFN0b3JlMTYsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJMzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgdmFsdWUsIHN0b3JlQXJnKCkp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAg
ICAgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxv
YXQsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgc3Rv
cmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQz
Ml90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLmlzR1Ao
KSk7CisKKyAgICBpZiAoVU5MSUtFTFkoc3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNp
emVPZlN0b3JlT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMg
aXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBz
byB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9u
LiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogdGhyb3dFeGNlcHRpb24gPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihb
dGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQodGhyb3dFeGNlcHRpb24sIFRtcCgpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFN0b3JlT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9m
ZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobm9u
WmVyby5pc0dQKCkgPT0gemVyby5pc0dQKCkpOworICAgIHJlc3VsdCA9IG5vblplcm8uaXNHUCgp
ID8gZ3ByKCkgOiBmcHIoKTsKKyAgICBpZiAobm9uWmVyby5pc0dQKCkpCisgICAgICAgIGFwcGVu
ZChNb3ZlLCBub25aZXJvLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIG5vblplcm8sIHJlc3VsdCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc1plcm8gPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRk
QmxvY2soKTsKKworICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6WmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9j
ay0+c2V0U3VjY2Vzc29ycyhpc1plcm8sIGNvbnRpbnVhdGlvbik7CisKKyAgICBpZiAoemVyby5p
c0dQKCkpCisgICAgICAgIGFwcGVuZChpc1plcm8sIE1vdmUsIHplcm8sIHJlc3VsdCk7CisgICAg
ZWxzZQorICAgICAgICBhcHBlbmQoaXNaZXJvLCBNb3ZlRG91YmxlLCB6ZXJvLCByZXN1bHQpOwor
ICAgIGFwcGVuZChpc1plcm8sIEp1bXApOworICAgIGlzWmVyby0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWlu
dDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4gb3JpZ2luKQoreworICAgIFVOVVNFRF9Q
QVJBTShvcmlnaW4pOyAvLyBPT1BTCisKKyAgICBpZiAoIW1fdGllclVwKQorICAgICAgICByZXR1
cm47CisKKyAgICBUbXAgY291bnRkb3duUHRyID0gZ3ByKCk7CisgICAgVG1wIG9sZENvdW50ZG93
biA9IGdwcigpOworICAgIFRtcCBuZXdDb3VudGRvd24gPSBncHIoKTsKKworICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbShyZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihtX3RpZXJVcCkpLCBj
b3VudGRvd25QdHIpOworICAgIGFwcGVuZChNb3ZlMzIsIEFyZzo6YWRkcihjb3VudGRvd25QdHIp
LCBvbGRDb3VudGRvd24pOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkSW1tRm9y
bShkZWNyZW1lbnRDb3VudCkpOworICAgIGFwcGVuZChNb3ZlMzIsIG9sZENvdW50ZG93biwgbmV3
Q291bnRkb3duKTsKKyAgICBhcHBlbmQoU3ViMzIsIEFyZzo6aW1tKGRlY3JlbWVudENvdW50KSwg
bmV3Q291bnRkb3duKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBuZXdDb3VudGRvd24sIEFyZzo6YWRk
cihjb3VudGRvd25QdHIpKTsKKworICAgIGF1dG8qIHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6
Vm9pZCk7CisgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIGVmZmVjdHMud3Jp
dGVzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgcGF0Y2gtPmVmZmVjdHMgPSBlZmZlY3Rz
OworCisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgdGllclVwID0gaml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgcGFyYW1z
LmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIHRpZXJV
cC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYVBhZGRpbmdC
eXRlcyA9IDA7CisgICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsID0geyB9
OworICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbC5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVz
KTsKKworICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiht
X2Z1bmN0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVz
VXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRlcyk7CisgICAgICAg
ICAgICBqaXQuanVtcCh0aWVyVXBSZXN1bWUpOworCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxO
b1B0clRhZz4oY2FsbCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6
OnNpbmdsZXRvbigpLnN0dWIodHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKKworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZW1pdFBh
dGNocG9pbnQocGF0Y2gsIFRtcCgpLCBuZXdDb3VudGRvd24sIG9sZENvdW50ZG93bik7Cit9CisK
K0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBl
IHNpZ25hdHVyZSkKK3sKKyAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAg
ICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoYm9keSk7
CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7CisgICAgZW1pdFRpZXJVcENoZWNrKFRpZXJV
cENvdW50Ojpsb29wRGVjcmVtZW50KCksIG9yaWdpbigpKTsKKworICAgIHJldHVybiBDb250cm9s
RGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlw
ZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkKK3sKKyAg
ICByZXR1cm4gQ29udHJvbERhdGEoQjM6Ok9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUo
c2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9jb2RlLmFkZEJsb2NrKCkpOworfQor
CitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZEJsb2NrKFR5
cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0
dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6QmxvY2ssIG1fY29kZS5hZGRC
bG9jaygpKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAKKyAgICAvLyBXYXNt
IGJvb2xzIGFyZSBpMzIuCisgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRha2VuLCBub3RUYWtlbik7CisKKyAgICBtX2N1cnJl
bnRCbG9jayA9IHRha2VuOworICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWdu
YXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9u
LCBub3RUYWtlbik7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRT
dGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJl
bnRTdGFjaywgZGF0YS5yZXN1bHQpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZEVs
c2VUb1VucmVhY2hhYmxlKGRhdGEpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNl
VG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IGRhdGEuc3BlY2lhbDsKKyAgICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJv
bERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNpemUoKSA8PSAxKTsKKyAgICBp
ZiAocmV0dXJuVmFsdWVzLnNpemUoKSkgeworICAgICAgICBUbXAgcmV0dXJuVmFsdWVHUFIgPSBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBUbXAgcmV0dXJuVmFsdWVGUFIg
PSBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBzd2l0Y2ggKGRhdGEuc2ln
bmF0dXJlKCkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBhcHBlbmQo
TW92ZTMyLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFw
cGVuZChSZXQzMiwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHJldHVyblZhbHVlc1sw
XSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldDY0LCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAg
ICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlRlBS
KTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0dXJuVmFsdWVGUFIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5k
KE1vdmVEb3VibGUsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAg
ICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYXBwZW5kKFJldFZvaWQpOworICAg
IHJldHVybiB7IH07Cit9CisKKy8vIE5PVEU6IEFsbCBicmFuY2hlcyBpbiBXYXNtIGFyZSBvbiAz
Mi1iaXQgaW50cworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEm
IGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
dHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBCYXNpY0Jsb2Nr
KiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAgaWYgKGNvbmRpdGlv
bikgeworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIGFwcGVuZChK
dW1wKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0KTsKKyAg
ICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTd2l0
Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYg
dGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cmVzdWx0Rm9yQnJhbmNoKCkpOworICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGVmYXVsdFRhcmdldC5yZXN1
bHRGb3JCcmFuY2goKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gdGFyZ2V0c1tpXS0+dGFy
Z2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIFRtcCBjb25zdGFudCA9IGdwcigpOworICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oaSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5k
KEJyYW5jaDMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgY29uc3RhbnQs
IGNvbmRpdGlvbik7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdl
dCwgY29udGludWF0aW9uKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKyAgICB9CisKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1
Y2Nlc3NvcnMoZGVmYXVsdFRhcmdldC50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKTsKKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRy
eSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworCisgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAg
YXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29u
dGludWF0aW9uKTsKKworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5KTsKK30K
KworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRy
eSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVu
dHJ5LmNvbnRyb2xEYXRhOworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247
CisKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgeworICAgICAgICBhcHBl
bmQoZGF0YS5zcGVjaWFsLCBKdW1wKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNz
b3JzKG1fY3VycmVudEJsb2NrKTsKKyAgICB9CisKKyAgICBmb3IgKFRtcCByZXN1bHQgOiBkYXRh
LnJlc3VsdCkKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJl
c3VsdCk7CisKKyAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRo
aXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgorICAgIGlm
IChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQorICAgICAgICByZXR1cm4gYWRk
UmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKworICAgIHJldHVy
biB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAg
ICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJl
LnJldHVyblR5cGUoKTsKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFR5cGU6
OlZvaWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlw
ZTo6STY0OgorICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUeXBlOjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIHJlc3VsdCA9IGZwcigp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsK
KworICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KSkgeworICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0
ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJn
cy5zaXplKCkpKTsKKworICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNhbiBiZSBsaW5rZWQgaGVy
ZSwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVjYXVzZSBhbGwgaW1wb3J0
IHN0dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9uIHN0YXJ0cy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgorICAgICAgICBUbXAgdGFy
Z2V0SW5zdGFuY2UgPSBncHIoKTsKKyAgICAgICAgLy8gT09QUzogVHJ5IHRvIGlzZWwgdGhpcyBi
ZXR0ZXIKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKEluc3RhbmNlOjpvZmZzZXRP
ZlRhcmdldEluc3RhbmNlKGZ1bmN0aW9uSW5kZXgpKSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAg
ICBhcHBlbmQoQWRkNjQsIGluc3RhbmNlVmFsdWUoKSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKHRhcmdldEluc3RhbmNlKSwgdGFyZ2V0SW5zdGFuY2Up
OworCisgICAgICAgIEJhc2ljQmxvY2sqIGlzV2FzbUJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJCbG9jayA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsK
KworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8pLCB0YXJnZXRJbnN0YW5jZSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1dhc21CbG9jaywgaXNFbWJlZGRlckJsb2Nr
KTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
LnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBh
bGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0
aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdl
IGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgor
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKworICAgICAgICAgICAgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25B
aXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0g
KFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgICAgICBwYXRjaEFyZ3Mu
YXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25J
bmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbklu
ZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChp
c1dhc21CbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAg
ICAgICAgICAgYXBwZW5kKGlzV2FzbUJsb2NrLCBKdW1wKTsKKyAgICAgICAgICAgIGlzV2FzbUJs
b2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICB7
CisgICAgICAgICAgICBUbXAganVtcERlc3RpbmF0aW9uID0gZ3ByKCk7CisgICAgICAgICAgICBh
cHBlbmQoaXNFbWJlZGRlckJsb2NrLCBNb3ZlLCBBcmc6OmJpZ0ltbShJbnN0YW5jZTo6b2Zmc2V0
T2ZXYXNtVG9FbWJlZGRlclN0dWIoZnVuY3Rpb25JbmRleCkpLCBqdW1wRGVzdGluYXRpb24pOwor
ICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgQWRkNjQsIGluc3RhbmNlVmFsdWUo
KSwganVtcERlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ss
IE1vdmUsIEFyZzo6YWRkcihqdW1wRGVzdGluYXRpb24pLCBqdW1wRGVzdGluYXRpb24pOworCisg
ICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1
cm5UeXBlKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5l
ZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAg
ICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcg
dG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJM
YXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nKSk7CisKKyAgICAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdz
OworICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChqdW1wRGVzdGluYXRpb24pOworCisgICAg
ICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1
cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXAp
IHsKKyAgICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1
cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJh
bXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGVtaXRQYXRjaHBvaW50KGlzRW1iZWRkZXJC
bG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAg
ICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgSnVtcCk7CisgICAgICAgICAgICBpc0VtYmVkZGVy
QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgICAgICAvLyBUaGUgY2FsbCBjb3Vs
ZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291
bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlH
bG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBp
bnN0YW5jZVZhbHVlKCksIGNvbnRpbnVhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0
byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgIFZlY3RvcjxD
b25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25B
aXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0g
KFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBl
bmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBh
dGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQo
eyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBm
dW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg
IGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1v
dmUocGF0Y2hBcmdzKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRh
a2VMYXN0KCk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5z
aXplKCkpOworCisgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGlu
ZGlyZWN0IGNhbiBjYWxsIGVpdGhlciBXZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLiBCZWNhdXNlCisgICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24gaXMgbGlrZSBjYWxsaW5nIGludG8gdGhlIGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBh
c3N1bWUgYWxsIGNhbGwgaW5kaXJlY3RzCisgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBm
b3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1bGF0aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1l
bnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhcmdzLnNpemUoKSkpOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlciA9IGdwcigpOworICAgIEV4cHJlc3Npb25UeXBlIGluc3RhbmNlc0J1ZmZlciA9IGdw
cigpOworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGggPSBn
cHIoKTsKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3Jt
KEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygp
LCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mTGVuZ3Ro
KCksIEIzOjpXaWR0aDY0KSk7CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0
YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpLCBjYWxsYWJsZUZ1bmN0aW9u
QnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSksIGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpKSwgaW5zdGFu
Y2VzQnVmZmVyKTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwgY2FsbGFibGVGdW5j
dGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUzMiwgY2FsbGVlSW5k
ZXgsIGNhbGxlZUluZGV4KTsKKworICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2lu
ZyBmb3IgaXMgdmFsaWQuCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChCcmFu
Y2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBjYWxsZWVJ
bmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfSwgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNDYWxsSW5kaXJlY3QpOworICAgIH0pOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29k
ZSA9IGdwcigpOworICAgIHsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJl
SW5kZXggPSBncHIoKTsKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJs
ZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmltbShzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpLCBjYWxsZWVTaWdu
YXR1cmVJbmRleCk7CisgICAgICAgIGFwcGVuZChNdWw2NCwgY2FsbGVlSW5kZXgsIGNhbGxlZVNp
Z25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIGNhbGxlZUNvZGUpOyAv
LyBQb2ludGVyIHRvIGNhbGxlZSBjb2RlLgorCisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQg
aXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5p
dGlhbGl6ZWQuCisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywg
d2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJ
bmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEw
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFz
c3VtZXMgaTY0Iik7CisgICAgICAgIC8vIE9PUFM6IFRoaXMgc2VlbXMgZHVtYiB0byBkbyB0d28g
Y2hlY2tzIGp1c3QgZm9yIGEgbmljZXIgZXJyb3IgaGVyZS4uLgorCisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4
KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
U2lnbmF0dXJlOjppbnZhbGlkSW5kZXggPT0gMCwgIiIpOworICAgICAgICAgICAgYXBwZW5kKEJy
YW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgY2FsbGVlU2ln
bmF0dXJlSW5kZXgsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgfSwgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok51
bGxUYWJsZUVudHJ5KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gZ3ByKCk7
CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmUpKSwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAgICAg
ICBhcHBlbmQoQnJhbmNoNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwp
LCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAg
IH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNl
cHRpb25UeXBlOjpCYWRTaWduYXR1cmUpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBE
byBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFRtcCBuZXdDb250
ZXh0SW5zdGFuY2UgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW5kZXgoaW5z
dGFuY2VzQnVmZmVyLCBjYWxsZWVJbmRleCwgOCwgMCksIG5ld0NvbnRleHRJbnN0YW5jZSk7CisK
KyAgICAgICAgQmFzaWNCbG9jayogZG9Db250ZXh0U3dpdGNoID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOwor
CisgICAgICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBkb0NvbnRleHRTd2l0Y2gp
OworCisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAg
ICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdp
dGggQm91bmRzQ2hlY2tpbmcgbWVtb3J5LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0
IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MjE4MQorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAg
ICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdp
c3RlckluZm86OmdldCgpOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBp
bm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4
dEluc3RhbmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
YmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVXYXNtQ29udGV4dEluc3RhbmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUg
cmVnaXN0ZXIKKyAgICAgICAgICAgIC8vICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgp
ID09IDEpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBu
ZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXpl
T2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhu
ZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSks
IHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2
b2lkKi4KKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZG9Db250ZXh0U3dp
dGNoLCBwYXRjaHBvaW50LCBUbXAoKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVl
KCkpOworICAgICAgICBhcHBlbmQoZG9Db250ZXh0U3dpdGNoLCBKdW1wKTsKKyAgICAgICAgZG9D
b250ZXh0U3dpdGNoLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YWRkcihjYWxsZWVDb2RlKSwgY2FsbGVlQ29kZSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUg
PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAg
IGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpJMzI6Cisg
ICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYXV0byogcGF0Y2ggPSBhZGRQ
YXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy53cml0
ZXNQaW5uZWQgPSB0cnVlOworICAgIHBhdGNoLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsK
KyAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJz
IHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgIC8vIFdlIHBlc3Np
bWlzdGljYWxseSBhc3N1bWUgd2UncmUgYWx3YXlzIGNhbGxpbmcgc29tZXRoaW5nIHRoYXQgaXMg
Ym91bmRzIGNoZWNraW5nIHNvCisgICAgLy8gYmVjYXVzZSB0aGUgd2FzbS0+d2FzbSB0aHVuayB1
bmNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lzdGVycy4KKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHVi
IGFzc3VtZXMgaXQgY2FuCisgICAgLy8gdXNlIGFsbCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhcyBz
Y3JhdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisg
ICAgcGF0Y2gtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
IGVtaXRBcmdzOworICAgIGVtaXRBcmdzLmFwcGVuZChjYWxsZWVDb2RlKTsKKyAgICB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaCwg
YXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgIGVtaXRBcmdz
LmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgIH0pOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9p
ZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICB9KTsKKworICAgIGVtaXRQ
YXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgcmVzdWx0LCBXVEZNb3ZlKGVtaXRBcmdz
KSk7CisKKyAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3Nl
bWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5Lgor
ICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2spOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3Qg
RXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUmIHNvdXJjZSkKK3sKKyAg
ICAvLyBPT1BTOiBXZSBraW5kYSB3YW50IHR5cGVzIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2
NC9mMzIvZjY0IQorICAgIFJFTEVBU0VfQVNTRVJUKGRzdC5pc0dQKCkgPT0gc291cmNlLmlzR1Ao
KSk7CisgICAgYXBwZW5kKGRzdC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgc291cmNlLCBk
c3QpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdCkK
K3sKKyAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSByZXN1bHRTdGFjay5zaXplKCkpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCisgICAgICAgIHVu
aWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFja1tyZXN1bHRTdGFj
ay5zaXplKCkgLSAxIC0gaV0pOworfQorCisvL3N0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3Rh
Y2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgQWlySVJHZW5lcmF0b3I6OkV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCisvL3sKKy8vICAgIGRhdGFMb2coY29tbWEsICJF
eHByZXNzaW9uU3RhY2s6Iik7CisvLyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cHJlc3Npb24gOiBl
eHByZXNzaW9uU3RhY2spCisvLyAgICAgICAgZGF0YUxvZyhjb21tYSwgKmV4cHJlc3Npb24pOwor
Ly99CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRy
eT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjaykK
K3sKKyAgICBVTlVTRURfUEFSQU0oY29udHJvbFN0YWNrKTsKKyAgICBVTlVTRURfUEFSQU0oZXhw
cmVzc2lvblN0YWNrKTsKKworICAgIC8vIE9PUFMhCisgICAgLyoKKyAgICBkYXRhTG9nTG4oIlBy
b2Nlc3NpbmcgR3JhcGg6Iik7CisgICAgZGF0YUxvZyhtX2NvZGUpOworICAgIGRhdGFMb2dMbigi
V2l0aCBjdXJyZW50IGJsb2NrOiIsICptX2N1cnJlbnRCbG9jayk7CisgICAgZGF0YUxvZ0xuKCJD
b250cm9sIHN0YWNrOiIpOworICAgIEFTU0VSVChjb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gY29udHJvbFN0YWNrLnNpemUoKTsgaS0tOykgeworICAgICAgICBkYXRh
TG9nKCIgICIsIGNvbnRyb2xTdGFja1tpXS5jb250cm9sRGF0YSwgIjogIik7CisgICAgICAgIENv
bW1hUHJpbnRlciBjb21tYSgiLCAiLCAiIik7CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2so
Y29tbWEsICpleHByZXNzaW9uU3RhY2spOworICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29u
dHJvbFN0YWNrW2ldLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBkYXRhTG9nTG4o
KTsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCk7CisgICAgKi8KK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgoreworICAgIHJldHVybiBCMzo6T3JpZ2luKCk7
CisgICAgLy9PcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1f
cGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CisgICAgLy9BU1NFUlQoaXNW
YWxpZE9wVHlwZShzdGF0aWNfY2FzdDx1aW50OF90PihvcmlnaW4ub3Bjb2RlKCkpKSk7CisgICAg
Ly9yZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsKK30KKworRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFp
cihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwg
Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
VGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlv
bikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlv
bj4oKTsKKworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBz
dGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKwor
ICAgIEIzOjpQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGUgPSBwcm9jZWR1cmUu
Y29kZSgpOworCisgICAgcHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFt
JiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KCJXYXNtOiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2lu
PihvcmlnaW4pKTsKKyAgICB9KTsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1
c2UgZWl0aGVyIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCisg
ICAgLy8gU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1bmF2YWlsYWJsZVJlZ2lzdGVycygpLiBJ
biBleGNoYW5nZSBmb3IgdGhpcyBjb25jZXNzaW9uLCB3ZQorICAgIC8vIGRvbid0IHN0cmljdGx5
IG5lZWQgdG8gcnVuIEFpcjo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLCB3aGljaCBzYXZlcyBhIGJp
dCBvZiBDUFUgdGltZSBhdAorICAgIC8vIG9wdExldmVsPTEuCisgICAgLy8gT09QUzogRG8gd2Ug
bmVlZCB0aGlzPyBTaG91bGQgd2UganVzdCBzZXQgaXQgZGlyZWN0bHkgb24gQ29kZT8KKyAgICBw
cm9jZWR1cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKKyAgICAKKyAgICBwcm9jZWR1
cmUuc2V0T3B0TGV2ZWwoY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZQorICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQor
ICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CisK
KyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5n
ZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVu
Y3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAg
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CisKKworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgKytpKQorICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvckJsb2Nr
KGkpLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CisgICAgfQorICAgIC8vQjM6OkFpcjo6dmFsaWRh
dGUoY29kZSk7CisgICAgLy8gT09QUzogVmFsaWRhdGUgJ2NvZGUnIGhlcmUhCisgICAgCisgICAg
eworICAgICAgICBCMzo6QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihjb2RlKTsKKyAgICAgICAg
QjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVj
dHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRy
eXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zm
c2V0TGlzdCgpOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNr
c0Zvck1vZE9yRGl2KGJvb2wgaXNTaWduZWREaXYsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJl
c3Npb25UeXBlIHJpZ2h0KQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09
IDQgfHwgc2l6ZW9mKEludFR5cGUpID09IDgsICIiKTsKKworICAgIGVtaXRDaGVjayhbJl0gewor
ICAgICAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBCcmFuY2hUZXN0MzIgOiBCcmFu
Y2hUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJpZ2h0LCByaWdo
dCk7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwg
RXhjZXB0aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgIH0pOworCisgICAgaWYgKGlzU2ln
bmVkRGl2KSB7CisgICAgICAgIEFTU0VSVChzdGQ6OmlzX3NpZ25lZDxJbnRUeXBlPjo6dmFsdWUp
OworICAgICAgICBpbnQ2NF90IG1pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8SW50VHlwZT46Om1p
bigpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8gT09QUzogVHJ5
IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAgICAgICAgICBUbXAgbWluVG1wID0g
Z3ByKCk7CisgICAgICAgICAgICBUbXAgbmVnT25lID0gZ3ByKCk7CisKKyAgICAgICAgICAgIEIz
OjpBaXI6Ok9wY29kZSBvcCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQ29tcGFyZTMyIDogQ29t
cGFyZTY0OworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG1pbiksIG1pblRt
cCk7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwpLCBsZWZ0LCBtaW5UbXAsIG1pblRtcCk7CisKKyAgICAgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmltbSgtMSksIG5lZ09uZSk7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdodCwgbmVnT25lLCBuZWdPbmUpOworCisg
ICAgICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBl
OjpJbnRlZ2VyT3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50MzJfdD4odHJ1
ZSwgbGVmdCwgcmlnaHQpOworCisgICAgaW50MzJfdCAoKmRpdikoaW50MzJfdCwgaW50MzJfdCkg
PSBbXSAoaW50MzJfdCBhLCBpbnQzMl90IGIpIC0+IGludDMyX3QgeyByZXR1cm4gYSAvIGI7IH07
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdENDYWxsKGRpdiwgcmVzdWx0LCBsZWZ0LCBy
aWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjxpbnQzMl90PihmYWxzZSwgbGVmdCwgcmlnaHQp
OworCisgICAgaW50MzJfdCAoKnJlbSkoaW50MzJfdCwgaW50MzJfdCkgPSBbXSAoaW50MzJfdCBh
LCBpbnQzMl90IGIpIC0+IGludDMyX3QgeyByZXR1cm4gYSAlIGI7IH07CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgZW1pdENDYWxsKHJlbSwgcmVzdWx0LCBsZWZ0LCByaWdodCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJEaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVj
a3NGb3JNb2RPckRpdjx1aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKworICAgIHVpbnQz
Ml90ICgqZGl2KSh1aW50MzJfdCwgdWludDMyX3QpID0gW10gKHVpbnQzMl90IGEsIHVpbnQzMl90
IGIpIC0+IHVpbnQzMl90IHsgcmV0dXJuIGEgLyBiOyB9OworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGVtaXRDQ2FsbChkaXYsIHJlc3VsdCwgbGVmdCwgcmlnaHQpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JN
b2RPckRpdjx1aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKworICAgIHVpbnQzMl90ICgq
cmVtKSh1aW50MzJfdCwgdWludDMyX3QpID0gW10gKHVpbnQzMl90IGEsIHVpbnQzMl90IGIpIC0+
IHVpbnQzMl90IHsgcmV0dXJuIGEgJSBiOyB9OworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVt
aXRDQ2FsbChyZW0sIHJlc3VsdCwgbGVmdCwgcmlnaHQpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZT
PihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRp
djxpbnQ2NF90Pih0cnVlLCBsZWZ0LCByaWdodCk7CisKKyAgICBpbnQ2NF90ICgqZGl2KShpbnQ2
NF90LCBpbnQ2NF90KSA9IFtdIChpbnQ2NF90IGEsIGludDY0X3QgYikgLT4gaW50NjRfdCB7IHJl
dHVybiBhIC8gYjsgfTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0Q0NhbGwoZGl2LCBy
ZXN1bHQsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PGludDY0X3Q+KGZhbHNl
LCBsZWZ0LCByaWdodCk7CisKKyAgICBpbnQ2NF90ICgqcmVtKShpbnQ2NF90LCBpbnQ2NF90KSA9
IFtdIChpbnQ2NF90IGEsIGludDY0X3QgYikgLT4gaW50NjRfdCB7IHJldHVybiBhICUgYjsgfTsK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0Q0NhbGwocmVtLCByZXN1bHQsIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQp
OworCisgICAgdWludDY0X3QgKCpkaXYpKHVpbnQ2NF90LCB1aW50NjRfdCkgPSBbXSAodWludDY0
X3QgYSwgdWludDY0X3QgYikgLT4gdWludDY0X3QgeyByZXR1cm4gYSAvIGI7IH07CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgZW1pdENDYWxsKGRpdiwgcmVzdWx0LCBsZWZ0LCByaWdodCk7CisK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
ZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworCisg
ICAgdWludDY0X3QgKCpyZW0pKHVpbnQ2NF90LCB1aW50NjRfdCkgPSBbXSAodWludDY0X3QgYSwg
dWludDY0X3QgYikgLT4gdWludDY0X3QgeyByZXR1cm4gYSAlIGI7IH07CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgZW1pdENDYWxsKHJlbSwgcmVzdWx0LCBsZWZ0LCByaWdodCk7CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5v
bmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC5jb3VudFRyYWlsaW5nWmVyb3MzMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIo
KSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBh
dXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczY0KHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9u
KCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMy
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IGppdC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50MzJf
dCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1aW50MzJfdCB7
IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bj
b3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uNjQocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyNlbmRpZgorCisgICAgdWludDY0X3QgKCpwb3Bjb3VudCkoaW50NjRfdCkgPSBbXSAoaW50
NjRfdCB2YWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwodmFs
dWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPEY2NENv
bnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChC
Mzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVn
aXN0ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJs
ZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7
CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigp
OworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0
Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0
czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuY29udmVydFVJbnQ2
NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFtcy5ncFNjcmF0
Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sx
XS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZm
ZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1p
dFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVh
cmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZs
b2F0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3Vu
ZFRvd2FyZE5lYXJlc3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7
CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1
dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0RvdWJsZShw
YXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0u
ZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50
KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgVG1wIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWluKCkpKSk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVt
cDIgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBw
ZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBhcHBlbmQoT3IzMiwg
dGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICBhcHBlbmQoQnJh
bmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwg
dGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0
byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgbWF4ID0gYWRkQ29uc3RhbnQo
VHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGFkZENv
bnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisKKyAgICBUbXAgdGVt
cDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZs
b2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJn
LCBtaW4sIHRlbXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZywgbWF4LCB0ZW1w
Mik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5j
KTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJ
bnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1
bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAg
IH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCisKK3RlbXBsYXRlPD4KK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBU
bXAgbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0
YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICog
LTIuMCkpOworICAgIFRtcCBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4oLTEuMCkpOworCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRl
bXAyID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnLCBtaW4sIHRlbXAxKTsK
KyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVu
ZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFw
cGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyks
IHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhj
ZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisK
KyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9V
aW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJn
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGFkZENv
bnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKworICAgIFRtcCB0
ZW1wMSA9IGdwcigpOworICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVx
dWFsKSwgYXJnLCBtaW4sIHRlbXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRv
dWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZywg
bWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0
Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpu
b25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChw
YXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIFRtcCBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9j
YXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
NjRfdD46Om1pbigpKSkpOworCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRlbXAy
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVu
ZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRl
bXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5j
aFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRl
bXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0
LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDY0KHBhcmFt
c1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGFkZENvbnN0YW50KFR5
cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBUbXAgbWluID0g
YWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKyAg
ICAKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChDb21wYXJl
RG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1w
Mik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAg
ICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29u
c3RhbnQ7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3Qg
aGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25l
ZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAg
ICAgICAvLyB0aGUgbnVtYmVycyBhcmUgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2ln
bmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBm
cHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBu
ZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwg
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1h
eCgpKSkpOworICAgIH0KKworICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gYXJnczsKKyAgICBh
dXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGFyZ3MuYXBwZW5kKGFyZyk7
CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgYXJncy5hcHBlbmQoc2lnbkJpdENvbnN0YW50
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9
CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQ
UlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNb
Ml0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50NjQo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAg
ICB9KTsKKworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUoYXJncykpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMy
LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5
cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIo
KTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnLCBtaW4sIHRl
bXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAg
YXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAg
ICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9
KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9h
dFRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGFk
ZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0
d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKyAgICAKKyAg
ICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NU
aGFuT3JFcXVhbCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwg
QXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwp
LCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisg
ICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVz
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0YW50Owor
ICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4g
aW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQgaW50ZWdl
cnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAgICAgLy8g
dGhlIG51bWJlcnMgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIu
IFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUg
YjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCisgICAg
ICAgIHNpZ25CaXRDb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0
PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRf
dD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAg
fQorCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNY
ODYoKSkgeworICAgICAgICBhcmdzLmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAgICAgICBw
YXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2gg
PSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVn
OworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5m
cFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAg
ICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5mcHIo
KSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hw
b2ludCwgcmVzdWx0LCBXVEZNb3ZlKGFyZ3MpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNW
YWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFw
cGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyAgICAKKyAgICBUbXAgZWN4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICBhcHBl
bmQoTW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUsIHNoaWZ0LCBlY3gpOwor
ICAgIGFwcGVuZChvcCwgZWN4LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJTdWIoQjM6OkFpcjo6T3Bjb2RlIG9wLCBFeHByZXNz
aW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYgKGlzVmFs
aWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBl
bmQob3AsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVh
bnMKKyAgICAvLyBiID0gYiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7Cisg
ICAgYXBwZW5kKG9wLCByaHMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUgb3AsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQob3AgPT0gQWJzRmxvYXQgfHwgb3AgPT0gQWJzRG91
YmxlKTsKKworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBB
cmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYo
KSk7CisKKyAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICBpZiAob3AgPT0gQWJzRmxvYXQp
IHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKH4oMXVsbCA8PCAzMSkpLCBjb25zdGFu
dCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0KTsKKyAg
ICAgICAgYXBwZW5kKEFuZEZsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ofigxdWxsIDw8IDYzKSksIGNvbnN0YW50KTsK
KyAgICAgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAg
ICAgYXBwZW5kKEFuZERvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5PcChCMzo6
QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZnByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJn
OjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgbGhzLCByaHMsIHJlc3VsdCk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisKKyAg
ICAvLyBPcCBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBPcCBhCisgICAgLy8gT09Q
UzogdmVyaWZ5CisgICAgYXBwZW5kKE1vdmVEb3VibGUsIGxocywgcmVzdWx0KTsgLy8gT09QUzog
U2hvdWxkIGJlIE1vdmVGbG9hdCAmIE1vdmVEb3VibGUKKyAgICBhcHBlbmQob3AsIHJocywgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGFwcGVuZChDZWlsRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChNdWwzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNv
bmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkRlbW90ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGFwcGVuZChDb252ZXJ0RG91YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyTWluPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZCht
X2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3Vj
Y2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9h
dCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAg
aXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVx
dWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFu
Y2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiks
IGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwg
Z3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1v
dmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBK
dW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9u
KTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMdD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWF4PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90
RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5h
ZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hGbG9hdCwgQXJn
Ojpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKwor
ICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBh
cHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5z
ZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NU
aGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1w
KTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TXVsPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChN
dWxEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKERpdkZsb2F0LCBhcmcwLCBh
cmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvcHlz
aWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gT09QUzogV2UgY2FuIGhh
dmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBmb3IgdGhlIGltbXMgYW5kIHR3byBvcGVyYW5kIGZvcm1z
IG9uIHg4NgorICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAg
IFRtcCBzaWduID0gZ3ByKCk7CisgICAgVG1wIHZhbHVlID0gZ3ByKCk7CisKKyAgICAvLyBPT1BT
OiBDYW4gZml0IGluIEltbS9CaXRJbW0gaW5zdGVhZCBvZiBCaWdJbW0/CisgICAgYXBwZW5kKE1v
dmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
MHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEsIHNpZ24sIHNpZ24p
OworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDMy
LCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjMyLCBzaWduLCB2YWx1ZSwg
dmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAg
YXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCB0ZW1wLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJSZWludGVycHJldEkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVu
ZChNb3ZlMzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRBbmQ+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
QW5kNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbCks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEd0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3Vi
bGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4pLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxej4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NERpdj4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IHdoYXQgYWJvdXQgY2hpbGwt
bmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2RG91Ymxl
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TmU+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zNjQsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGlmIChp
c1ZhbGlkRm9ybShOZWdhdGVGbG9hdCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgYXBw
ZW5kKE5lZ2F0ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBUbXAg
Y29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgICAgIGFwcGVuZChNdWxGbG9hdCwgY29u
c3RhbnQsIGFyZzAsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBbmQ+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQW5k
MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0VT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
MzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBYnM+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEFicyhBYnNEb3VibGUsIGFyZzAs
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRXE+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29weXNpZ24+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29kZWdlbiBoZXJlIGZv
ciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHNpZ24gPSBncHIoKTsKKyAgICBU
bXAgdmFsdWUgPSBncHIoKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMSwgdGVt
cDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwMDAwMDAwMDApLCBz
aWduKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVu
ZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJp
Z0ltbSgweDdmZmZmZmZmZmZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1w
MSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjY0LCBzaWduLCB2YWx1ZSwgdmFsdWUp
OworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyQ29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBl
bmQoQ29udmVydEludDY0VG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90
bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3Rh
dGVMZWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkxlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJHZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyU2hyVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biBhZGRTaGlmdChVcnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUkzMj4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQs
IHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENlaWw+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ2VpbERvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRGbG9vcj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChGbG9vckRvdWJsZSwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyWG9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEFi
cyhBYnNGbG9hdCwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1pbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVxdWFsID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisK
KyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChp
c0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVh
bCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisg
ICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVu
ZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3Nv
cnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwpOworCisgICAgYXBwZW5kKGdyZWF0
ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoZ3Jl
YXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNldFN1Y2Nl
c3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9u
OworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmV0dXJuIGFkZEludGVnZXJTdWIoU3ViNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZWludGVycHJl
dEYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlRmxvYXRU
bzMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBZGQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQWRkMzIsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoU3ViRG91YmxlLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyT3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3IzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0THRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0Uz4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChNdWw2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7Cisg
ICAgaWYgKGlzVmFsaWRGb3JtKFN1YkZsb2F0LCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1w
KSkKKyAgICAgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGVs
c2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAgICAgYXBwZW5kKE1v
dmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcxLCBy
ZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UHJvbW90ZUYzMj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RmxvYXRUb0RvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZERvdWJsZSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTmU+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChhcmcwICYmIGFyZzEpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjRSZWludGVycHJldEk2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRXE+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXE+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRmxvb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBhcHBlbmQoRmxvb3JGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
Q29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29u
dmVydEludDMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRXF6PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFRlc3QzMiwgQXJnOjpyZXNDb25k
KE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0UmVpbnRlcnByZXRGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclM+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUnNoaWZ0NjQs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFVyc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFNxcnQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoU3FydERvdWJsZSwgYXJnMCwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZFNoaWZ0KExzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2ND4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlJvdGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXR1cm4gYWRkU2hpZnQoUm90YXRlTGVmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90
cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3Rh
dGVSaWdodDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEV4dGVuZFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0
Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRo
YW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWc+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBpZiAoaXNWYWxpZEZvcm0oTmVnYXRlRG91YmxlLCBBcmc6
OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoTmVnYXRlRG91YmxlLCBhcmcwLCByZXN1
bHQpOworICAgIGVsc2UgeworICAgICAgICBUbXAgY29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBl
OjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPigtMS4wKSkp
OworICAgICAgICBhcHBlbmQoTXVsRmxvYXQsIGNvbnN0YW50LCBhcmcwLCByZXN1bHQpOworICAg
IH0KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0TWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3Vy
cmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgQW5kRG91Ymxl
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBp
c0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1
YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFu
Y2hEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4p
LCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhsZXNzVGhhbiwgY29u
dGludWF0aW9uKTsKKworICAgIGFwcGVuZChsZXNzVGhhbiwgTW92ZURvdWJsZSwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAgIGxlc3NUaGFuLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NExlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QWRk
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKEFkZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBp
bGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw3IEBA
IHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW4KICAgICBlZmZlY3RzLnJl
YWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVm
ZmVjdHM7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29u
dGV4dEluc3RhbmNlR1BSKSk7Ci0gICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUo
KSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3Rh
bmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7IC8vIE9PUFM6IFByb2JhYmx5IHNo
b3VsZCBiZSB1c2luZyBhcmchCiAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBt
X3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW0pIHsKICAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0SW5zdGFu
Y2VHUFIpOwpAQCAtNDU5LDkgKzQ1OSw5IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdl
YkFzc2VtYmx5R2wKIAogICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3Jl
Q2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CiAgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMg
dGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0
aW9uIGlzLgotICAgICAgICBWYWx1ZSogcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFu
Y2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSk7Ci0gICAgICAgIFZhbHVl
KiBhY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgcG9pbnRlclRvQWN0dWFs
U3RhY2tMaW1pdCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCBhY3R1YWxTdGFja0xpbWl0LCBpbnN0YW5jZVZh
bHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGlt
aXQoKSkpOworICAgICAgICBWYWx1ZSogcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCA9IGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNl
dE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSk7CisgICAgICAgIFZhbHVlKiBhY3R1YWxT
dGFja0xpbWl0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCk7CisgICAg
ICAgIGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigp
LCBhY3R1YWxTdGFja0xpbWl0LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KElu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOyAvLyBPT1BTOiBzaG91bGQgYmUg
YmxvY2shCiAgICAgfQogCiAgICAgaWYgKCEhbWVtb3J5KSB7CkBAIC0xNjA5LDYgKzE2MDksNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0CiAgICAgaWYgKGlzWDg2
KCkpCiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3Jh
dGNoUmVnaXN0ZXJzKCkpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
CiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTE2MjksNiArMTYzMCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJDb24KICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hw
b2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
Q29uc3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRj
aHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICNpZiBDUFUoWDg2XzY0KQpA
QCAtMTgzOCw3ICsxODQwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFRydQogICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAg
IH0KICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7IC8vIE9PUFM6IFRo
aXMgbG9va3Mgc3VwZXIgd3JvbmcgZ2l2ZW4gd2UgZG9uJ3Qgc2F5IHdlIGNsb2JiZXIgdGhpcyEK
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOwogICAgICAgICBGUFJSZWcg
Y29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOwogICAgICAgICBpZiAoaXNYODYoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgi
CiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQWlySVJHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUu
aCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKQEAgLTI3MSw3ICsyNzIsNyBA
QCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpCiAKICAgICAgICAgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6
dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBu
dWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29t
cGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLmRhdGEu
ZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Ro
cm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0g
cGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwg
ZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFko
IXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsNiArNjIsMzYgQEAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNt
Q2FsbGluZwogICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiB9CiAKK2Nv
bnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigpCit7
CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxKU0NDYWxsaW5nQ29udmVudGlvbkFpcj4g
c3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0
YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgc3RhdGljSlNDQ2FsbGlu
Z0NvbnZlbnRpb24uY29uc3RydWN0KFZlY3RvcjxSZWc+KCksIFZlY3RvcjxSZWc+KCksIFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0
YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uOworfQorCitjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRp
b25BaXImIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXI+IHN0YXRpY1dhc21DYWxsaW5nQ29u
dmVudGlvbjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljV2FzbUNhbGxpbmdDb252
ZW50aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRp
b25GbGFnLCBbXSAoKSB7CisgICAgICAgIFZlY3RvcjxSZWc+IGdwckFyZ3VtZW50UmVnaXN0ZXJz
KEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQor
ICAgICAgICAgICAgZ3ByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBHUFJJbmZvOjp0b0FyZ3VtZW50
UmVnaXN0ZXIoaSk7CisKKyAgICAgICAgVmVjdG9yPFJlZz4gZnByQXJndW1lbnRSZWdpc3RlcnMo
RlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisg
ICAgICAgICAgICBmcHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEZQUkluZm86OnRvQXJndW1lbnRS
ZWdpc3RlcihpKTsKKworICAgICAgICBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY29uc3Ry
dWN0KFdURk1vdmUoZ3ByQXJndW1lbnRSZWdpc3RlcnMpLCBXVEZNb3ZlKGZwckFyZ3VtZW50UmVn
aXN0ZXJzKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCShy
ZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgpAQCAtNDQsMjcgKzQ1LDI3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLXR5cGVkZWYgdW5zaWduZWQgKCpOZXh0
T2Zmc2V0KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSB0eXBlKTsKK3R5cGVkZWYg
dW5zaWduZWQgKCpOZXh0T2Zmc2V0KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KTsKIAogdGVtcGxh
dGU8dW5zaWduZWQgaGVhZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CiBjbGFzcyBD
YWxsaW5nQ29udmVudGlvbiB7CiBwdWJsaWM6CiAgICAgQ2FsbGluZ0NvbnZlbnRpb24oVmVjdG9y
PFJlZz4mJiBncHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2Fs
bGVlU2F2ZVJlZ2lzdGVycykKLSAgICAgICAgOiBtX2dwckFyZ3MoZ3ByQXJncykKLSAgICAgICAg
LCBtX2ZwckFyZ3MoZnByQXJncykKLSAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoY2Fs
bGVlU2F2ZVJlZ2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkK
KyAgICAgICAgLCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxl
ZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKICAgICB7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0
b3I8UmVnPiByZWdBcmdzLCBCMzo6VHlwZSB0eXBlLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0
YWNrT2Zmc2V0KSBjb25zdAorICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChj
b25zdCBWZWN0b3I8UmVnPiYgcmVnQXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09m
ZnNldCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIEIzOjpWYWx1ZVJlcDo6cmVnKHJlZ0FyZ3NbY291bnQrK10pOwog
CiAgICAgICAgIGNvdW50Kys7CiAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFs
dWVSZXA6OnN0YWNrQXJndW1lbnQoc3RhY2tPZmZzZXQpOwotICAgICAgICBzdGFja09mZnNldCA9
IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCwgdHlwZSk7CisgICAgICAgIHN0YWNrT2Zmc2V0ID0g
dXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKQEAgLTczLDEwICs3NCwxMCBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
ICAgICAgICAgY2FzZSBCMzo6SW50MzI6CiAgICAgICAgIGNhc2UgQjM6OkludDY0OgotICAgICAg
ICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgdHlwZSwgZ3BBcmd1
bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1
bWVudEltcGwobV9ncHJBcmdzLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAg
ICAgY2FzZSBCMzo6RmxvYXQ6CiAgICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAgICAgICAg
IHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJndW1lbnRD
b3VudCwgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJ
bXBsKG1fZnByQXJncywgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CiAgICAgICAgIGNh
c2UgQjM6OlZvaWQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTg5LDE5ICsx
OTAsMTQzIEBAIHB1YmxpYzoKICAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdp
c3RlcnM7CiB9OwogCi1pbmxpbmUgdW5zaWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJy
ZW50T2Zmc2V0LCBCMzo6VHlwZSkKK3RlbXBsYXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRP
ZmZzZXQgdXBkYXRlT2Zmc2V0PgorY2xhc3MgQ2FsbGluZ0NvbnZlbnRpb25BaXIgeworcHVibGlj
OgorICAgIENhbGxpbmdDb252ZW50aW9uQWlyKFZlY3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9y
PFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYmIGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAg
ICAgIDogbV9ncHJBcmdzKFdURk1vdmUoZ3ByQXJncykpCisgICAgICAgICwgbV9mcHJBcmdzKFdU
Rk1vdmUoZnByQXJncykpCisgICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUo
Y2FsbGVlU2F2ZVJlZ2lzdGVycykpCisgICAgeworICAgICAgICBSZWdpc3RlclNldCBzY3JhdGNo
ID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVk
ZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgZm9y
IChSZWcgcmVnIDogbV9ncHJBcmdzKQorICAgICAgICAgICAgc2NyYXRjaC5jbGVhcihyZWcpOwor
ICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2NhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgICAg
ICBzY3JhdGNoLmNsZWFyKHJlZyk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IHNjcmF0Y2gpCisg
ICAgICAgICAgICBtX3NjcmF0Y2hHUFJzLmFwcGVuZChyZWcpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3NjcmF0Y2hHUFJzLnNpemUoKSA+PSAzKTsKKyAgICB9CisKKyAgICBHUFJSZWcgcHJv
bG9ndWVTY3JhdGNoKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX3NjcmF0Y2hHUFJzW2ldLmdw
cigpOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVu
YW1lIFN0YWNrRnVuYz4KKyAgICB2b2lkIG1hcnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0IFZlY3Rv
cjxSZWc+JiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25z
dCBSZWdGdW5jJiByZWdGdW5jLCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBy
ZWdGdW5jKHJlZ0FyZ3NbY291bnQrK10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgc3RhY2tGdW5jKHN0YWNrT2Zmc2V0KTsKKyAg
ICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWdGdW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAg
dm9pZCBtYXJzaGFsbEFyZ3VtZW50KFR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291bnQs
IHNpemVfdCYgZnBBcmd1bWVudENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdG
dW5jJiByZWdGdW5jLCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAg
Y2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFy
Z3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVuYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2Ug
VHlwZTo6RjY0OgorICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBm
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCByZWdGdW5jLCBzdGFja0Z1bmMpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGlj
IHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGxvYWRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Cisg
ICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90
IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRl
clNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQoc2lnbmF0dXJl
LmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZz
ZXQsCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0b3IoQjM6OkFpcjo6VG1wKHJlZyksIGkpOworICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgWyZdIChzaXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY3RvcihCMzo6QWlyOjpBcmc6OmFkZHIoQjM6OkFpcjo6VG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKSwgc3RhY2tPZmZzZXQpLCBpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50
RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0dXBDYWxsKEIzOjpBaXI6OkNv
ZGUmIGNvZGUsIFR5cGUgcmV0dXJuVHlwZSwgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCwgY29uc3QgVmVjdG9yPEIzOjpBaXI6OlRtcD4mIGFyZ3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAg
ICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09m
ZnNldCA9IGhlYWRlclNpemUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAg
Zm9yIChhdXRvIHRtcCA6IGFyZ3MpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQodG1w
LmlzR1AoKSA/IFR5cGU6Okk2NCA6IFR5cGU6OkY2NCwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgewor
ICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpyZWcocmVnKSk7
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09m
ZnNldCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpz
dGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKworICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisK
KyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVy
U2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKworICAgICAgICBzd2l0Y2ggKHJl
dHVyblR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJlZyhG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgcGF0Y2hw
b2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZ3ByQXJnczsKKyAgICBjb25zdCBWZWN0b3I8UmVnPiBt
X2ZwckFyZ3M7CisgICAgVmVjdG9yPFJlZz4gbV9zY3JhdGNoR1BSczsKKyAgICBjb25zdCBSZWdp
c3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9j
YWxsZXJTYXZlUmVnaXN0ZXJzOworfTsKKworaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQo
dW5zaWduZWQgY3VycmVudE9mZnNldCkKIHsKICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNp
emVvZihSZWdpc3Rlcik7CiB9CiAKIGNvbnN0ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0g
RXhlY1N0YXRlOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwotdHlw
ZWRlZiBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0ND
YWxsaW5nQ29udmVudGlvbjsKLQotdHlwZWRlZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb247CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uID0gQ2FsbGluZ0Nv
bnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2FsbGlu
Z0NvbnZlbnRpb24gPSBKU0NDYWxsaW5nQ29udmVudGlvbjsKIGNvbnN0IEpTQ0NhbGxpbmdDb252
ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVudGlvbigpOwogY29uc3QgV2FzbUNhbGxpbmdDb252ZW50
aW9uJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRp
b25BaXIgPSBDYWxsaW5nQ29udmVudGlvbkFpcjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0
PjsKK3VzaW5nIFdhc21DYWxsaW5nQ29udmVudGlvbkFpciA9IEpTQ0NhbGxpbmdDb252ZW50aW9u
QWlyOworY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9u
QWlyKCk7Citjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360452</attachid>
            <date>2019-01-29 01:00:02 -0800</date>
            <delta_ts>2019-01-29 13:45:29 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>160358</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDkgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgICAgICBicmVhazsKICAgICB9CiAK
KyAgICBpZiAoIXZhbHVlKSAvLyBPT1BTCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xv
YmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlk
ZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQog
ICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hB
cmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUo
KQogewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2
b2lkIENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8
UmVnPiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVk
UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vh
a1JhbmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9p
ZCBlbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0
ZXhwciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzIxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVk
ZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNt
RnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bj
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25z
dHJhaW5lZFRtcCB7CisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25z
dHJhaW5lZFRtcCh0bXAsIHRtcC5pc1JlZygpID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygp
KSA6IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWlu
ZWRUbXAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAg
ICAgICAsIHJlcChyZXApCisgICAgeworICAgIH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZh
bHVlUmVwIHJlcDsKK307CisKK2NsYXNzIEFpcklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBz
dHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdp
biwgVHlwZSByZXR1cm5UeXBlLCBUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNC
bG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAg
ICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250
aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwg
cmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFS
QU0ob3JpZ2luKTsgLy8gT09QUworICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlID09IFR5cGU6OlZvaWQpOworICAgICAgICB9CisK
KyAgICAgICAgQ29udHJvbERhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9v
cDogICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9j
a1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0
LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwor
ICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCpzcGVj
aWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUi
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
YmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBy
ZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3Qg
eyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAg
ICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0
SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAs
IDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRG
b3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tU
eXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHJl
dHVyblR5cGU7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVG1wOworICAg
IHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhwcmVzc2lvbkxp
c3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBD
b250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlv
blBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25z
dCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb247CisKKyAgICB1c2luZyBFcnJvclR5cGUg
PSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVj
dGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4K
KyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFp
bChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFp
bHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZh
aWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2Rl
ZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAg
IGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDAp
CisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9j
ZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKKworICAgIC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gR2xvYmFscworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAg
ICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExv
YWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQs
IHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
c3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
IHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEN1cnJl
bnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBCYXNpYyBvcGVyYXRv
cnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblpl
cm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAg
Ly8gQ29udHJvbCBmbG93CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRv
cExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShD
b250cm9sRGF0YSYpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZh
bHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENv
bnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERh
dGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lv
blN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKworICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoQjM6
OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1
YihCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5n
UG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3Ao
QjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENv
bnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Np
b25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0
b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CisKK3ByaXZhdGU6CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGlmICghaW5zdC5pc1ZhbGlkRm9y
bSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGluc3QpOworICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJsb2Nr
LCBLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8v
IE9PUFM6IEFkZCBvcmlnaW4KKyAgICAgICAgYXV0byYgaW5zdCA9IGJsb2NrLT5hcHBlbmQoa2lu
ZCwgbnVsbHB0ciwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAg
ICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoS2luZCBraW5kLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIGtpbmQsIHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZEVmZmVjdGZ1bChCMzo6
QWlyOjpPcGNvZGUgb3AsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAg
IEtpbmQga2luZCA9IG9wOworICAgICAgICBraW5kLmVmZmVjdHMgPSB0cnVlOworICAgICAgICBh
cHBlbmQobV9jdXJyZW50QmxvY2ssIGtpbmQsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pOworICAgIH0KKworICAgIFRtcCB0bXAoQjM6OkJhbmsgYmFuaykgeyByZXR1cm4g
bV9jb2RlLm5ld1RtcChiYW5rKTsgfQorICAgIFRtcCBncHIoKSB7IHJldHVybiB0bXAoQjM6OkdQ
KTsgfQorICAgIFRtcCBmcHIoKSB7IHJldHVybiB0bXAoQjM6OkZQKTsgfQorICAgIFRtcCB0bXBG
b3JUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBy
ZXR1cm4gZ3ByKCk7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6
OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBmcHIoKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEIzOjpQYXRjaHBv
aW50VmFsdWUqIGFkZFBhdGNocG9pbnQoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Byb2MuYWRkPEIzOjpQYXRjaHBvaW50VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0
UGF0Y2hwb2ludChCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4u
LiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ss
IHBhdGNoLCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPih0aGVBcmdzKS4uLik7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2lu
dChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1w
IHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQo
YmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBzaXplb2Yu
Li4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRQYXRj
aHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNo
LCBUbXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywg
cGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wPigpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNp
Y0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3Vs
dCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCisgICAgeworICAg
ICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwpCisgICAgICAgICAgICBtX3BhdGNocG9pbnRT
cGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBhdGNocG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNw
ZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkpKTsKKworICAg
ICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNoLCBBcmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3Bl
Y2lhbCkpOworICAgICAgICBJbnN0IHJlc3VsdE1vdjsKKyAgICAgICAgaWYgKHJlc3VsdCkgewor
ICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50eXBlKCkgIT0gQjM6OlZvaWQpOworICAgICAgICAg
ICAgc3dpdGNoIChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3Mu
YXBwZW5kKFRtcChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSkpOworICAgICAgICAgICAg
ICAgIHJlc3VsdE1vdiA9IEluc3QocmVzdWx0LmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBu
dWxscHRyLCBUbXAocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50eXBlKCkgPT0gQjM6OlZvaWQpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChDb25zdHJhaW5lZFRtcCYgdG1wIDogYXJncykgeworICAgICAg
ICAgICAgLy8gT09QUzogVWdoLCB0aGlzIGlzIHN1cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxs
cHRyIGZvciBCMzo6VmFsdWUqIGhlcmUuCisgICAgICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2ls
bCBqdXN0IHdvcmssIGJ1dCBvdXIgYWx0ZXJuYXRpdmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAor
ICAgICAgICAgICAgLy8gb3IgcmVpbnZlbnQgcGFydCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAg
ICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6
T3JpZ2luKCksIHRtcC50bXAuaXNHUCgpID8gQjM6OkludDY0IDogQjM6OkRvdWJsZSwgMCk7Cisg
ICAgICAgICAgICBwYXRjaC0+YXBwZW5kKGR1bW15VmFsdWUsIHRtcC5yZXApOworICAgICAgICAg
ICAgc3dpdGNoICh0bXAucmVwLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVS
ZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcC50
bXApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVS
ZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2FudCB0
eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2MyBhbmQgZjMyL2Y2NAorICAgICAgICAgICAg
ICAgIHBhdGNoLT5lYXJseUNsb2JiZXJlZCgpLmNsZWFyKHRtcC5yZXAucmVnKCkpOworICAgICAg
ICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3Zl
RG91YmxlLCB0bXAudG1wLCB0bXAucmVwLnJlZygpKTsKKyAgICAgICAgICAgICAgICBpbnN0LmFy
Z3MuYXBwZW5kKFRtcCh0bXAucmVwLnJlZygpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDogeworICAgICAgICAg
ICAgICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2FudCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2gg
aTMyL2k2MyBhbmQgZjMyL2Y2NAorICAgICAgICAgICAgICAgIGF1dG8gYXJnID0gQXJnOjpjYWxs
QXJnKHRtcC5yZXAub2Zmc2V0RnJvbVNQKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNp
Y0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCBhcmcp
OworICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5pc1JlZygpKQorICAg
ICAgICAgICAgcGF0Y2gtPmxhdGVDbG9iYmVyZWQoKS5jbGVhcihwYXRjaC0+cmVzdWx0Q29uc3Ry
YWludC5yZWcoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNoLT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGdwcigpKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2gtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsg
aS0tOykKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoZnByKCkpOworCisgICAgICAgIHZh
bGlkYXRlSW5zdChpbnN0KTsKKyAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5z
dCkpOworICAgICAgICBpZiAocmVzdWx0TW92KSB7CisgICAgICAgICAgICB2YWxpZGF0ZUluc3Qo
cmVzdWx0TW92KTsKKyAgICAgICAgICAgIGJhc2ljQmxvY2stPmFwcGVuZChXVEZNb3ZlKHJlc3Vs
dE1vdikpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5j
aCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYg
ZW1pdEJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICAv
LyBXZSBmYWlsIGFsb25nIHRoZSAidHJ1dGh5IiBlZGdlIG9mICdicmFuY2gnCisKKyAgICAgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJh
c2ljQmxvY2sqIGZhaWxlZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAg
ZW1pdEJyYW5jaCgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWls
ZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgYXV0byogZmFpbGVkUGF0Y2hwb2ludCA9IGFk
ZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBmYWlsZWRQYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZmFpbGVkLCBmYWlsZWRQ
YXRjaHBvaW50LCBUbXAoKSk7CisgICAgICAgIGFwcGVuZChmYWlsZWQsIE9vcHMpOworCisgICAg
ICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEZ1
bmMgZnVuYywgVG1wIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgZW1pdEND
YWxsKG1fY3VycmVudEJsb2NrLCBmdW5jLCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5B
cmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2ljQmxvY2sqIGJsb2NrLCBGdW5jIGZ1bmMsIFRt
cCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAgICB7CisgICAgICAgIEIzOjpUeXBlIHJlc3Vs
dFR5cGUgPSBCMzo6Vm9pZDsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJlc3Vs
dFR5cGUgPSByZXN1bHQuaXNHUCgpID8gQjM6OkludDY0IDogQjM6OkRvdWJsZTsKKworICAgICAg
ICBhdXRvIG1ha2VEdW1teVZhbHVlID0gWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICBpZiAo
dG1wLmlzR1AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIz
OjpPcmlnaW4oKSwgQjM6OkludDY0LCAwKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRk
Q29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6RG91YmxlLCAwKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBCMzo6VmFsdWUqIGR1bW15RnVuYyA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2lu
KCksIEIzOjpJbnQ2NCwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnVuYykpOworICAgICAgICBC
Mzo6VmFsdWUqIG9yaWdpbiA9IG1fcHJvYy5hZGQ8QjM6OkNDYWxsVmFsdWU+KHJlc3VsdFR5cGUs
IEIzOjpPcmlnaW4oKSwgQjM6OkVmZmVjdHM6Om5vbmUoKSwgZHVtbXlGdW5jLCBtYWtlRHVtbXlW
YWx1ZSh0aGVBcmdzKS4uLik7CisKKyAgICAgICAgSW5zdCBpbnN0KENDYWxsLCBvcmlnaW4pOwor
CisgICAgICAgIFRtcCBjYWxsZWUgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
aW1tUHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxs
ZWUpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJl
c3VsdCkKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKworICAgICAgICBm
b3IgKFRtcCB0bXAgOiBWZWN0b3I8VG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3Mu
Li4pKQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOworCisgICAgICAgIGJsb2Nr
LT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgfQorCisgICAgc3RhdGljIEIzOjpBaXI6Ok9w
Y29kZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgcmV0dXJuIE1v
dmUzMjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICByZXR1cm4gTW92ZTsK
KyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICByZXR1cm4gTW92ZUZsb2F0Owor
ICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlRG91YmxlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxs
SGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisgICAgdm9pZCBlbWl0VGllclVwQ2hlY2sodWlu
dDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4pOworCisgICAgRXhwcmVzc2lvblR5cGUg
ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CisgICAgRXhwcmVzc2lvblR5cGUgZW1pdExv
YWRPcChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQp
OworICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworCisgICAgdm9pZCB1
bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291
cmNlKTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgc3RhY2spOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEludFR5cGU+CisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoYm9vbCBp
c1NpZ25lZERpdiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOwor
CisgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQb2ludGVyUGx1c09mZnNldChF
eHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKKworICAgIHZvaWQgcmVzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2UoQmFzaWNCbG9jayosIFRtcCk7CisgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2Jh
bFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYs
IFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayopOworCisgICAgQjM6Ok9yaWdpbiBvcmlnaW4oKTsg
Ly8gT09QUzogV2UgbmVlZCB0byBtYWtlIGFuIEFpcjo6T3JpZ2luIHNpbmNlIHdlJ3JlIG5vdCBn
ZW5lcmF0aW5nIGZyb20gQjMgY29kZS4KKworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJh
dG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nIH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2Rl
IHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5j
dGlvbkluZGV4IHsgVUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAg
eyBudWxscHRyIH07CisKKyAgICBCMzo6UHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQ29kZSYgbV9j
b2RlOworICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJh
c2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
VG1wLCBUeXBlPj4gbV9sb2NhbHM7CisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0
aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRo
LgorICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BS
UmVnIG1fbWVtb3J5U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNt
Q29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbV9tYWtlc0Nh
bGxzIHsgZmFsc2UgfTsKKworICAgIFRtcCBtX2luc3RhbmNlVmFsdWU7IC8vIEFsd2F5cyB1c2Ug
dGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgdmFsdWUgaXMgbWF0ZXJp
YWxpemVkIHdoZW4gdXNlZC4KKyAgICBib29sIG1fdXNlc0luc3RhbmNlVmFsdWUgeyBmYWxzZSB9
OworICAgIFRtcCBpbnN0YW5jZVZhbHVlKCkKKyAgICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNl
VmFsdWUgPSB0cnVlOworICAgICAgICByZXR1cm4gbV9pbnN0YW5jZVZhbHVlOworICAgIH0KKwor
ICAgIHVpbnQzMl90IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OworCisgICAgQjM6OlBh
dGNocG9pbnRTcGVjaWFsKiBtX3BhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworfTsKKwor
Y29uc3QgVG1wIEFpcklSR2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24gPSBUbXAgeyB9OworCisv
LyBNZW1vcnkgYWNjZXNzZXMgaW4gV2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zm
c2V0cywgd2hlcmVhcyB0aGV5IGhhdmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgoraW50
MzJfdCBBaXJJUkdlbmVyYXRvcjo6Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlw
ZSYgcHRyLCB1aW50MzJfdCBvZmZzZXQpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihvZmZzZXQpID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1heCgpKSkgeworICAgICAgICBUbXAgcHJldmlvdXNQdHIgPSBwdHI7CisgICAgICAg
IHB0ciA9IGdwcigpOworICAgICAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5k
KEFkZDY0LCBjb25zdGFudCwgcHJldmlvdXNQdHIsIHB0cik7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBibG9jaywgVG1wIGluc3RhbmNlKQor
eworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hw
b2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBpZiAoQ0NhbGxIZWxwZXJz
OjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCisg
ICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hS
ZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2Ny
YXRjaChqaXQsIENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5z
dGFuY2UocGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBv
aW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxsIGNsb2JiZXJz
IHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3RvcmUgaXQsIHdl
IG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgLy8gVGhpcyBwcmV2
ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxseSkgaW1tdXRh
YmxlIHBpbm5lZCByZWdpc3Rlci4KKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2lu
dChCMzo6Vm9pZCk7CisgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25l
KCk7CisgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIGVmZmVjdHMucmVhZHMg
PSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0
czsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0
SW5zdGFuY2VHUFIpKTsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IG1fd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW0pIHsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0SW5zdGFu
Y2VHUFIpOworICAgIH0pOworICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBU
bXAoKSwgaW5zdGFuY2UpOworfQorCitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50
ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25N
b2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQq
IHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUpCisgICAgOiBtX2luZm8oaW5mbykKKyAgICAsIG1fbW9kZShtb2Rl
KQorICAgICwgbV9jb21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQorICAgICwgbV9mdW5j
dGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCisgICAgLCBtX3RpZXJVcCh0aWVyVXApCisgICAgLCBt
X3Byb2MocHJvY2VkdXJlKQorICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCisgICAgLCBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQoreworICAgIG1f
Y3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgbV9yb290QmxvY2sgPSBtX2N1
cnJlbnRCbG9jazsKKworICAgIC8vIEZJWE1FIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHBpbiBy
ZWdpc3RlcnMgaGVyZSBpZiB0aGVyZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMgd2FzbSAtPiB3YXNt
IHRodW5rcyBzaW1wbGVyIGZvciBub3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjY2MjMKKyAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3Mg
PSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworCisgICAgbV9tZW1vcnlCYXNlR1BSID0gcGlu
bmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICBtX2NvZGUucGluUmVnaXN0ZXIobV9tZW1v
cnlCYXNlR1BSKTsKKworICAgIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mu
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CisgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExT
KCkpCisgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIp
OworCisgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAgICAgIEFT
U0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBt
X21lbW9yeVNpemVHUFIgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVy
OworICAgICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBw
aW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCisgICAgICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIo
cmVnSW5mby5zaXplUmVnaXN0ZXIpOworICAgIH0KKworICAgIGlmICh0aHJvd1dhc21FeGNlcHRp
b24pCisgICAgICAgIFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRo
cm93V2FzbUV4Y2VwdGlvbik7CisKKyAgICBpZiAoaW5mby5tZW1vcnkpIHsKKyAgICAgICAgc3dp
dGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzoK
KyAgICAgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGluZyBtb2RlIGRv
bid0IGRvIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRpb24gY2hlY2sgYmVjYXVz
ZSB0aGV5IGNhbiByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAgICAgICAgICAg
Ly8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5vbmV0aGVsZXNz
IG5lZWRzIHRoZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhhdCBpdCBjYW4g
anVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFUaHVua3M6OnNp
bmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKSkpCisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRzKDEpOworCisgICAgR1BSUmVnIGNv
bnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgxKSA6IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsK
KworICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3Ig
PSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBj
b2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0KTsKKworICAgICAgICB7CisgICAgICAgICAgICBH
UFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3Jh
dGNoKDApOworICAgICAgICAgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRj
aChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2Fs
bGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4o
bW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaml0LmVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAg
ICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7Cisg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtUGFyZW50Q2hlY2tTaXplID0gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgMTAyNCk7CisgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBleHRyYUZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0ZDo6bWF4PHVpbnQzMl90PigKKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgZm9yIGZ1bmN0
aW9ucyB0aGF0IGFyZSB0ZXJtaW5hbCBub2RlcyBpbiB0aGUgY2FsbAorICAgICAgICAgICAgICAg
IC8vIHRyZWUsIChlLmcgdGhleSBkb24ndCBtYWtlIGFueSBjYWxscykgYW5kIGhhdmUgYSBzbWFs
bCBlbm91Z2ggZnJhbWUgc2l6ZS4gVGhpcyB3b3JrcyBieQorICAgICAgICAgICAgICAgIC8vIGhh
dmluZyBhbnkgc3VjaCB0ZXJtaW5hbCBub2RlIGhhdmUgaXRzIHBhcmVudCBjYWxsZXIgaW5jbHVk
ZSBzb21lIGV4dHJhIHNpemUgaW4gaXRzCisgICAgICAgICAgICAgICAgLy8gb3duIGNoZWNrIGZv
ciBpdC4gVGhlIGdvYWwgaGVyZSBpcyB0d29mb2xkOgorICAgICAgICAgICAgICAgIC8vIDEuIEVt
aXQgbGVzcyBjb2RlLgorICAgICAgICAgICAgICAgIC8vIDIuIFRyeSB0byBzcGVlZCB0aGluZ3Mg
dXAgYnkgc2tpcHBpbmcgc3RhY2sgY2hlY2tzLgorICAgICAgICAgICAgICAgIG1pbmltdW1QYXJl
bnRDaGVja1NpemUsCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZWxpZGUg
c3RhY2sgY2hlY2tzIGluIHRoZSBXYXNtIC0+IEVtYmVkZGVyIGNhbGwgSUMgc3R1Yi4gU2luY2Ug
dGhlc2Ugd2lsbAorICAgICAgICAgICAgICAgIC8vIHNwaWxsIGFsbCBhcmd1bWVudHMgdG8gdGhl
IHN0YWNrLCB3ZSBlbnN1cmUgdGhhdCBhIHN0YWNrIGNoZWNrIGhlcmUgY292ZXJzIHRoZQorICAg
ICAgICAgICAgICAgIC8vIHN0YWNrIHRoYXQgc3VjaCBhIHN0dWIgd291bGQgdXNlLgorICAgICAg
ICAgICAgICAgIChDaGVja2VkPHVpbnQzMl90PihtX21heE51bUpTQ2FsbEFyZ3VtZW50cykgKiBz
aXplb2YoUmVnaXN0ZXIpICsganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5oZWFkZXJTaXplSW5CeXRl
cygpKS51bnNhZmVHZXQoKQorICAgICAgICAgICAgKSk7CisgICAgICAgICAgICBjb25zdCBpbnQz
Ml90IGNoZWNrU2l6ZSA9IG1fbWFrZXNDYWxscyA/ICh3YXNtRnJhbWVTaXplICsgZXh0cmFGcmFt
ZVNpemUpLnVuc2FmZUdldCgpIDogd2FzbUZyYW1lU2l6ZS51bnNhZmVHZXQoKTsKKyAgICAgICAg
ICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoZWNr
U2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisgICAgICAgICAgICBib29sIG5l
ZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXNDYWxscyB8fCB3YXNtRnJhbWVTaXplID49IG1pbmlt
dW1QYXJlbnRDaGVja1NpemUgfHwgbmVlZFVuZGVyZmxvd0NoZWNrOworCisgICAgICAgICAgICAv
LyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hlY2tzIGlmIHRo
ZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCisgICAgICAgICAgICAvLyBjZXJ0YWluIGxpbWl0cyBz
aW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNoZWNrLgorICAg
ICAgICAgICAgaWYgKG5lZWRzT3ZlcmZsb3dDaGVjaykgeworICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3Vl
U2NyYXRjaCgwKTsKKworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkp
CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0
SW5zdGFuY2UpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHNjcmF0
Y2gpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvdmVyZmxvdzsK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobmVlZFVuZGVyZmxvd0NoZWNrKSkKKyAgICAg
ICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJz
OjpBYm92ZSwgc2NyYXRjaCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICAgICAg
ICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93
LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNlLCBJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7CisgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVyZmxv
d0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNoZWNrIGlzIG5l
ZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUgY29ycmVjdC4K
KyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1Nj
cmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gV2Ugc2FpZCB3ZSdkIHJldHVybiBhIHBvaW50ZXIuIFdlIGRvbid0IGFjdHVh
bGx5IG5lZWQgdG8gYmVjYXVzZSBpdCBpc24ndCB1c2VkLCBidXQgdGhlIHBhdGNocG9pbnQgY29u
c2VydmF0aXZlbHkgc2FpZCBpdCBoYWQgZWZmZWN0cyAocG90ZW50aWFsIHN0YWNrIGNoZWNrKSB3
aGljaCBwcmV2ZW50IGl0IGZyb20gZ2V0dGluZyByZW1vdmVkLgorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSk7CisKKyAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDAs
IFdURk1vdmUocHJvbG9ndWVHZW5lcmF0b3IpKTsKKworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0
VExTKCkpIHsKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZ3ByKCk7CisgICAgICAgIC8vIE9P
UFM6IFdvdWxkIGJlIG5pY2UgdG8gb25seSBkbyB0aGlzIGlmIHdlIHVzZSBpbnN0YW5jZSB2YWx1
ZS4KKyAgICAgICAgYXBwZW5kKE1vdmUsIFRtcChjb250ZXh0SW5zdGFuY2UpLCBtX2luc3RhbmNl
VmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBtX2luc3RhbmNlVmFsdWUgPSBUbXAoY29udGV4
dEluc3RhbmNlKTsKKworICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKKyAgICBtX2xvY2Fs
cy5ncm93KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0
eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAg
ICAgbV9sb2NhbHNbaV0gPSB7IGdwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAg
ICAgbV9sb2NhbHNbaV0gPSB7IGZwcigpLCB0eXBlIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5sb2Fk
QXJndW1lbnRzKHNpZ25hdHVyZSwgWyZdIChjb25zdCBBcmcmIGFyZywgdW5zaWduZWQgaSkgewor
ICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICBjYXNlIFR5
cGU6OkkzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIGFyZywgbV9sb2NhbHNbaV0uZmly
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAg
ICAgICAgYXBwZW5kKE1vdmUsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVG
bG9hdCwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgYXJnLCBt
X2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeURl
Y3JlbWVudCgpLCBCMzo6T3JpZ2luKCkpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0
b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0b3Jl
Q2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVG1wIGlu
c3RhbmNlLCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXN0b3JlV2FzbUNvbnRleHRJbnN0
YW5jZShibG9jaywgaW5zdGFuY2UpOworCisgICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMpIHsKKyAgICAgICAgLy8gVGhlIEluc3Rh
bmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQsIGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBjYW5v
bmljYWwgbG9jYXRpb24gaXMuCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHN0YXRpY19jYXN0PEluc3RhbmNlKj4obnVsbHB0ciktPmNhY2hlZFN0YWNrTGltaXQoKSkpID09
IHNpemVvZih1aW50NjRfdCksICIiKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6Omlz
VmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0
KCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFk
ZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSwgQjM6OldpZHRoNjQp
KTsKKyAgICAgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3Zl
LCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9B
Y3R1YWxTdGFja0xpbWl0KCkpLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCBB
cmc6OmFkZHIodGVtcCksIHRlbXApOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIHRlbXAs
IEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNr
TGltaXQoKSkpOworICAgIH0KKworICAgIGlmICghIW1lbW9yeSkgeworICAgICAgICBjb25zdCBQ
aW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CisgICAgICAgIGNsb2JiZXJzLnNldChw
aW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgIGZvciAoYXV0byBpbmZvIDog
cGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZv
LnNpemVSZWdpc3Rlcik7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQoQjM6OlZvaWQpOworICAgICAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6
Om5vbmUoKTsKKyAgICAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICBl
ZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBlZmZlY3RzOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJz
KTsKKworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJlZ3NdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MtPmJhc2VNZW1v
cnlQb2ludGVyOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdz
LT5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAx
KTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBm
b2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNl
cXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigp
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJl
Z3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0u
c2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmxv
Y2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lkIEFpcklS
R2VuZXJhdG9yOjplbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEV4Y2VwdGlv
blR5cGUgdHlwZSkKK3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAg
IGF1dG8ganVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBqaXQuYWRkTGlu
a1Rhc2soW2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0
aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG90
YWxCeXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCArPSBtX2xvY2Fs
cy5zaXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NPTVBJTEVfRkFJ
TF9JRigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBDaGVja2VkU3Rh
dGU6OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0
ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGxvY2FscyIp
OworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5
cGU6Okk2NDogeworICAgICAgICAgICAgVG1wIGxvY2FsID0gZ3ByKCk7CisgICAgICAgICAgICBt
X2xvY2Fscy51bmNoZWNrZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIGFw
cGVuZChYb3I2NCwgbG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDogeworICAg
ICAgICAgICAgVG1wIGxvY2FsID0gZnByKCk7CisgICAgICAgICAgICBtX2xvY2Fscy51bmNoZWNr
ZWRBcHBlbmQoeyBsb2NhbCwgdHlwZSB9KTsKKyAgICAgICAgICAgIFRtcCB0ZW1wID0gZ3ByKCk7
CisgICAgICAgICAgICAvLyBJRUVFIDc1NCAiMCIgaXMganVzdCBpbnQzMi82NCB6ZXJvLgorICAg
ICAgICAgICAgYXBwZW5kKFhvcjY0LCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgICAgIGFwcGVuZCh0
eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwgdGVtcCwg
bG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFM6IElzIHRo
aXMgY29ycmVjdD8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKSAt
PiBFeHByZXNzaW9uVHlwZQoreworICAgIFRtcCByZXN1bHQ7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIHJlc3Vs
dCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCByZXN1
bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6
OkY2NDogeworICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgVG1wIHRtcCA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCB0bXApOworICAgICAg
ICBhcHBlbmQodHlwZSA9PSBUeXBlOjpGMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9Eb3Vi
bGUsIHRtcCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OworCit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fbG9jYWxzLnNpemUoKSA9PSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsgLy8g
V2UgaGFuZGxlIGFyZ3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tp
bmRleF0uZmlyc3QpOworICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XS5maXJzdC5pc0dQKCkg
PyBncHIoKSA6IGZwcigpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNb
aW5kZXhdLnNlY29uZCksIG1fbG9jYWxzW2luZGV4XS5maXJzdCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJsZSA9IGFk
ZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0b3IoW3Ro
aXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6VW5yZWFjaGFibGUpOworICAgIH0pOworICAgIHVucmVhY2hhYmxlLT5lZmZlY3RzLnRlcm1p
bmFsID0gdHJ1ZTsKKyAgICBlbWl0UGF0Y2hwb2ludCh1bnJlYWNoYWJsZSwgVG1wKCkpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhw
cmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCosIEluc3RhbmNlKiwgaW50MzJf
dCkgPSBbXSAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGludDMyX3QgZGVs
dGEpIC0+IGludDMyX3QgeworICAgICAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2Fs
bEZyYW1lKTsKKworICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0x
OworCisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5KCktPmdyb3coUGFnZUNv
dW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
Z3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29u
OjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246
OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNv
bjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWls
UmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CisgICAgfTsK
KworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRDQ2FsbChncm93TWVtb3J5LCByZXN1bHQs
IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEp
OworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jayk7
CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50
TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRy
KS0+c2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMg
c2l6ZSIpOworCisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsK
KworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwg
QXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
U2l6ZSgpKSwgdGVtcDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7
CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRW
YWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIp
OworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSgxNiksIHJlc3VsdCk7CisgICAgYWRkU2hpZnQo
VXJzaGlmdDY0LCB0ZW1wMSwgcmVzdWx0LCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlMzIsIHJl
c3VsdCwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAgIGFw
cGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnNlY29uZCksIHZhbHVlLCBt
X2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2lu
ZGV4XS50eXBlOworCisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAgIFRtcCB0
ZW1wID0gZ3ByKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJ
bnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1v
dmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMo
KSksIHRlbXApOworCisgICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRl
eCAqIHNpemVvZihSZWdpc3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZz
ZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1v
dmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3VsdCk7
CisgICAgZWxzZSB7CisgICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBhcHBlbmQo
TW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQs
IHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0
eXBlKSwgQXJnOjphZGRyKHRlbXApLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIHRlbXAgPSBncHIo
KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpv
ZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjph
ZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwgdGVtcCk7
CisKKyAgICBUeXBlIHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKworICAgIGlu
dDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIp
KTsKKyAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBl
KHRvQjNUeXBlKHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlw
ZSksIHZhbHVlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxzZSB7CisgICAgICAg
IFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zm
c2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsK
KyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6YWRk
cih0ZW1wKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFpcklSR2Vu
ZXJhdG9yOjpFeHByZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJf
dCBzaXplT2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CisKKyAg
ICBUbXAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcG9pbnRlciwgcmVzdWx0
KTsKKworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZzogeworICAgICAgICAvLyBXZSdyZSBub3QgdXNpbmcgc2lnbmFsIGhhbmRsaW5nIGF0
IGFsbCwgd2UgbXVzdCB0aGVyZWZvcmUgY2hlY2sgdGhhdCBubyBtZW1vcnkgYWNjZXNzIGV4Y2Vl
ZHMgdGhlIGN1cnJlbnQgbWVtb3J5IHNpemUuCisgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVH
UFIpOworICAgICAgICBBU1NFUlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsK
KyAgICAgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6Ymln
SW1tKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzaXplT2ZPcGVyYXRpb24pICsgb2Zmc2V0IC0gMSks
IHRlbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIHJlc3VsdCwgdGVtcCk7CisKKyAgICAgICAg
ZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoNjQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgdGVtcCwgVG1wKG1fbWVtb3J5U2l6ZUdQ
UikpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0
aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAg
ICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmc6IHsKKyAgICAgICAgLy8gV2UndmUgdmlydHVhbGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUg
Zm9yIHRoaXMgbWVtb3J5LiBPbmx5IHRoZSB1c2VyLWFsbG9jYXRlZCBwYWdlcyBhcmUgYWRkcmVz
c2FibGUsIGNvbnRpZ3VvdXNseSBpbiByYW5nZSBbMCwgY3VycmVudF0sCisgICAgICAgIC8vIGFu
ZCBldmVyeXRoaW5nIGFib3ZlIGlzIG1hcHBlZCBQUk9UX05PTkUuIFdlIGRvbid0IG5lZWQgdG8g
cGVyZm9ybSBhbnkgZXhwbGljaXQgYm91bmRzIGNoZWNrIGluIHRoZSA0R2lCIHJhbmdlIGJlY2F1
c2UgV2ViQXNzZW1ibHkgcmVnaXN0ZXIKKyAgICAgICAgLy8gbWVtb3J5IGFjY2Vzc2VzIGFyZSAz
Mi1iaXQuIEhvd2V2ZXIgV2ViQXNzZW1ibHkgcmVnaXN0ZXIgKyBvZmZzZXQgYWNjZXNzZXMgcGVy
Zm9ybSB0aGUgYWRkaXRpb24gaW4gNjQtYml0IHdoaWNoIGNhbiBwdXNoIGFuIGFjY2VzcyBhYm92
ZQorICAgICAgICAvLyB0aGUgMzItYml0IGxpbWl0ICh0aGUgb2Zmc2V0IGlzIHVuc2lnbmVkIDMy
LWJpdCkuIFRoZSByZWR6b25lIHdpbGwgY2F0Y2ggbW9zdCBzbWFsbCBvZmZzZXRzLCBhbmQgd2Un
bGwgZXhwbGljaXRseSBib3VuZHMgY2hlY2sgYW55CisgICAgICAgIC8vIHJlZ2lzdGVyICsgbGFy
Z2Ugb2Zmc2V0IGFjY2Vzcy4gV2UgZG9uJ3QgdGhpbmsgdGhpcyB3aWxsIGJlIGdlbmVyYXRlZCBm
cmVxdWVudGx5LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayB0aGF0IHJl
Z2lzdGVyICsgbGFyZ2Ugb2Zmc2V0IGRvZXNuJ3QgZXhjZWVkIDRHaUIrcmVkem9uZSBzaW5jZSB0
aGF0J3MgdGVjaG5pY2FsbHkgdGhlIGxpbWl0IHdlIG5lZWQgdG8gYXZvaWQgb3ZlcmZsb3dpbmcg
dGhlCisgICAgICAgIC8vIFBST1RfTk9ORSByZWdpb24sIGJ1dCBpdCdzIGJldHRlciBpZiB3ZSB1
c2UgYSBzbWFsbGVyIGltbWVkaWF0ZSBiZWNhdXNlIGl0IGNhbiBjb2RlZ2VucyBiZXR0ZXIuIFdl
IGtub3cgdGhhdCBhbnl0aGluZyBlcXVhbCB0byBvciBncmVhdGVyCisgICAgICAgIC8vIHRoYW4g
dGhlIGRlY2xhcmVkICdtYXhpbXVtJyB3aWxsIHRyYXAsIHNvIHdlIGNhbiBjb21wYXJlIGFnYWlu
c3QgdGhhdCBudW1iZXIuIElmIHRoZXJlIHdhcyBubyBkZWNsYXJlZCAnbWF4aW11bScgdGhlbiB3
ZSBzdGlsbCBrbm93IHRoYXQKKyAgICAgICAgLy8gYW55IGFjY2VzcyBlcXVhbCB0byBvciBncmVh
dGVyIHRoYW4gNEdpQiB3aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRkIHRoZSByZWR6b25lLgorICAg
ICAgICBpZiAob2Zmc2V0ID49IE1lbW9yeTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpKSB7Cisg
ICAgICAgICAgICB1aW50NjRfdCBtYXhpbXVtID0gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkgPyBt
X2luZm8ubWVtb3J5Lm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpOworICAgICAgICAgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZU9mT3Bl
cmF0aW9uKSArIG9mZnNldCAtIDEpLCB0ZW1wKTsKKyAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwg
cmVzdWx0LCB0ZW1wKTsKKyAgICAgICAgICAgIFRtcCBzaXplTWF4ID0gZ3ByKCk7CisgICAgICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0obWF4aW11bSksIHNpemVNYXgpOworCisgICAg
ICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoQnJhbmNoNjQs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgdGVtcCwgc2l6ZU1h
eCk7CisgICAgICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJv
d0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
CisKKyAgICBhcHBlbmQoQWRkNjQsIFRtcChtX21lbW9yeUJhc2VHUFIpLCByZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9w
VHlwZSBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJM
b2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAg
IHJldHVybiAxOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgor
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgcmV0dXJuIDI7CisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMy
UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BUeXBl
OjpGMzJMb2FkOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICByZXR1cm4gODsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFRtcCBB
aXJJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBw
b2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIHVpbnQzMl90IG9mZnNldCA9IGZpeHVw
UG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAgaW1tVG1wOwor
ICAgIFRtcCBuZXdQdHI7CisgICAgVG1wIHJlc3VsdDsKKworICAgIGF1dG8gbG9hZEFyZyA9IFsm
XSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0
aEZvckJ5dGVzKHNpemVPZkxvYWRPcChvcCkpKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmFk
ZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1wID0gZ3ByKCk7CisgICAgICAgIG5l
d1B0ciA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwg
aW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIHBvaW50ZXIsIG5ld1B0cik7
CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsKKyAgICB9OworCisgICAgc3dpdGNo
IChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CisgICAgICAgIHJlc3Vs
dCA9IGdwcigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTG9hZDhTaWduZWRFeHRlbmRUbzMy
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAg
ICBhcHBlbmRFZmZlY3RmdWwoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3Vs
dCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTog
eworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQ4
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7CisgICAgICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90
aGVyIHpleHQgaGVyZT8KKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZEVm
ZmVjdGZ1bChMb2FkOCwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsKKyAgICAgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTZTaWduZWRFeHRlbmRUbzMyLCBs
b2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDE2UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAg
YXBwZW5kRWZmZWN0ZnVsKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0
KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3VsdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VTog
eworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQx
NiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVkIGFu
b3RoZXIgemV4dCBoZXJlPworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5k
RWZmZWN0ZnVsKExvYWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkMzJVOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmRF
ZmZlY3RmdWwoTW92ZTMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAgICAgICByZXN1bHQg
PSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1
bHQpOworICAgICAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7
CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTW92ZSwg
bG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAgIGFw
cGVuZEVmZmVjdGZ1bChNb3ZlRmxvYXQsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOiB7CisgICAgICAgIHJl
c3VsdCA9IGZwcigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTW92ZURvdWJsZSwgbG9hZEFy
ZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBF
eHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBv
ZmZzZXQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci5pc0dQKCkpOwor
CisgICAgaWYgKFVOTElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZM
b2FkT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJv
dmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBo
YXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dl
dmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lk
KTsKKyAgICAgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1v
cnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0Y2gsIFRt
cCgpKTsKKworICAgICAgICAvLyBXZSB3b24ndCByZWFjaCBoZXJlLCBzbyB3ZSBqdXN0IHBpY2sg
YSByYW5kb20gcmVnLgorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkMTZVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdCA9IGVtaXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50
ZXIsIG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisKKyAgICByZXR1cm4geyB9
OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAg
IGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9y
ZTE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToK
KyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6
OkYzMlN0b3JlOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRT
dG9yZToKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKworaW5saW5l
IHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkK
K3sKKyAgICB1aW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIs
IHVvZmZzZXQpOworCisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgYXV0
byBzdG9yZUFyZyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShv
ZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZlN0b3JlT3Aob3ApKSkpCisgICAgICAgICAg
ICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIGltbVRtcCA9IGdw
cigpOworICAgICAgICBuZXdQdHIgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBw
b2ludGVyLCBuZXdQdHIpOworICAgICAgICByZXR1cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAg
fTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4
LCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVP
cFR5cGU6Okk2NFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAg
ICAgICAgYXBwZW5kKFN0b3JlMTYsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BU
eXBlOjpJMzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgdmFsdWUsIHN0b3JlQXJnKCkp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAg
ICAgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxv
YXQsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9y
ZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgc3Rv
cmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQz
Ml90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLmlzR1Ao
KSk7CisKKyAgICBpZiAoVU5MSUtFTFkoc3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNp
emVPZlN0b3JlT3Aob3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMg
aXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBz
byB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9u
LiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0byogdGhyb3dFeGNlcHRpb24gPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihb
dGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQodGhyb3dFeGNlcHRpb24sIFRtcCgpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZW1pdFN0b3JlT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9m
ZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobm9u
WmVyby5pc0dQKCkgPT0gemVyby5pc0dQKCkpOworICAgIHJlc3VsdCA9IG5vblplcm8uaXNHUCgp
ID8gZ3ByKCkgOiBmcHIoKTsKKyAgICBpZiAobm9uWmVyby5pc0dQKCkpCisgICAgICAgIGFwcGVu
ZChNb3ZlLCBub25aZXJvLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIG5vblplcm8sIHJlc3VsdCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc1plcm8gPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRk
QmxvY2soKTsKKworICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6WmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9j
ay0+c2V0U3VjY2Vzc29ycyhpc1plcm8sIGNvbnRpbnVhdGlvbik7CisKKyAgICBpZiAoemVyby5p
c0dQKCkpCisgICAgICAgIGFwcGVuZChpc1plcm8sIE1vdmUsIHplcm8sIHJlc3VsdCk7CisgICAg
ZWxzZQorICAgICAgICBhcHBlbmQoaXNaZXJvLCBNb3ZlRG91YmxlLCB6ZXJvLCByZXN1bHQpOwor
ICAgIGFwcGVuZChpc1plcm8sIEp1bXApOworICAgIGlzWmVyby0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWlu
dDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4gb3JpZ2luKQoreworICAgIFVOVVNFRF9Q
QVJBTShvcmlnaW4pOyAvLyBPT1BTCisKKyAgICBpZiAoIW1fdGllclVwKQorICAgICAgICByZXR1
cm47CisKKyAgICBUbXAgY291bnRkb3duUHRyID0gZ3ByKCk7CisgICAgVG1wIG9sZENvdW50ZG93
biA9IGdwcigpOworICAgIFRtcCBuZXdDb3VudGRvd24gPSBncHIoKTsKKworICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbShyZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihtX3RpZXJVcCkpLCBj
b3VudGRvd25QdHIpOworICAgIGFwcGVuZChNb3ZlMzIsIEFyZzo6YWRkcihjb3VudGRvd25QdHIp
LCBvbGRDb3VudGRvd24pOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkSW1tRm9y
bShkZWNyZW1lbnRDb3VudCkpOworICAgIGFwcGVuZChNb3ZlMzIsIG9sZENvdW50ZG93biwgbmV3
Q291bnRkb3duKTsKKyAgICBhcHBlbmQoU3ViMzIsIEFyZzo6aW1tKGRlY3JlbWVudENvdW50KSwg
bmV3Q291bnRkb3duKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBuZXdDb3VudGRvd24sIEFyZzo6YWRk
cihjb3VudGRvd25QdHIpKTsKKworICAgIGF1dG8qIHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6
Vm9pZCk7CisgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIGVmZmVjdHMud3Jp
dGVzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgcGF0Y2gtPmVmZmVjdHMgPSBlZmZlY3Rz
OworCisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgdGllclVwID0gaml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgdGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgcGFyYW1z
LmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIHRpZXJV
cC5saW5rKCZqaXQpOworCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYVBhZGRpbmdC
eXRlcyA9IDA7CisgICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsID0geyB9
OworICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbC5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVz
KTsKKworICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiht
X2Z1bmN0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVz
VXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRlcyk7CisgICAgICAg
ICAgICBqaXQuanVtcCh0aWVyVXBSZXN1bWUpOworCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxO
b1B0clRhZz4oY2FsbCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6
OnNpbmdsZXRvbigpLnN0dWIodHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKKworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZW1pdFBh
dGNocG9pbnQocGF0Y2gsIFRtcCgpLCBuZXdDb3VudGRvd24sIG9sZENvdW50ZG93bik7Cit9CisK
K0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBl
IHNpZ25hdHVyZSkKK3sKKyAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAg
ICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoYm9keSk7
CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJvZHk7CisgICAgZW1pdFRpZXJVcENoZWNrKFRpZXJV
cENvdW50Ojpsb29wRGVjcmVtZW50KCksIG9yaWdpbigpKTsKKworICAgIHJldHVybiBDb250cm9s
RGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlw
ZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkKK3sKKyAg
ICByZXR1cm4gQ29udHJvbERhdGEoQjM6Ok9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUo
c2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9jb2RlLmFkZEJsb2NrKCkpOworfQor
CitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZEJsb2NrKFR5
cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0
dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6QmxvY2ssIG1fY29kZS5hZGRC
bG9jaygpKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAKKyAgICAvLyBXYXNt
IGJvb2xzIGFyZSBpMzIuCisgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRha2VuLCBub3RUYWtlbik7CisKKyAgICBtX2N1cnJl
bnRCbG9jayA9IHRha2VuOworICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWdu
YXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9u
LCBub3RUYWtlbik7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRWxzZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRT
dGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJl
bnRTdGFjaywgZGF0YS5yZXN1bHQpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZEVs
c2VUb1VucmVhY2hhYmxlKGRhdGEpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNl
VG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IEFTU0VSVChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IGRhdGEuc3BlY2lhbDsKKyAgICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJv
bERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNpemUoKSA8PSAxKTsKKyAgICBp
ZiAocmV0dXJuVmFsdWVzLnNpemUoKSkgeworICAgICAgICBUbXAgcmV0dXJuVmFsdWVHUFIgPSBU
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBUbXAgcmV0dXJuVmFsdWVGUFIg
PSBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBzd2l0Y2ggKGRhdGEuc2ln
bmF0dXJlKCkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBhcHBlbmQo
TW92ZTMyLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFw
cGVuZChSZXQzMiwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHJldHVyblZhbHVlc1sw
XSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldDY0LCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAg
ICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlRlBS
KTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0dXJuVmFsdWVGUFIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5k
KE1vdmVEb3VibGUsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAg
ICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYXBwZW5kKFJldFZvaWQpOworICAg
IHJldHVybiB7IH07Cit9CisKKy8vIE5PVEU6IEFsbCBicmFuY2hlcyBpbiBXYXNtIGFyZSBvbiAz
Mi1iaXQgaW50cworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEm
IGRhdGEsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
dHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KHJldHVyblZhbHVlcywgZGF0YS5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBCYXNpY0Jsb2Nr
KiB0YXJnZXQgPSBkYXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAgaWYgKGNvbmRpdGlv
bikgeworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIGFwcGVuZChK
dW1wKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0KTsKKyAg
ICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTd2l0
Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYg
dGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKGV4cHJlc3Npb25TdGFjaywgdGFyZ2V0c1tpXS0+cmVzdWx0Rm9yQnJhbmNoKCkpOworICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGVmYXVsdFRhcmdldC5yZXN1
bHRGb3JCcmFuY2goKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gdGFyZ2V0c1tpXS0+dGFy
Z2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIFRtcCBjb25zdGFudCA9IGdwcigpOworICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oaSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5k
KEJyYW5jaDMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgY29uc3RhbnQs
IGNvbmRpdGlvbik7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdl
dCwgY29udGludWF0aW9uKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKyAgICB9CisKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1
Y2Nlc3NvcnMoZGVmYXVsdFRhcmdldC50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKTsKKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRy
eSYgZW50cnksIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworCisgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAg
YXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29u
dGludWF0aW9uKTsKKworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5KTsKK30K
KworCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRy
eSYgZW50cnkpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVu
dHJ5LmNvbnRyb2xEYXRhOworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247
CisKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgeworICAgICAgICBhcHBl
bmQoZGF0YS5zcGVjaWFsLCBKdW1wKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNz
b3JzKG1fY3VycmVudEJsb2NrKTsKKyAgICB9CisKKyAgICBmb3IgKFRtcCByZXN1bHQgOiBkYXRh
LnJlc3VsdCkKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJl
c3VsdCk7CisKKyAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRo
aXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgorICAgIGlm
IChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQorICAgICAgICByZXR1cm4gYWRk
UmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKworICAgIHJldHVy
biB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAg
ICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJl
LnJldHVyblR5cGUoKTsKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFR5cGU6
OlZvaWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlw
ZTo6STY0OgorICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUeXBlOjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIHJlc3VsdCA9IGZwcigp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsK
KworICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KSkgeworICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0
ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJn
cy5zaXplKCkpKTsKKworICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNhbiBiZSBsaW5rZWQgaGVy
ZSwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludCwgYmVjYXVzZSBhbGwgaW1wb3J0
IHN0dWJzIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIEIzIGNvbXBpbGF0aW9uIHN0YXJ0cy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgorICAgICAgICBUbXAgdGFy
Z2V0SW5zdGFuY2UgPSBncHIoKTsKKyAgICAgICAgLy8gT09QUzogVHJ5IHRvIGlzZWwgdGhpcyBi
ZXR0ZXIKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKEluc3RhbmNlOjpvZmZzZXRP
ZlRhcmdldEluc3RhbmNlKGZ1bmN0aW9uSW5kZXgpKSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAg
ICBhcHBlbmQoQWRkNjQsIGluc3RhbmNlVmFsdWUoKSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKHRhcmdldEluc3RhbmNlKSwgdGFyZ2V0SW5zdGFuY2Up
OworCisgICAgICAgIEJhc2ljQmxvY2sqIGlzV2FzbUJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgICAgIEJhc2ljQmxvY2sqIGlzRW1iZWRkZXJCbG9jayA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsK
KworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8pLCB0YXJnZXRJbnN0YW5jZSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1dhc21CbG9jaywgaXNFbWJlZGRlckJsb2Nr
KTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
LnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBh
bGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0
aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdl
IGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgor
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKworICAgICAgICAgICAgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25B
aXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0g
KFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgICAgICBwYXRjaEFyZ3Mu
YXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25J
bmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbklu
ZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChp
c1dhc21CbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAg
ICAgICAgICAgYXBwZW5kKGlzV2FzbUJsb2NrLCBKdW1wKTsKKyAgICAgICAgICAgIGlzV2FzbUJs
b2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICB7
CisgICAgICAgICAgICBUbXAganVtcERlc3RpbmF0aW9uID0gZ3ByKCk7CisgICAgICAgICAgICBh
cHBlbmQoaXNFbWJlZGRlckJsb2NrLCBNb3ZlLCBBcmc6OmJpZ0ltbShJbnN0YW5jZTo6b2Zmc2V0
T2ZXYXNtVG9FbWJlZGRlclN0dWIoZnVuY3Rpb25JbmRleCkpLCBqdW1wRGVzdGluYXRpb24pOwor
ICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgQWRkNjQsIGluc3RhbmNlVmFsdWUo
KSwganVtcERlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ss
IE1vdmUsIEFyZzo6YWRkcihqdW1wRGVzdGluYXRpb24pLCBqdW1wRGVzdGluYXRpb24pOworCisg
ICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1
cm5UeXBlKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5l
ZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAg
ICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcg
dG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJM
YXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nKSk7CisKKyAgICAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdz
OworICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChqdW1wRGVzdGluYXRpb24pOworCisgICAg
ICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1
cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXAp
IHsKKyAgICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1
cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJh
bXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGVtaXRQYXRjaHBvaW50KGlzRW1iZWRkZXJC
bG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAg
ICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgSnVtcCk7CisgICAgICAgICAgICBpc0VtYmVkZGVy
QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgICAgICAvLyBUaGUgY2FsbCBjb3Vs
ZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291
bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlH
bG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBp
bnN0YW5jZVZhbHVlKCksIGNvbnRpbnVhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0
byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgIFZlY3RvcjxD
b25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25B
aXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0g
KFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBl
bmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBh
dGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQo
eyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBm
dW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg
IGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1v
dmUocGF0Y2hBcmdzKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRh
a2VMYXN0KCk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5z
aXplKCkpOworCisgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGlu
ZGlyZWN0IGNhbiBjYWxsIGVpdGhlciBXZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLiBCZWNhdXNlCisgICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24gaXMgbGlrZSBjYWxsaW5nIGludG8gdGhlIGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBh
c3N1bWUgYWxsIGNhbGwgaW5kaXJlY3RzCisgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBm
b3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1bGF0aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1l
bnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhcmdzLnNpemUoKSkpOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlciA9IGdwcigpOworICAgIEV4cHJlc3Npb25UeXBlIGluc3RhbmNlc0J1ZmZlciA9IGdw
cigpOworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGggPSBn
cHIoKTsKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3Jt
KEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygp
LCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mTGVuZ3Ro
KCksIEIzOjpXaWR0aDY0KSk7CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0
YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpLCBjYWxsYWJsZUZ1bmN0aW9u
QnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSksIGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpKSwgaW5zdGFu
Y2VzQnVmZmVyKTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwgY2FsbGFibGVGdW5j
dGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUzMiwgY2FsbGVlSW5k
ZXgsIGNhbGxlZUluZGV4KTsKKworICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2lu
ZyBmb3IgaXMgdmFsaWQuCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChCcmFu
Y2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBjYWxsZWVJ
bmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfSwgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNDYWxsSW5kaXJlY3QpOworICAgIH0pOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29k
ZSA9IGdwcigpOworICAgIHsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJl
SW5kZXggPSBncHIoKTsKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJs
ZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmltbShzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpLCBjYWxsZWVTaWdu
YXR1cmVJbmRleCk7CisgICAgICAgIGFwcGVuZChNdWw2NCwgY2FsbGVlSW5kZXgsIGNhbGxlZVNp
Z25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIGNhbGxlZUNvZGUpOyAv
LyBQb2ludGVyIHRvIGNhbGxlZSBjb2RlLgorCisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQg
aXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5p
dGlhbGl6ZWQuCisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywg
d2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJ
bmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEw
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFz
c3VtZXMgaTY0Iik7CisgICAgICAgIC8vIE9PUFM6IFRoaXMgc2VlbXMgZHVtYiB0byBkbyB0d28g
Y2hlY2tzIGp1c3QgZm9yIGEgbmljZXIgZXJyb3IgaGVyZS4uLgorCisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4
KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
U2lnbmF0dXJlOjppbnZhbGlkSW5kZXggPT0gMCwgIiIpOworICAgICAgICAgICAgYXBwZW5kKEJy
YW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgY2FsbGVlU2ln
bmF0dXJlSW5kZXgsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgfSwgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok51
bGxUYWJsZUVudHJ5KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gZ3ByKCk7
CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmUpKSwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAgICAg
ICBhcHBlbmQoQnJhbmNoNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwp
LCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAg
IH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNl
cHRpb25UeXBlOjpCYWRTaWduYXR1cmUpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBE
byBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFRtcCBuZXdDb250
ZXh0SW5zdGFuY2UgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW5kZXgoaW5z
dGFuY2VzQnVmZmVyLCBjYWxsZWVJbmRleCwgOCwgMCksIG5ld0NvbnRleHRJbnN0YW5jZSk7CisK
KyAgICAgICAgQmFzaWNCbG9jayogZG9Db250ZXh0U3dpdGNoID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOwor
CisgICAgICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBkb0NvbnRleHRTd2l0Y2gp
OworCisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAg
ICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdp
dGggQm91bmRzQ2hlY2tpbmcgbWVtb3J5LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0
IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MjE4MQorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAg
ICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdp
c3RlckluZm86OmdldCgpOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBp
bm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4
dEluc3RhbmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
YmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVXYXNtQ29udGV4dEluc3RhbmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUg
cmVnaXN0ZXIKKyAgICAgICAgICAgIC8vICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgp
ID09IDEpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBu
ZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXpl
T2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhu
ZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSks
IHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2
b2lkKi4KKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZG9Db250ZXh0U3dp
dGNoLCBwYXRjaHBvaW50LCBUbXAoKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVl
KCkpOworICAgICAgICBhcHBlbmQoZG9Db250ZXh0U3dpdGNoLCBKdW1wKTsKKyAgICAgICAgZG9D
b250ZXh0U3dpdGNoLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YWRkcihjYWxsZWVDb2RlKSwgY2FsbGVlQ29kZSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUg
PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAg
IGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpJMzI6Cisg
ICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYXV0byogcGF0Y2ggPSBhZGRQ
YXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy53cml0
ZXNQaW5uZWQgPSB0cnVlOworICAgIHBhdGNoLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsK
KyAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJz
IHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgIC8vIFdlIHBlc3Np
bWlzdGljYWxseSBhc3N1bWUgd2UncmUgYWx3YXlzIGNhbGxpbmcgc29tZXRoaW5nIHRoYXQgaXMg
Ym91bmRzIGNoZWNraW5nIHNvCisgICAgLy8gYmVjYXVzZSB0aGUgd2FzbS0+d2FzbSB0aHVuayB1
bmNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lzdGVycy4KKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHVi
IGFzc3VtZXMgaXQgY2FuCisgICAgLy8gdXNlIGFsbCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhcyBz
Y3JhdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisg
ICAgcGF0Y2gtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
IGVtaXRBcmdzOworICAgIGVtaXRBcmdzLmFwcGVuZChjYWxsZWVDb2RlKTsKKyAgICB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaCwg
YXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgIGVtaXRBcmdz
LmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgIH0pOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9p
ZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICB9KTsKKworICAgIGVtaXRQ
YXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgcmVzdWx0LCBXVEZNb3ZlKGVtaXRBcmdz
KSk7CisKKyAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3Nl
bWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5Lgor
ICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2spOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3Qg
RXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUmIHNvdXJjZSkKK3sKKyAg
ICAvLyBPT1BTOiBXZSBraW5kYSB3YW50IHR5cGVzIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2
NC9mMzIvZjY0IQorICAgIFJFTEVBU0VfQVNTRVJUKGRzdC5pc0dQKCkgPT0gc291cmNlLmlzR1Ao
KSk7CisgICAgYXBwZW5kKGRzdC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgc291cmNlLCBk
c3QpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdCkK
K3sKKyAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSByZXN1bHRTdGFjay5zaXplKCkpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCisgICAgICAgIHVu
aWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFja1tyZXN1bHRTdGFj
ay5zaXplKCkgLSAxIC0gaV0pOworfQorCisvL3N0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3Rh
Y2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgQWlySVJHZW5lcmF0b3I6OkV4cHJl
c3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCisvL3sKKy8vICAgIGRhdGFMb2coY29tbWEsICJF
eHByZXNzaW9uU3RhY2s6Iik7CisvLyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cHJlc3Npb24gOiBl
eHByZXNzaW9uU3RhY2spCisvLyAgICAgICAgZGF0YUxvZyhjb21tYSwgKmV4cHJlc3Npb24pOwor
Ly99CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRy
eT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjaykK
K3sKKyAgICBVTlVTRURfUEFSQU0oY29udHJvbFN0YWNrKTsKKyAgICBVTlVTRURfUEFSQU0oZXhw
cmVzc2lvblN0YWNrKTsKKworICAgIC8vIE9PUFMhCisgICAgLyoKKyAgICBkYXRhTG9nTG4oIlBy
b2Nlc3NpbmcgR3JhcGg6Iik7CisgICAgZGF0YUxvZyhtX2NvZGUpOworICAgIGRhdGFMb2dMbigi
V2l0aCBjdXJyZW50IGJsb2NrOiIsICptX2N1cnJlbnRCbG9jayk7CisgICAgZGF0YUxvZ0xuKCJD
b250cm9sIHN0YWNrOiIpOworICAgIEFTU0VSVChjb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gY29udHJvbFN0YWNrLnNpemUoKTsgaS0tOykgeworICAgICAgICBkYXRh
TG9nKCIgICIsIGNvbnRyb2xTdGFja1tpXS5jb250cm9sRGF0YSwgIjogIik7CisgICAgICAgIENv
bW1hUHJpbnRlciBjb21tYSgiLCAiLCAiIik7CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2so
Y29tbWEsICpleHByZXNzaW9uU3RhY2spOworICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29u
dHJvbFN0YWNrW2ldLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBkYXRhTG9nTG4o
KTsKKyAgICB9CisgICAgZGF0YUxvZ0xuKCk7CisgICAgKi8KK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgoreworICAgIHJldHVybiBCMzo6T3JpZ2luKCk7
CisgICAgLy9PcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1f
cGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CisgICAgLy9BU1NFUlQoaXNW
YWxpZE9wVHlwZShzdGF0aWNfY2FzdDx1aW50OF90PihvcmlnaW4ub3Bjb2RlKCkpKSk7CisgICAg
Ly9yZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsKK30KKworRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFp
cihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwg
Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
VGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlv
bikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlv
bj4oKTsKKworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBz
dGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKwor
ICAgIEIzOjpQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGUgPSBwcm9jZWR1cmUu
Y29kZSgpOworCisgICAgcHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFt
JiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KCJXYXNtOiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2lu
PihvcmlnaW4pKTsKKyAgICB9KTsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1
c2UgZWl0aGVyIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCisg
ICAgLy8gU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1bmF2YWlsYWJsZVJlZ2lzdGVycygpLiBJ
biBleGNoYW5nZSBmb3IgdGhpcyBjb25jZXNzaW9uLCB3ZQorICAgIC8vIGRvbid0IHN0cmljdGx5
IG5lZWQgdG8gcnVuIEFpcjo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLCB3aGljaCBzYXZlcyBhIGJp
dCBvZiBDUFUgdGltZSBhdAorICAgIC8vIG9wdExldmVsPTEuCisgICAgLy8gT09QUzogRG8gd2Ug
bmVlZCB0aGlzPyBTaG91bGQgd2UganVzdCBzZXQgaXQgZGlyZWN0bHkgb24gQ29kZT8KKyAgICBw
cm9jZWR1cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKKyAgICAKKyAgICBwcm9jZWR1
cmUuc2V0T3B0TGV2ZWwoY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZQorICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQor
ICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CisK
KyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5n
ZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVu
Y3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAg
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CisKKworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgKytpKQorICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvckJsb2Nr
KGkpLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CisgICAgfQorICAgIC8vQjM6OkFpcjo6dmFsaWRh
dGUoY29kZSk7CisgICAgLy8gT09QUzogVmFsaWRhdGUgJ2NvZGUnIGhlcmUhCisgICAgCisgICAg
eworICAgICAgICBCMzo6QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihjb2RlKTsKKyAgICAgICAg
QjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVj
dHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRy
eXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zm
c2V0TGlzdCgpOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNr
c0Zvck1vZE9yRGl2KGJvb2wgaXNTaWduZWREaXYsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJl
c3Npb25UeXBlIHJpZ2h0KQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09
IDQgfHwgc2l6ZW9mKEludFR5cGUpID09IDgsICIiKTsKKworICAgIGVtaXRDaGVjayhbJl0gewor
ICAgICAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBCcmFuY2hUZXN0MzIgOiBCcmFu
Y2hUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJpZ2h0LCByaWdo
dCk7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwg
RXhjZXB0aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgIH0pOworCisgICAgaWYgKGlzU2ln
bmVkRGl2KSB7CisgICAgICAgIEFTU0VSVChzdGQ6OmlzX3NpZ25lZDxJbnRUeXBlPjo6dmFsdWUp
OworICAgICAgICBpbnQ2NF90IG1pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8SW50VHlwZT46Om1p
bigpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8gT09QUzogVHJ5
IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAgICAgICAgICBUbXAgbWluVG1wID0g
Z3ByKCk7CisgICAgICAgICAgICBUbXAgbmVnT25lID0gZ3ByKCk7CisKKyAgICAgICAgICAgIEIz
OjpBaXI6Ok9wY29kZSBvcCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQ29tcGFyZTMyIDogQ29t
cGFyZTY0OworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG1pbiksIG1pblRt
cCk7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwpLCBsZWZ0LCBtaW5UbXAsIG1pblRtcCk7CisKKyAgICAgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmltbSgtMSksIG5lZ09uZSk7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdodCwgbmVnT25lLCBuZWdPbmUpOworCisg
ICAgICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBl
OjpJbnRlZ2VyT3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50MzJfdD4odHJ1
ZSwgbGVmdCwgcmlnaHQpOworCisgICAgaW50MzJfdCAoKmRpdikoaW50MzJfdCwgaW50MzJfdCkg
PSBbXSAoaW50MzJfdCBhLCBpbnQzMl90IGIpIC0+IGludDMyX3QgeyByZXR1cm4gYSAvIGI7IH07
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdENDYWxsKGRpdiwgcmVzdWx0LCBsZWZ0LCBy
aWdodCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjxpbnQzMl90PihmYWxzZSwgbGVmdCwgcmlnaHQp
OworCisgICAgaW50MzJfdCAoKnJlbSkoaW50MzJfdCwgaW50MzJfdCkgPSBbXSAoaW50MzJfdCBh
LCBpbnQzMl90IGIpIC0+IGludDMyX3QgeyByZXR1cm4gYSAlIGI7IH07CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgZW1pdENDYWxsKHJlbSwgcmVzdWx0LCBsZWZ0LCByaWdodCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJEaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVj
a3NGb3JNb2RPckRpdjx1aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKworICAgIHVpbnQz
Ml90ICgqZGl2KSh1aW50MzJfdCwgdWludDMyX3QpID0gW10gKHVpbnQzMl90IGEsIHVpbnQzMl90
IGIpIC0+IHVpbnQzMl90IHsgcmV0dXJuIGEgLyBiOyB9OworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGVtaXRDQ2FsbChkaXYsIHJlc3VsdCwgbGVmdCwgcmlnaHQpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JN
b2RPckRpdjx1aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKworICAgIHVpbnQzMl90ICgq
cmVtKSh1aW50MzJfdCwgdWludDMyX3QpID0gW10gKHVpbnQzMl90IGEsIHVpbnQzMl90IGIpIC0+
IHVpbnQzMl90IHsgcmV0dXJuIGEgJSBiOyB9OworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVt
aXRDQ2FsbChyZW0sIHJlc3VsdCwgbGVmdCwgcmlnaHQpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZT
PihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRp
djxpbnQ2NF90Pih0cnVlLCBsZWZ0LCByaWdodCk7CisKKyAgICBpbnQ2NF90ICgqZGl2KShpbnQ2
NF90LCBpbnQ2NF90KSA9IFtdIChpbnQ2NF90IGEsIGludDY0X3QgYikgLT4gaW50NjRfdCB7IHJl
dHVybiBhIC8gYjsgfTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0Q0NhbGwoZGl2LCBy
ZXN1bHQsIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PGludDY0X3Q+KGZhbHNl
LCBsZWZ0LCByaWdodCk7CisKKyAgICBpbnQ2NF90ICgqcmVtKShpbnQ2NF90LCBpbnQ2NF90KSA9
IFtdIChpbnQ2NF90IGEsIGludDY0X3QgYikgLT4gaW50NjRfdCB7IHJldHVybiBhICUgYjsgfTsK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0Q0NhbGwocmVtLCByZXN1bHQsIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQp
OworCisgICAgdWludDY0X3QgKCpkaXYpKHVpbnQ2NF90LCB1aW50NjRfdCkgPSBbXSAodWludDY0
X3QgYSwgdWludDY0X3QgYikgLT4gdWludDY0X3QgeyByZXR1cm4gYSAvIGI7IH07CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgZW1pdENDYWxsKGRpdiwgcmVzdWx0LCBsZWZ0LCByaWdodCk7CisK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
ZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworCisg
ICAgdWludDY0X3QgKCpyZW0pKHVpbnQ2NF90LCB1aW50NjRfdCkgPSBbXSAodWludDY0X3QgYSwg
dWludDY0X3QgYikgLT4gdWludDY0X3QgeyByZXR1cm4gYSAlIGI7IH07CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgZW1pdENDYWxsKHJlbSwgcmVzdWx0LCBsZWZ0LCByaWdodCk7CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5v
bmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC5jb3VudFRyYWlsaW5nWmVyb3MzMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIo
KSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBh
dXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczY0KHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9u
KCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMy
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IGppdC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50MzJf
dCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1aW50MzJfdCB7
IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bj
b3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uNjQocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyNlbmRpZgorCisgICAgdWludDY0X3QgKCpwb3Bjb3VudCkoaW50NjRfdCkgPSBbXSAoaW50
NjRfdCB2YWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwodmFs
dWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPEY2NENv
bnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChC
Mzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVn
aXN0ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJs
ZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7
CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigp
OworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0
Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0
czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuY29udmVydFVJbnQ2
NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFtcy5ncFNjcmF0
Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sx
XS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZm
ZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1p
dFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVh
cmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZs
b2F0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3Vu
ZFRvd2FyZE5lYXJlc3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7
CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBl
IGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1
dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0RvdWJsZShw
YXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0u
ZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50
KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgVG1wIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWluKCkpKSk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVt
cDIgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBw
ZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBhcHBlbmQoT3IzMiwg
dGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICBhcHBlbmQoQnJh
bmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwg
dGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0
byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgbWF4ID0gYWRkQ29uc3RhbnQo
VHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGFkZENv
bnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisKKyAgICBUbXAgdGVt
cDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZs
b2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJn
LCBtaW4sIHRlbXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZywgbWF4LCB0ZW1w
Mik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5j
KTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJ
bnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1
bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAg
IH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCisKK3RlbXBsYXRlPD4KK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBU
bXAgbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0
YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICog
LTIuMCkpOworICAgIFRtcCBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4oLTEuMCkpOworCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRl
bXAyID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnLCBtaW4sIHRlbXAxKTsK
KyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVu
ZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFw
cGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyks
IHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhj
ZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisK
KyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9V
aW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJn
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGFkZENv
bnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKworICAgIFRtcCB0
ZW1wMSA9IGdwcigpOworICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVx
dWFsKSwgYXJnLCBtaW4sIHRlbXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRv
dWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZywg
bWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0
Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpu
b25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChw
YXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIFRtcCBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9j
YXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
NjRfdD46Om1pbigpKSkpOworCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRlbXAy
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVu
ZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRl
bXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5j
aFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRl
bXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0
LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDY0KHBhcmFt
c1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGFkZENvbnN0YW50KFR5
cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBUbXAgbWluID0g
YWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKyAg
ICAKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChDb21wYXJl
RG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1w
Mik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAg
ICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFRtcCBzaWduQml0Q29u
c3RhbnQ7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3Qg
aGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25l
ZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAg
ICAgICAvLyB0aGUgbnVtYmVycyBhcmUgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2ln
bmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBm
cHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBu
ZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwg
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1h
eCgpKSkpOworICAgIH0KKworICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gYXJnczsKKyAgICBh
dXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGFyZ3MuYXBwZW5kKGFyZyk7
CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgYXJncy5hcHBlbmQoc2lnbkJpdENvbnN0YW50
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9
CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQ
UlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNb
Ml0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50NjQo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAg
ICB9KTsKKworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUoYXJncykpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0VHJ1bmNTRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMy
LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5
cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIo
KTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnLCBtaW4sIHRl
bXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAg
YXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAg
ICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9
KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9h
dFRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGFk
ZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KC0yLjApKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0
d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKyAgICAKKyAg
ICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NU
aGFuT3JFcXVhbCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwg
QXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwp
LCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisg
ICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVz
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0YW50Owor
ICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4g
aW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQgaW50ZWdl
cnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAgICAgLy8g
dGhlIG51bWJlcnMgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIu
IFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUg
YjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCisgICAg
ICAgIHNpZ25CaXRDb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0
PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRf
dD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAg
fQorCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNY
ODYoKSkgeworICAgICAgICBhcmdzLmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAgICAgICBw
YXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2gg
PSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVn
OworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5m
cFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAg
ICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5mcHIo
KSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hw
b2ludCwgcmVzdWx0LCBXVEZNb3ZlKGFyZ3MpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBpZiAoaXNW
YWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFw
cGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyAgICAKKyAgICBUbXAgZWN4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICBhcHBl
bmQoTW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUsIHNoaWZ0LCBlY3gpOwor
ICAgIGFwcGVuZChvcCwgZWN4LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJTdWIoQjM6OkFpcjo6T3Bjb2RlIG9wLCBFeHByZXNz
aW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisgICAgaWYgKGlzVmFs
aWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBl
bmQob3AsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVh
bnMKKyAgICAvLyBiID0gYiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7Cisg
ICAgYXBwZW5kKG9wLCByaHMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUgb3AsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQob3AgPT0gQWJzRmxvYXQgfHwgb3AgPT0gQWJzRG91
YmxlKTsKKworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBB
cmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYo
KSk7CisKKyAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICBpZiAob3AgPT0gQWJzRmxvYXQp
IHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKH4oMXVsbCA8PCAzMSkpLCBjb25zdGFu
dCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0KTsKKyAg
ICAgICAgYXBwZW5kKEFuZEZsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ofigxdWxsIDw8IDYzKSksIGNvbnN0YW50KTsK
KyAgICAgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAg
ICAgYXBwZW5kKEFuZERvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5PcChCMzo6
QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZnByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJn
OjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgbGhzLCByaHMsIHJlc3VsdCk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisKKyAg
ICAvLyBPcCBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBPcCBhCisgICAgLy8gT09Q
UzogdmVyaWZ5CisgICAgYXBwZW5kKE1vdmVEb3VibGUsIGxocywgcmVzdWx0KTsgLy8gT09QUzog
U2hvdWxkIGJlIE1vdmVGbG9hdCAmIE1vdmVEb3VibGUKKyAgICBhcHBlbmQob3AsIHJocywgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGFwcGVuZChDZWlsRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChNdWwzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNv
bmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkRlbW90ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZw
cigpOworICAgIGFwcGVuZChDb252ZXJ0RG91YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyTWluPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZCht
X2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3Vj
Y2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9h
dCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAg
aXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVx
dWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFu
Y2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiks
IGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwg
Z3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1v
dmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBK
dW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9u
KTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMdD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWF4PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90
RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5h
ZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hGbG9hdCwgQXJn
Ojpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKwor
ICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBh
cHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5z
ZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NU
aGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1w
KTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TXVsPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChN
dWxEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKERpdkZsb2F0LCBhcmcwLCBh
cmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvcHlz
aWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gT09QUzogV2UgY2FuIGhh
dmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBmb3IgdGhlIGltbXMgYW5kIHR3byBvcGVyYW5kIGZvcm1z
IG9uIHg4NgorICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAg
IFRtcCBzaWduID0gZ3ByKCk7CisgICAgVG1wIHZhbHVlID0gZ3ByKCk7CisKKyAgICAvLyBPT1BT
OiBDYW4gZml0IGluIEltbS9CaXRJbW0gaW5zdGVhZCBvZiBCaWdJbW0/CisgICAgYXBwZW5kKE1v
dmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
MHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEsIHNpZ24sIHNpZ24p
OworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDMy
LCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjMyLCBzaWduLCB2YWx1ZSwg
dmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAg
YXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCB0ZW1wLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJSZWludGVycHJldEkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVu
ZChNb3ZlMzJUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRBbmQ+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
QW5kNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBh
cmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbCks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEd0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3Vi
bGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4pLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxej4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NERpdj4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IHdoYXQgYWJvdXQgY2hpbGwt
bmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2RG91Ymxl
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TmU+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zNjQsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGlmIChp
c1ZhbGlkRm9ybShOZWdhdGVGbG9hdCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgYXBw
ZW5kKE5lZ2F0ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBUbXAg
Y29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xLjApKSk7CisgICAgICAgIGFwcGVuZChNdWxGbG9hdCwgY29u
c3RhbnQsIGFyZzAsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBbmQ+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQW5k
MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0VT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
MzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBYnM+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEFicyhBYnNEb3VibGUsIGFyZzAs
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRXE+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29weXNpZ24+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29kZWdlbiBoZXJlIGZv
ciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHNpZ24gPSBncHIoKTsKKyAgICBU
bXAgdmFsdWUgPSBncHIoKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMSwgdGVt
cDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwMDAwMDAwMDApLCBz
aWduKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVu
ZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJp
Z0ltbSgweDdmZmZmZmZmZmZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1w
MSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjY0LCBzaWduLCB2YWx1ZSwgdmFsdWUp
OworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyQ29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBl
bmQoQ29udmVydEludDY0VG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90
bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3Rh
dGVMZWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50MzJUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkxlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJHZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyU2hyVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biBhZGRTaGlmdChVcnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUkzMj4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE1vdmUzMiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQs
IHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENlaWw+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ2VpbERvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkU2hpZnQoTHNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRGbG9vcj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChGbG9vckRvdWJsZSwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyWG9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJBYnM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEFi
cyhBYnNGbG9hdCwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1pbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogZ3JlYXRlclRoYW5PckVxdWFsID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisK
KyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChp
c0VxdWFsLCBPckRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVh
bCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisg
ICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVu
ZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3Nv
cnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9yRXF1YWwpOworCisgICAgYXBwZW5kKGdyZWF0
ZXJUaGFuT3JFcXVhbCwgTW92ZURvdWJsZSwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoZ3Jl
YXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1YWwtPnNldFN1Y2Nl
c3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9u
OworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChNdWxGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmV0dXJuIGFkZEludGVnZXJTdWIoU3ViNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZWludGVycHJl
dEYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlRmxvYXRU
bzMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBZGQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQWRkMzIsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoU3ViRG91YmxlLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyT3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3IzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0THRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0Uz4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFhvcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChNdWw2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7Cisg
ICAgaWYgKGlzVmFsaWRGb3JtKFN1YkZsb2F0LCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1w
KSkKKyAgICAgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGVs
c2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAgICAgYXBwZW5kKE1v
dmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcxLCBy
ZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UHJvbW90ZUYzMj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0RmxvYXRUb0RvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZERvdWJsZSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7Cisg
ICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTmU+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChhcmcwICYmIGFyZzEpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjRSZWludGVycHJldEk2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAg
IGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRXE+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXE+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRmxvb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIo
KTsKKyAgICBhcHBlbmQoRmxvb3JGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
Q29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29u
dmVydEludDMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRXF6PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKFRlc3QzMiwgQXJnOjpyZXNDb25k
KE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0UmVpbnRlcnByZXRGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclM+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUnNoaWZ0NjQs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFVyc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFNxcnQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoU3FydERvdWJsZSwgYXJnMCwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZFNoaWZ0KExzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2ND4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlJvdGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXR1cm4gYWRkU2hpZnQoUm90YXRlTGVmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90
cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSb3Rh
dGVSaWdodDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEV4dGVuZFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0
Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRo
YW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWc+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBpZiAoaXNWYWxpZEZvcm0oTmVnYXRlRG91YmxlLCBBcmc6
OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoTmVnYXRlRG91YmxlLCBhcmcwLCByZXN1
bHQpOworICAgIGVsc2UgeworICAgICAgICBUbXAgY29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBl
OjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPigtMS4wKSkp
OworICAgICAgICBhcHBlbmQoTXVsRmxvYXQsIGNvbnN0YW50LCBhcmcwLCByZXN1bHQpOworICAg
IH0KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0TWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3Vy
cmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgQW5kRG91Ymxl
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBp
c0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1
YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFu
Y2hEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4p
LCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhsZXNzVGhhbiwgY29u
dGludWF0aW9uKTsKKworICAgIGFwcGVuZChsZXNzVGhhbiwgTW92ZURvdWJsZSwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAgIGxlc3NUaGFuLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NExlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QWRk
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKEFkZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBp
bGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw3IEBA
IHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW4KICAgICBlZmZlY3RzLnJl
YWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVm
ZmVjdHM7CiAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29u
dGV4dEluc3RhbmNlR1BSKSk7Ci0gICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUo
KSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3Rh
bmNlVmFsdWUoKSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7IC8vIE9PUFM6IFByb2JhYmx5IHNo
b3VsZCBiZSB1c2luZyBhcmchCiAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBt
X3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW0pIHsKICAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250ZXh0SW5zdGFu
Y2VHUFIpOwpAQCAtNDU5LDkgKzQ1OSw5IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdl
YkFzc2VtYmx5R2wKIAogICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3Jl
Q2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CiAgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMg
dGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0
aW9uIGlzLgotICAgICAgICBWYWx1ZSogcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFu
Y2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSk7Ci0gICAgICAgIFZhbHVl
KiBhY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgcG9pbnRlclRvQWN0dWFs
U3RhY2tMaW1pdCk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigpLCBhY3R1YWxTdGFja0xpbWl0LCBpbnN0YW5jZVZh
bHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGlt
aXQoKSkpOworICAgICAgICBWYWx1ZSogcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCA9IGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNl
dE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSk7CisgICAgICAgIFZhbHVlKiBhY3R1YWxT
dGFja0xpbWl0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCk7CisgICAg
ICAgIGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIG9yaWdpbigp
LCBhY3R1YWxTdGFja0xpbWl0LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KElu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOyAvLyBPT1BTOiBzaG91bGQgYmUg
YmxvY2shCiAgICAgfQogCiAgICAgaWYgKCEhbWVtb3J5KSB7CkBAIC0xNjA5LDYgKzE2MDksNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0CiAgICAgaWYgKGlzWDg2
KCkpCiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3Jh
dGNoUmVnaXN0ZXJzKCkpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
CiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTE2MjksNiArMTYzMCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJDb24KICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0Y2hw
b2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
Q29uc3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRj
aHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICNpZiBDUFUoWDg2XzY0KQpA
QCAtMTgzOCw3ICsxODQwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFRydQogICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAg
IH0KICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7IC8vIE9PUFM6IFRo
aXMgbG9va3Mgc3VwZXIgd3JvbmcgZ2l2ZW4gd2UgZG9uJ3Qgc2F5IHdlIGNsb2JiZXIgdGhpcyEK
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOwogICAgICAgICBGUFJSZWcg
Y29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOwogICAgICAgICBpZiAoaXNYODYoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgi
CiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtQWlySVJHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUu
aCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKQEAgLTI3MSw3ICsyNzIsNyBA
QCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpCiAKICAgICAgICAgbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6
dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBu
dWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29t
cGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLmRhdGEu
ZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Ro
cm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0g
cGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwg
ZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFko
IXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsNiArNjIsMzYgQEAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNt
Q2FsbGluZwogICAgIHJldHVybiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiB9CiAKK2Nv
bnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigpCit7
CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxKU0NDYWxsaW5nQ29udmVudGlvbkFpcj4g
c3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0
YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgc3RhdGljSlNDQ2FsbGlu
Z0NvbnZlbnRpb24uY29uc3RydWN0KFZlY3RvcjxSZWc+KCksIFZlY3RvcjxSZWc+KCksIFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0
YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uOworfQorCitjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRp
b25BaXImIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXI+IHN0YXRpY1dhc21DYWxsaW5nQ29u
dmVudGlvbjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljV2FzbUNhbGxpbmdDb252
ZW50aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRp
b25GbGFnLCBbXSAoKSB7CisgICAgICAgIFZlY3RvcjxSZWc+IGdwckFyZ3VtZW50UmVnaXN0ZXJz
KEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQor
ICAgICAgICAgICAgZ3ByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBHUFJJbmZvOjp0b0FyZ3VtZW50
UmVnaXN0ZXIoaSk7CisKKyAgICAgICAgVmVjdG9yPFJlZz4gZnByQXJndW1lbnRSZWdpc3RlcnMo
RlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisg
ICAgICAgICAgICBmcHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEZQUkluZm86OnRvQXJndW1lbnRS
ZWdpc3RlcihpKTsKKworICAgICAgICBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY29uc3Ry
dWN0KFdURk1vdmUoZ3ByQXJndW1lbnRSZWdpc3RlcnMpLCBXVEZNb3ZlKGZwckFyZ3VtZW50UmVn
aXN0ZXJzKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCShy
ZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgpAQCAtNDQsMjcgKzQ1LDI3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLXR5cGVkZWYgdW5zaWduZWQgKCpOZXh0
T2Zmc2V0KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSB0eXBlKTsKK3R5cGVkZWYg
dW5zaWduZWQgKCpOZXh0T2Zmc2V0KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KTsKIAogdGVtcGxh
dGU8dW5zaWduZWQgaGVhZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CiBjbGFzcyBD
YWxsaW5nQ29udmVudGlvbiB7CiBwdWJsaWM6CiAgICAgQ2FsbGluZ0NvbnZlbnRpb24oVmVjdG9y
PFJlZz4mJiBncHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2Fs
bGVlU2F2ZVJlZ2lzdGVycykKLSAgICAgICAgOiBtX2dwckFyZ3MoZ3ByQXJncykKLSAgICAgICAg
LCBtX2ZwckFyZ3MoZnByQXJncykKLSAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoY2Fs
bGVlU2F2ZVJlZ2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkK
KyAgICAgICAgLCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxl
ZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKICAgICB7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0
b3I8UmVnPiByZWdBcmdzLCBCMzo6VHlwZSB0eXBlLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0
YWNrT2Zmc2V0KSBjb25zdAorICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChj
b25zdCBWZWN0b3I8UmVnPiYgcmVnQXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09m
ZnNldCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIEIzOjpWYWx1ZVJlcDo6cmVnKHJlZ0FyZ3NbY291bnQrK10pOwog
CiAgICAgICAgIGNvdW50Kys7CiAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFs
dWVSZXA6OnN0YWNrQXJndW1lbnQoc3RhY2tPZmZzZXQpOwotICAgICAgICBzdGFja09mZnNldCA9
IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCwgdHlwZSk7CisgICAgICAgIHN0YWNrT2Zmc2V0ID0g
dXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKQEAgLTczLDEwICs3NCwxMCBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
ICAgICAgICAgY2FzZSBCMzo6SW50MzI6CiAgICAgICAgIGNhc2UgQjM6OkludDY0OgotICAgICAg
ICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgdHlwZSwgZ3BBcmd1
bWVudENvdW50LCBzdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1
bWVudEltcGwobV9ncHJBcmdzLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAg
ICAgY2FzZSBCMzo6RmxvYXQ6CiAgICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAgICAgICAg
IHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJndW1lbnRD
b3VudCwgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJ
bXBsKG1fZnByQXJncywgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CiAgICAgICAgIGNh
c2UgQjM6OlZvaWQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTg5LDE5ICsx
OTAsMTQ0IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdp
c3RlcnM7CiB9OwogCi1pbmxpbmUgdW5zaWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJy
ZW50T2Zmc2V0LCBCMzo6VHlwZSkKK3RlbXBsYXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRP
ZmZzZXQgdXBkYXRlT2Zmc2V0PgorY2xhc3MgQ2FsbGluZ0NvbnZlbnRpb25BaXIgeworcHVibGlj
OgorICAgIENhbGxpbmdDb252ZW50aW9uQWlyKFZlY3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9y
PFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYmIGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAg
ICAgIDogbV9ncHJBcmdzKFdURk1vdmUoZ3ByQXJncykpCisgICAgICAgICwgbV9mcHJBcmdzKFdU
Rk1vdmUoZnByQXJncykpCisgICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUo
Y2FsbGVlU2F2ZVJlZ2lzdGVycykpCisgICAgeworICAgICAgICBSZWdpc3RlclNldCBzY3JhdGNo
ID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVk
ZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgc2Ny
YXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAgZm9y
IChSZWcgcmVnIDogbV9ncHJBcmdzKQorICAgICAgICAgICAgc2NyYXRjaC5jbGVhcihyZWcpOwor
ICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2NhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgICAg
ICBzY3JhdGNoLmNsZWFyKHJlZyk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IHNjcmF0Y2gpCisg
ICAgICAgICAgICBtX3NjcmF0Y2hHUFJzLmFwcGVuZChyZWcpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3NjcmF0Y2hHUFJzLnNpemUoKSA+PSAyKTsKKyAgICB9CisKKyAgICBHUFJSZWcgcHJv
bG9ndWVTY3JhdGNoKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX3NjcmF0Y2hHUFJzW2ldLmdw
cigpOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVu
YW1lIFN0YWNrRnVuYz4KKyAgICB2b2lkIG1hcnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0IFZlY3Rv
cjxSZWc+JiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25z
dCBSZWdGdW5jJiByZWdGdW5jLCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBy
ZWdGdW5jKHJlZ0FyZ3NbY291bnQrK10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgc3RhY2tGdW5jKHN0YWNrT2Zmc2V0KTsKKyAg
ICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWdGdW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAg
dm9pZCBtYXJzaGFsbEFyZ3VtZW50KFR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291bnQs
IHNpemVfdCYgZnBBcmd1bWVudENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdG
dW5jJiByZWdGdW5jLCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAg
Y2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFy
Z3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVuYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2Ug
VHlwZTo6RjY0OgorICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBm
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCByZWdGdW5jLCBzdGFja0Z1bmMpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGlj
IHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGxvYWRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Cisg
ICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90
IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRl
clNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQoc2lnbmF0dXJl
LmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZz
ZXQsCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0b3IoQjM6OkFpcjo6VG1wKHJlZyksIGkpOworICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgWyZdIChzaXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY3RvcihCMzo6QWlyOjpBcmc6OmFkZHIoQjM6OkFpcjo6VG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKSwgc3RhY2tPZmZzZXQpLCBpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50
RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0dXBDYWxsKEIzOjpBaXI6OkNv
ZGUmIGNvZGUsIFR5cGUgcmV0dXJuVHlwZSwgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCwgY29uc3QgVmVjdG9yPEIzOjpBaXI6OlRtcD4mIGFyZ3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAg
ICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09m
ZnNldCA9IGhlYWRlclNpemUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAg
Zm9yIChhdXRvIHRtcCA6IGFyZ3MpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQodG1w
LmlzR1AoKSA/IFR5cGU6Okk2NCA6IFR5cGU6OkY2NCwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgewor
ICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpyZWcocmVnKSk7
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09m
ZnNldCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpz
dGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKworICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisK
KyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVy
U2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKworICAgICAgICBzd2l0Y2ggKHJl
dHVyblR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJlZyhG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgcGF0Y2hw
b2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZ3ByQXJnczsKKyAgICBjb25zdCBWZWN0b3I8UmVnPiBt
X2ZwckFyZ3M7CisgICAgVmVjdG9yPFJlZz4gbV9zY3JhdGNoR1BSczsKKyAgICBjb25zdCBSZWdp
c3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9j
YWxsZXJTYXZlUmVnaXN0ZXJzOworfTsKKworaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQo
dW5zaWduZWQgY3VycmVudE9mZnNldCkKIHsKICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNp
emVvZihSZWdpc3Rlcik7CiB9CiAKIGNvbnN0ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0g
RXhlY1N0YXRlOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwotdHlw
ZWRlZiBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0ND
YWxsaW5nQ29udmVudGlvbjsKLQotdHlwZWRlZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb247CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uID0gQ2FsbGluZ0Nv
bnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2FsbGlu
Z0NvbnZlbnRpb24gPSBKU0NDYWxsaW5nQ29udmVudGlvbjsKIGNvbnN0IEpTQ0NhbGxpbmdDb252
ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVudGlvbigpOwogY29uc3QgV2FzbUNhbGxpbmdDb252ZW50
aW9uJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRp
b25BaXIgPSBDYWxsaW5nQ29udmVudGlvbkFpcjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0
PjsKK3VzaW5nIFdhc21DYWxsaW5nQ29udmVudGlvbkFpciA9IEpTQ0NhbGxpbmdDb252ZW50aW9u
QWlyOworY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9u
QWlyKCk7Citjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360495</attachid>
            <date>2019-01-29 13:45:29 -0800</date>
            <delta_ts>2019-01-29 14:05:24 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>164446</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgbGV0IHJ1
blNlYU1vbnN0ZXIgPSB0cnVlOwogbGV0IHJ1bkNvZGVMb2FkID0gdHJ1ZTsKIGxldCBydW5XYXNt
ID0gdHJ1ZTsKIAotaWYgKGZhbHNlKSB7CitpZiAodHJ1ZSkgewogICAgIHJ1bk9jdGFuZSA9IGZh
bHNlOwogICAgIHJ1bkFSRVMgPSBmYWxzZTsKICAgICBydW5XU0wgPSBmYWxzZTsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlmIChmYWxzZSkgewogICAgIHJ1bldvcmtlclRlc3RzID0gZmFsc2U7CiAg
ICAgcnVuU2VhTW9uc3RlciA9IGZhbHNlOwogICAgIHJ1bkNvZGVMb2FkID0gZmFsc2U7Ci0gICAg
cnVuV2FzbSA9IGZhbHNlOworICAgIHJ1bldhc20gPSB0cnVlOwogfQogCiBpZiAodHlwZW9mIHRl
c3RMaXN0ICE9PSAidW5kZWZpbmVkIikgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vSGFzaFNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS9IYXNoU2V0LmpzCShyZXZpc2lvbiAyNDA0NzcpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0pldFN0cmVhbTIvd2FzbS9IYXNoU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDkg
KzEwMDYsOSBAQCB2YXIgX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbIl9fX2Vycm5vCiB9KTsK
IHZhciBfbWFpbiA9IE1vZHVsZVsiX21haW4iXSA9IChmdW5jdGlvbigpIHsKICBsZXQgc3RhcnQg
PSBiZW5jaG1hcmtUaW1lKCk7Ci0gbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0uYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKLSByZXBvcnRSdW5UaW1lKGJlbmNobWFya1RpbWUoKSAtIHN0
YXJ0KTsKLSByZXR1cm4gcmV0OworIC8vbGV0IHJldCA9IE1vZHVsZVsiYXNtIl1bIl9tYWluIl0u
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyByZXBvcnRSdW5UaW1lKDEpOworIHJldHVybiAwOwog
fSk7CiB2YXIgc3RhY2tBbGxvYyA9IE1vZHVsZVsic3RhY2tBbGxvYyJdID0gKGZ1bmN0aW9uKCkg
ewogIHJldHVybiBNb2R1bGVbImFzbSJdWyJzdGFja0FsbG9jIl0uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9v
cHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93
YXNtL2djYy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw5ICs1MjA0LDkgQEAgdmFy
IF9sbHZtX2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBN
b2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGlt
ZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7Ci0gcmV0dXJu
IHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsKIH0pOwogdmFyIF9tYWxs
b2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICByZXR1cm4gTW9kdWxlWyJh
c20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCShyZXZpc2lvbiAyNDA0Nzcp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9xdWlja3NvcnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEwMjgsOSArMTAyOCw5IEBAIHZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUi
XSA9IChmdW5jdGlvbigKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0
aW9uKCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmVzdWx0ID0gTW9k
dWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRp
bWUoYmVuY2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXN1bHQ7CisgLy9sZXQgcmVz
dWx0ID0gTW9kdWxlWyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJl
cG9ydFJ1blRpbWUoMSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJf
bWFsbG9jIl0gPSAoZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2Mi
XS5hcHBseShudWxsLCBhcmd1bWVudHMpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20vcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20vcmljaGFyZHMuanMJKHJldmlzaW9uIDI0MDQ3NykKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MzAs
OSArOTMwLDkgQEAgdmFyIF9nZXRRcGt0Y291bnQgPSBNb2R1bGVbIl9nZXRRcGt0Y291bgogfSk7
CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0
ID0gYmVuY2htYXJrVGltZSgpOwotIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBz
dGFydCk7Ci0gcmV0dXJuIHJldDsKKyAvL2xldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJd
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgcmVwb3J0UnVuVGltZSgxKTsKKyByZXR1cm4gMDsK
IH0pOwogdmFyIF9tYWxsb2MgPSBNb2R1bGVbIl9tYWxsb2MiXSA9IChmdW5jdGlvbigpIHsKICBy
ZXR1cm4gTW9kdWxlWyJhc20iXVsiX21hbGxvYyJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vdHNmLmpzCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NDcsOSArNDc0Nyw5IEBAIHZhciBfbGx2bV9ic3dhcF9pMzIgPSBNb2R1bGVb
Il9sbHZtX2Jzd2EKIH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9u
KCkgewogIGxldCBzdGFydCA9IGJlbmNobWFya1RpbWUoKTsKLSBsZXQgcmV0ID0gTW9kdWxlWyJh
c20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwotIHJlcG9ydFJ1blRpbWUoYmVu
Y2htYXJrVGltZSgpIC0gc3RhcnQpOwotIHJldHVybiByZXQ7CisgLy9sZXQgcmV0ID0gTW9kdWxl
WyJhc20iXVsiX21haW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOworIHJlcG9ydFJ1blRpbWUo
MSk7CisgcmV0dXJuIDA7CiB9KTsKIHZhciBfbWFsbG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9tYWxsb2MiXS5hcHBseShudWxs
LCBhcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDggQEAKIAkJ
NTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250
cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFD
NEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyODQ3QURCMjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUy
ODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAw
ODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUx
QzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM0
MCw2ICszMzQyLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDA5LDYgKzY0MTMsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTcz
NiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5l
cmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdl
bmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJC
UVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxh
bi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGlu
ZXMuaCAqLywKQEAgLTg0OTksNiArODUwNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVB
RjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
OEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXph
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMx
QTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwNDUzLDYgKzEwNDYwLDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5p
ZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIx
RjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJj
ZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVu
aWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZh
bHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAg
ICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBj
aGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCBy
ZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lk
LgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRv
IGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBm
b3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDkgQEAgYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZQogICAgICAgICBicmVhazsKICAgICB9CiAK
KyAgICBpZiAoIXZhbHVlKSAvLyBPT1BTCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgcmV0
dXJuIGFyZy5jYW5SZXByZXNlbnQodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xv
YmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlk
ZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQog
ICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hB
cmdJbXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUo
KQogewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2
b2lkIENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8
UmVnPiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQw
NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVk
UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vh
a1JhbmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9p
ZCBlbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0
ZXhwciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDMwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVk
ZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNt
RnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bj
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25z
dHJhaW5lZFRtcCB7CisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25z
dHJhaW5lZFRtcCh0bXAsIHRtcC5pc1JlZygpID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygp
KSA6IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWlu
ZWRUbXAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAg
ICAgICAsIHJlcChyZXApCisgICAgeworICAgIH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZh
bHVlUmVwIHJlcDsKK307CisKK2NsYXNzIEFpcklSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBz
dHJ1Y3QgQ29udHJvbERhdGEgeworICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdp
biwgVHlwZSByZXR1cm5UeXBlLCBUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNC
bG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAg
ICAgICAgIDogYmxvY2tUeXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250
aW51YXRpb24pCisgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwg
cmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFS
QU0ob3JpZ2luKTsgLy8gT09QUworICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlID09IFR5cGU6OlZvaWQpOworICAgICAgICB9CisK
KyAgICAgICAgQ29udHJvbERhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTG9v
cDogICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9j
a1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0
LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOwor
ICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCpzcGVj
aWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUi
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
YmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBy
ZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3Qg
eyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9j
a1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAg
ICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0
SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7Cisg
ICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9P
UFM6IFdoYXQgaXMgdGhpcz8KKyAgICAgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxUbXAs
IDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRG
b3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJs
b2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUgYmxvY2tU
eXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBUeXBlIHJl
dHVyblR5cGU7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVG1wOworICAg
IHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhwcmVzc2lvbkxp
c3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBD
b250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlv
blBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBjb25z
dCBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb247CisKKyAgICB1c2luZyBFcnJvclR5cGUg
PSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVj
dGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4K
KyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFp
bChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFp
bHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZh
aWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2Rl
ZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAg
IGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDAp
CisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9j
ZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChCYXNpY0Jsb2NrKiwgVHlw
ZSwgdWludDY0X3QpOworCisgICAgLy8gTG9jYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQz
Ml90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBHbG9iYWxzCisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsK
KworICAgIC8vIE1lbW9yeQorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxv
YWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIEJhc2ljIG9w
ZXJhdG9ycworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUg
bm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisK
KyAgICAvLyBDb250cm9sIGZsb3cKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBz
aWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hh
YmxlKENvbnRyb2xEYXRhJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0
dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFu
Y2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250
cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHBy
ZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVu
ZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisKKyAgICAvLyBDYWxscworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOworCisgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlm
dChCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBz
aGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRl
Z2VyU3ViKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlw
ZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxv
YXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRC
aW5PcChCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUg
cmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIHZvaWQgZHVtcChjb25zdCBWZWN0
b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhw
cmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxBaXJJUkdl
bmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKKworcHJpdmF0ZToKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgdmFsaWRhdGVJbnN0KEluc3QmIGluc3QpCisgICAgeworICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgaWYgKCFpbnN0LmlzVmFs
aWRGb3JtKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oaW5zdCk7CisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQmFzaWNCbG9jayog
YmxvY2ssIEtpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgLy8gT09QUzogQWRkIG9yaWdpbgorICAgICAgICBhdXRvJiBpbnN0ID0gYmxvY2stPmFwcGVu
ZChraW5kLCBudWxscHRyLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsK
KyAgICAgICAgdmFsaWRhdGVJbnN0KGluc3QpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChLaW5kIGtpbmQsIEFyZ3VtZW50cyYm
Li4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywga2lu
ZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kRWZmZWN0ZnVs
KEIzOjpBaXI6Ok9wY29kZSBvcCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgS2luZCBraW5kID0gb3A7CisgICAgICAgIGtpbmQuZWZmZWN0cyA9IHRydWU7CisgICAg
ICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywga2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4o
YXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgVG1wIHRtcChCMzo6QmFuayBiYW5rKSB7IHJl
dHVybiBtX2NvZGUubmV3VG1wKGJhbmspOyB9CisgICAgVG1wIGdwcigpIHsgcmV0dXJuIHRtcChC
Mzo6R1ApOyB9CisgICAgVG1wIGZwcigpIHsgcmV0dXJuIHRtcChCMzo6RlApOyB9CisgICAgVG1w
IHRtcEZvclR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAg
ICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2Ug
VHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0dXJuIGZwcigpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQjM6OlBh
dGNocG9pbnRWYWx1ZSogYWRkUGF0Y2hwb2ludChCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fcHJvYy5hZGQ8QjM6OlBhdGNocG9pbnRWYWx1ZT4odHlwZSwgQjM6Ok9yaWdp
bigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lk
IGVtaXRQYXRjaHBvaW50KEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBB
cmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRC
bG9jaywgcGF0Y2gsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KHRoZUFyZ3MpLi4uKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRj
aHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNo
LCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hw
b2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIHNp
emVvZi4uLihBcmdzKT46OmZyb20odGhlQXJncy4uLikpOworICAgIH0KKworICAgIHZvaWQgZW1p
dFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSog
cGF0Y2gsIFRtcCByZXN1bHQpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Js
b2NrLCBwYXRjaCwgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+KCkpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDxzaXplX3QgaW5saW5lU2l6ZT4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50
KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAg
cmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKKyAgICB7
CisgICAgICAgIGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkKKyAgICAgICAgICAgIG1fcGF0Y2hw
b2ludFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUu
YWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOwor
CisgICAgICAgIEluc3QgaW5zdChQYXRjaCwgcGF0Y2gsIEFyZzo6c3BlY2lhbChtX3BhdGNocG9p
bnRTcGVjaWFsKSk7CisgICAgICAgIEluc3QgcmVzdWx0TW92OworICAgICAgICBpZiAocmVzdWx0
KSB7CisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSAhPSBCMzo6Vm9pZCk7CisgICAg
ICAgICAgICBzd2l0Y2ggKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LmtpbmQoKSkgeworICAgICAg
ICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3Qu
YXJncy5hcHBlbmQoVG1wKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKSk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0TW92ID0gSW5zdChyZXN1bHQuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3Vi
bGUsIG51bGxwdHIsIFRtcChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSksIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSA9PSBCMzo6Vm9pZCk7
CisgICAgICAgIAorICAgICAgICBmb3IgKENvbnN0cmFpbmVkVG1wJiB0bXAgOiBhcmdzKSB7Cisg
ICAgICAgICAgICAvLyBPT1BTOiBVZ2gsIHRoaXMgaXMgc3VwZXIgY3JhcHB5IHRvIGp1c3QgdXNl
IG51bGxwdHIgZm9yIEIzOjpWYWx1ZSogaGVyZS4KKyAgICAgICAgICAgIC8vIEkgdGhpbmsgdGhp
cyB3aWxsIGp1c3Qgd29yaywgYnV0IG91ciBhbHRlcm5hdGl2ZSBvcHRpb25zIGlzIHRvIGFic3Ry
YWN0CisgICAgICAgICAgICAvLyBvciByZWludmVudCBwYXJ0IG9mIFBhdGNocG9pbnRTcGVjaWFs
LgorICAgICAgICAgICAgQjM6OlZhbHVlKiBkdW1teVZhbHVlID0gbV9wcm9jLmFkZENvbnN0YW50
KEIzOjpPcmlnaW4oKSwgdG1wLnRtcC5pc0dQKCkgPyBCMzo6SW50NjQgOiBCMzo6RG91YmxlLCAw
KTsKKyAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQoZHVtbXlWYWx1ZSwgdG1wLnJlcCk7CisgICAg
ICAgICAgICBzd2l0Y2ggKHRtcC5yZXAua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEIzOjpW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQo
dG1wLnRtcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpW
YWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgLy8gT09QUzogSSB0aGluayB3ZSB3
YW50IHR5cGUgaGVyZSB0byBkaXN0aW5ndWlzaCBpMzIvaTYzIGFuZCBmMzIvZjY0CisgICAgICAg
ICAgICAgICAgcGF0Y2gtPmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodG1wLnJlcC5yZWcoKSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKGJhc2ljQmxvY2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6
IE1vdmVEb3VibGUsIHRtcC50bXAsIHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGlu
c3QuYXJncy5hcHBlbmQoVG1wKHRtcC5yZXAucmVnKCkpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OiB7CisgICAg
ICAgICAgICAgICAgLy8gT09QUzogSSB0aGluayB3ZSB3YW50IHR5cGUgaGVyZSB0byBkaXN0aW5n
dWlzaCBpMzIvaTYzIGFuZCBmMzIvZjY0CisgICAgICAgICAgICAgICAgYXV0byBhcmcgPSBBcmc6
OmNhbGxBcmcodG1wLnJlcC5vZmZzZXRGcm9tU1AoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5k
KGJhc2ljQmxvY2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIHRtcC50bXAs
IGFyZyk7CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChhcmcpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LmlzUmVnKCkp
CisgICAgICAgICAgICBwYXRjaC0+bGF0ZUNsb2JiZXJlZCgpLmNsZWFyKHBhdGNoLT5yZXN1bHRD
b25zdHJhaW50LnJlZygpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2gtPm51bUdQ
U2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoZ3By
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRjaC0+bnVtRlBTY3JhdGNoUmVnaXN0
ZXJzOyBpLS07KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChmcHIoKSk7CisKKyAgICAg
ICAgdmFsaWRhdGVJbnN0KGluc3QpOworICAgICAgICBiYXNpY0Jsb2NrLT5hcHBlbmQoV1RGTW92
ZShpbnN0KSk7CisgICAgICAgIGlmIChyZXN1bHRNb3YpIHsKKyAgICAgICAgICAgIHZhbGlkYXRl
SW5zdChyZXN1bHRNb3YpOworICAgICAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdURk1vdmUo
cmVzdWx0TW92KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QnJhbmNoLCB0eXBlbmFtZSBHZW5lcmF0b3I+CisgICAgdm9pZCBlbWl0Q2hlY2soY29uc3QgQnJh
bmNoJiBlbWl0QnJhbmNoLCBjb25zdCBHZW5lcmF0b3ImIGdlbmVyYXRvcikKKyAgICB7CisgICAg
ICAgIC8vIFdlIGZhaWwgYWxvbmcgdGhlICJ0cnV0aHkiIGVkZ2Ugb2YgJ2JyYW5jaCcKKworICAg
ICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAg
ICAgQmFzaWNCbG9jayogZmFpbGVkID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIAorICAg
ICAgICBlbWl0QnJhbmNoKCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3Jz
KGZhaWxlZCwgY29udGludWF0aW9uKTsKKworICAgICAgICBhdXRvKiBmYWlsZWRQYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIGZhaWxlZFBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihnZW5lcmF0b3IpOworICAgICAgICBlbWl0UGF0Y2hwb2ludChmYWlsZWQsIGZh
aWxlZFBhdGNocG9pbnQsIFRtcCgpKTsKKyAgICAgICAgYXBwZW5kKGZhaWxlZCwgT29wcyk7CisK
KyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0Q0Nh
bGwoRnVuYyBmdW5jLCBUbXAgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBl
bWl0Q0NhbGwobV9jdXJyZW50QmxvY2ssIGZ1bmMsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKyAgICB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1l
IC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0Q0NhbGwoQmFzaWNCbG9jayogYmxvY2ssIEZ1bmMgZnVu
YywgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgQjM6OlR5cGUg
cmVzdWx0VHlwZSA9IEIzOjpWb2lkOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAg
cmVzdWx0VHlwZSA9IHJlc3VsdC5pc0dQKCkgPyBCMzo6SW50NjQgOiBCMzo6RG91YmxlOworCisg
ICAgICAgIGF1dG8gbWFrZUR1bW15VmFsdWUgPSBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAg
IGlmICh0bXAuaXNHUCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkQ29uc3Rh
bnQoQjM6Ok9yaWdpbigpLCBCMzo6SW50NjQsIDApOworICAgICAgICAgICAgcmV0dXJuIG1fcHJv
Yy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpEb3VibGUsIDApOworICAgICAgICB9Owor
CisgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlGdW5jID0gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpP
cmlnaW4oKSwgQjM6OkludDY0LCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihmdW5jKSk7CisgICAg
ICAgIEIzOjpWYWx1ZSogb3JpZ2luID0gbV9wcm9jLmFkZDxCMzo6Q0NhbGxWYWx1ZT4ocmVzdWx0
VHlwZSwgQjM6Ok9yaWdpbigpLCBCMzo6RWZmZWN0czo6bm9uZSgpLCBkdW1teUZ1bmMsIG1ha2VE
dW1teVZhbHVlKHRoZUFyZ3MpLi4uKTsKKworICAgICAgICBJbnN0IGluc3QoQ0NhbGwsIG9yaWdp
bik7CisKKyAgICAgICAgVG1wIGNhbGxlZSA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjppbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLCBCM0NDYWxsUHRyVGFnKSks
IGNhbGxlZSk7CisgICAgICAgIGluc3QuYXJncy5hcHBlbmQoY2FsbGVlKTsKKworICAgICAgICBp
ZiAocmVzdWx0KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChyZXN1bHQpOworCisgICAg
ICAgIGZvciAoVG1wIHRtcCA6IFZlY3RvcjxUbXAsIHNpemVvZi4uLihBcmdzKT46OmZyb20odGhl
QXJncy4uLikpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7CisKKyAgICAgICAg
YmxvY2stPmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQjM6OkFp
cjo6T3Bjb2RlIG1vdmVPcEZvclZhbHVlVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICByZXR1
cm4gTW92ZTMyOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVybiBN
b3ZlOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlRmxv
YXQ7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0dXJuIE1vdmVEb3Vi
bGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRpb24o
Q0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisKKyAgICB2b2lkIGVtaXRUaWVyVXBDaGVj
ayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbik7CisKKyAgICBFeHByZXNzaW9u
VHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBFeHByZXNzaW9uVHlwZSBl
bWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9m
ZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUg
cG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisKKyAgICB2
b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlJiBkc3QsIGNvbnN0IEV4cHJlc3Npb25UeXBl
JiBzb3VyY2UpOworICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lv
bkxpc3QmIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiBzdGFjayk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KKyAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRpdihi
b29sIGlzU2lnbmVkRGl2LCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KKyAgICB2b2lkIGVtaXRNb2RP
ckRpdihib29sIGlzRGl2LCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVS
TiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOworCisg
ICAgdm9pZCByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiwgVG1wKTsKKyAg
ICBlbnVtIGNsYXNzIFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHsgTm8sIFllcyB9OworICAgIHZv
aWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQs
IGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgVG1wIGluc3RhbmNlLCBCYXNpY0Jsb2NrKik7CisK
KyAgICBCMzo6T3JpZ2luIG9yaWdpbigpOyAvLyBPT1BTOiBXZSBuZWVkIHRvIG1ha2UgYW4gQWly
OjpPcmlnaW4gc2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgZnJvbSBCMyBjb2RlLgorCisgICAg
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsKKyAg
ICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIGNvbnN0IE1lbW9yeU1vZGUg
bV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKKyAgICBjb25zdCBDb21waWxh
dGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGUgeyBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUgfTsK
KyAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXggeyBVSU5UX01BWCB9OworICAgIGNv
bnN0IFRpZXJVcENvdW50KiBtX3RpZXJVcCB7IG51bGxwdHIgfTsKKworICAgIEIzOjpQcm9jZWR1
cmUmIG1fcHJvYzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFzaWNCbG9jayogbV9jdXJyZW50
QmxvY2sgeyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sgeyBudWxscHRy
IH07CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxUbXAsIFR5cGU+PiBtX2xvY2FsczsKKyAgICBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8v
IExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNz
IGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisgICAgVG1wIG1faW5z
dGFuY2VWYWx1ZTsgLy8gQWx3YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRo
ZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgorICAgIGJvb2wgbV91
c2VzSW5zdGFuY2VWYWx1ZSB7IGZhbHNlIH07CisgICAgVG1wIGluc3RhbmNlVmFsdWUoKQorICAg
IHsKKyAgICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7CisgICAgICAgIHJldHVybiBt
X2luc3RhbmNlVmFsdWU7CisgICAgfQorCisgICAgdWludDMyX3QgbV9tYXhOdW1KU0NhbGxBcmd1
bWVudHMgeyAwIH07CisKKyAgICBCMzo6UGF0Y2hwb2ludFNwZWNpYWwqIG1fcGF0Y2hwb2ludFNw
ZWNpYWwgeyBudWxscHRyIH07Cit9OworCitjb25zdCBUbXAgQWlySVJHZW5lcmF0b3I6OmVtcHR5
RXhwcmVzc2lvbiA9IFRtcCB7IH07CisKKy8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJs
eSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQg
MzItYml0IG9mZnNldHMgaW4gQjMuCitpbnQzMl90IEFpcklSR2VuZXJhdG9yOjpmaXh1cFBvaW50
ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAg
ICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgIFRtcCBw
cmV2aW91c1B0ciA9IHB0cjsKKyAgICAgICAgcHRyID0gZ3ByKCk7CisgICAgICAgIFRtcCBjb25z
dGFudCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwg
Y29uc3RhbnQpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNvbnN0YW50LCBwcmV2aW91c1B0ciwg
cHRyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBvZmZzZXQ7Cit9CisK
K3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2ljQmxv
Y2sqIGJsb2NrLCBUbXAgaW5zdGFuY2UpCit7CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMo
KSkgeworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7
CisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRz
TWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdh
c21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAg
ICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBp
bnN0YW5jZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQmVjYXVz
ZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBh
bmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxs
ZXIgc2lkZS4KKyAgICAvLyBUaGlzIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcg
dG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBCMzo6RWZmZWN0cyBl
ZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRl
KFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOworICAgIEdQUlJlZyB3YXNt
Q29udGV4dEluc3RhbmNlR1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgeworICAgICAgICBqaXQubW92ZShwYXJhbVsw
XS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisgICAgfSk7CisgICAgZW1pdFBhdGNo
cG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7Cit9CisKK0FpcklSR2Vu
ZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6
OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVt
b3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKKyAgICA6IG1faW5m
byhpbmZvKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShjb21w
aWxhdGlvbk1vZGUpCisgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKKyAgICAs
IG1fdGllclVwKHRpZXJVcCkKKyAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCisgICAgLCBtX2NvZGUo
bV9wcm9jLmNvZGUoKSkKKyAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMpCit7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICBtX3Jvb3RCbG9jayA9IG1fY3VycmVudEJsb2NrOworCisgICAgLy8gRklYTUUgd2Ug
ZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGluIHJlZ2lzdGVycyBoZXJlIGlmIHRoZXJlJ3Mgbm8gbWVt
b3J5LiBJdCBtYWtlcyB3YXNtIC0+IHdhc20gdGh1bmtzIHNpbXBsZXIgZm9yIG5vdy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjYyMworICAgIGNvbnN0IFBpbm5l
ZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisK
KyAgICBtX21lbW9yeUJhc2VHUFIgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAg
IG1fY29kZS5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOworCisgICAgbV93YXNtQ29udGV4
dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKyAg
ICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVy
KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisKKyAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2Rl
OjpTaWduYWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNb
MF0uc2l6ZU9mZnNldCk7CisgICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7CisgICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6
ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVycykKKyAgICAg
ICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CisgICAgfQor
CisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24o
KS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKKworICAgIGlmIChp
bmZvLm1lbW9yeSkgeworICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgICAgICBjYXNlIE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAgICAgICAgLy8gTW9zdCBtZW1vcnkgYWNj
ZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8gYW4gZXhwbGljaXQKKyAgICAgICAgICAg
IC8vIGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkgY2FuIHJlbHkgb24gZmF1bHQgaGFuZGxp
bmcgdG8gZGV0ZWN0CisgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBGYXVs
dFNpZ25hbEhhbmRsZXIgbm9uZXRoZWxlc3MgbmVlZHMgdGhlCisgICAgICAgICAgICAvLyB0aHVu
ayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRvIHRoYXQgdGh1bmsuCisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvZGUuc2V0TnVtRW50cnlw
b2ludHMoMSk7CisKKyAgICBHUFJSZWcgY29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFz
dFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpIDog
bV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworCisgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2Vu
ZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJv
bG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6
Q29kZSYgY29kZSkgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwor
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisgICAgICAgICAgICBhdXRvIG1vdmVM
b2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjb21w
aWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IENoZWNrZWQ8aW50MzJfdD4gd2FzbUZyYW1lU2l6
ZSA9IG1fY29kZS5mcmFtZVNpemUoKTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1pbmlt
dW1QYXJlbnRDaGVja1NpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCAxMDI0KTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhRnJhbWVT
aXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3Rk
OjptYXg8dWludDMyX3Q+KAorICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVs
aWRlIHN0YWNrIGNoZWNrcyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIHRlcm1pbmFsIG5vZGVzIGlu
IHRoZSBjYWxsCisgICAgICAgICAgICAgICAgLy8gdHJlZSwgKGUuZyB0aGV5IGRvbid0IG1ha2Ug
YW55IGNhbGxzKSBhbmQgaGF2ZSBhIHNtYWxsIGVub3VnaCBmcmFtZSBzaXplLiBUaGlzIHdvcmtz
IGJ5CisgICAgICAgICAgICAgICAgLy8gaGF2aW5nIGFueSBzdWNoIHRlcm1pbmFsIG5vZGUgaGF2
ZSBpdHMgcGFyZW50IGNhbGxlciBpbmNsdWRlIHNvbWUgZXh0cmEgc2l6ZSBpbiBpdHMKKyAgICAg
ICAgICAgICAgICAvLyBvd24gY2hlY2sgZm9yIGl0LiBUaGUgZ29hbCBoZXJlIGlzIHR3b2ZvbGQ6
CisgICAgICAgICAgICAgICAgLy8gMS4gRW1pdCBsZXNzIGNvZGUuCisgICAgICAgICAgICAgICAg
Ly8gMi4gVHJ5IHRvIHNwZWVkIHRoaW5ncyB1cCBieSBza2lwcGluZyBzdGFjayBjaGVja3MuCisg
ICAgICAgICAgICAgICAgbWluaW11bVBhcmVudENoZWNrU2l6ZSwKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3MgaW4gdGhlIFdhc20gLT4gRW1i
ZWRkZXIgY2FsbCBJQyBzdHViLiBTaW5jZSB0aGVzZSB3aWxsCisgICAgICAgICAgICAgICAgLy8g
c3BpbGwgYWxsIGFyZ3VtZW50cyB0byB0aGUgc3RhY2ssIHdlIGVuc3VyZSB0aGF0IGEgc3RhY2sg
Y2hlY2sgaGVyZSBjb3ZlcnMgdGhlCisgICAgICAgICAgICAgICAgLy8gc3RhY2sgdGhhdCBzdWNo
IGEgc3R1YiB3b3VsZCB1c2UuCisgICAgICAgICAgICAgICAgKENoZWNrZWQ8dWludDMyX3Q+KG1f
bWF4TnVtSlNDYWxsQXJndW1lbnRzKSAqIHNpemVvZihSZWdpc3RlcikgKyBqc2NDYWxsaW5nQ29u
dmVudGlvbigpLmhlYWRlclNpemVJbkJ5dGVzKCkpLnVuc2FmZUdldCgpCisgICAgICAgICAgICAp
KTsKKyAgICAgICAgICAgIGNvbnN0IGludDMyX3QgY2hlY2tTaXplID0gbV9tYWtlc0NhbGxzID8g
KHdhc21GcmFtZVNpemUgKyBleHRyYUZyYW1lU2l6ZSkudW5zYWZlR2V0KCkgOiB3YXNtRnJhbWVT
aXplLnVuc2FmZUdldCgpOworICAgICAgICAgICAgYm9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNp
emUoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxz
IHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVudENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJm
bG93Q2hlY2s7CisKKyAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRv
IG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4KKyAgICAg
ICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRoZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFs
cmVhZHkgZG9uZSB0aGUgY2hlY2suCisgICAgICAgICAgICBpZiAobmVlZHNPdmVyZmxvd0NoZWNr
KSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworCisgICAgICAgICAgICAgICAg
aWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRX
YXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5jZSk7CisKKyAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShu
ZWVkVW5kZXJmbG93Q2hlY2spKQorICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQo
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBzY3JhdGNoLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkp
KTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3Zl
cmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRv
bigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0lu
c3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAgICAg
Ly8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBz
dGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgorICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdh
c21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAg
ICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzYWlkIHdlJ2QgcmV0dXJu
IGEgcG9pbnRlci4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBiZWNhdXNlIGl0IGlzbid0IHVz
ZWQsIGJ1dCB0aGUgcGF0Y2hwb2ludCBjb25zZXJ2YXRpdmVseSBzYWlkIGl0IGhhZCBlZmZlY3Rz
IChwb3RlbnRpYWwgc3RhY2sgY2hlY2spIHdoaWNoIHByZXZlbnQgaXQgZnJvbSBnZXR0aW5nIHJl
bW92ZWQuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIG1fY29kZS5z
ZXRQcm9sb2d1ZUZvckVudHJ5cG9pbnQoMCwgV1RGTW92ZShwcm9sb2d1ZUdlbmVyYXRvcikpOwor
CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICBtX2luc3RhbmNlVmFs
dWUgPSBncHIoKTsKKyAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRo
aXMgaWYgd2UgdXNlIGluc3RhbmNlIHZhbHVlLgorICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNv
bnRleHRJbnN0YW5jZSksIG1faW5zdGFuY2VWYWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1f
aW5zdGFuY2VWYWx1ZSA9IFRtcChjb250ZXh0SW5zdGFuY2UpOworCisgICAgQVNTRVJUKCFtX2xv
Y2Fscy5zaXplKCkpOworICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAg
Y2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IHsgZ3ByKCksIHR5cGUg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAg
Y2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IHsgZnByKCksIHR5cGUg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdhc21D
YWxsaW5nQ29udmVudGlvbkFpcigpLmxvYWRBcmd1bWVudHMoc2lnbmF0dXJlLCBbJl0gKGNvbnN0
IEFyZyYgYXJnLCB1bnNpZ25lZCBpKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3Vt
ZW50KGkpKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1v
dmUzMiwgYXJnLCBtX2xvY2Fsc1tpXS5maXJzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgYXJnLCBtX2xvY2Fs
c1tpXS5maXJzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6
CisgICAgICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlRG91YmxlLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgZW1pdFRpZXJVcENoZWNrKFRp
ZXJVcENvdW50OjpmdW5jdGlvbkVudHJ5RGVjcmVtZW50KCksIEIzOjpPcmlnaW4oKSk7Cit9CisK
K3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJ
bmZvcm1hdGlvbiYgbWVtb3J5LCBUbXAgaW5zdGFuY2UsIEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKGJsb2NrLCBpbnN0YW5jZSk7CisKKyAgICBp
ZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgPT0gUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Olll
cykgeworICAgICAgICAvLyBUaGUgSW5zdGFuY2UgY2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0
IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9uaWNhbCBsb2NhdGlvbiBpcy4KKyAgICAgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SW5zdGFuY2UqPihudWxscHRy
KS0+Y2FjaGVkU3RhY2tMaW1pdCgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIiIpOworCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRP
ZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
U3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBUbXAgdGVtcCA9IGdwcigpOwor
ICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIElu
c3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSksIHRlbXApOworICAg
ICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YWRkcih0ZW1wKSwgdGVtcCk7CisgICAgICAg
IGFwcGVuZChibG9jaywgTW92ZSwgdGVtcCwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgfQorCisgICAgaWYgKCEh
bWVtb3J5KSB7CisgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9
ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVy
czsKKyAgICAgICAgY2xvYmJlcnMuc2V0KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsK
KyAgICAgICAgZm9yIChhdXRvIGluZm8gOiBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzKQorICAg
ICAgICAgICAgY2xvYmJlcnMuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsKKworICAgICAgICBhdXRv
KiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIEIzOjpFZmZl
Y3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBlZmZlY3RzLndyaXRl
c1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0
b3AoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlcnMpOworCisgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVt
b3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBjb25zdCBh
dXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVn
c1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQg
YXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0
byAwLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFt
c1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJl
Z3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9y
eSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
c2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9KTsKKwor
ICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKKyAgICB9Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaHJvd0V4Y2VwdGlvbihD
Q2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9uVHlwZSB0eXBlKQoreworICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgYXV0byBqdW1wVG9FeGNlcHRpb25TdHViID0gaml0
Lmp1bXAoKTsKKworICAgIGppdC5hZGRMaW5rVGFzayhbanVtcFRvRXhjZXB0aW9uU3R1Yl0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4
Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNp
bmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpKTsKKyAgICB9KTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0
eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENoZWNrZWQ8dWlu
dDMyX3QsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IGNvdW50OworICAgIHRv
dGFsQnl0ZXNDaGVja2VkICs9IG1fbG9jYWxzLnNpemUoKTsKKyAgICB1aW50MzJfdCB0b3RhbEJ5
dGVzOworICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCh0b3RhbEJ5dGVzQ2hlY2tlZC5zYWZlR2V0
KHRvdGFsQnl0ZXMpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHx8ICFtX2xvY2Fscy50
cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9y
ICIsIHRvdGFsQnl0ZXMsICIgbG9jYWxzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBU
eXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OiB7CisgICAgICAgICAgICBUbXAgbG9j
YWwgPSBncHIoKTsKKyAgICAgICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFwcGVuZCh7IGxvY2Fs
LCB0eXBlIH0pOworICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCBsb2NhbCwgbG9jYWwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAg
ICAgIGNhc2UgVHlwZTo6RjY0OiB7CisgICAgICAgICAgICBUbXAgbG9jYWwgPSBmcHIoKTsKKyAg
ICAgICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFwcGVuZCh7IGxvY2FsLCB0eXBlIH0pOworICAg
ICAgICAgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICAgICAgICAgIC8vIElFRUUgNzU0ICIwIiBp
cyBqdXN0IGludDMyLzY0IHplcm8uCisgICAgICAgICAgICBhcHBlbmQoWG9yNjQsIHRlbXAsIHRl
bXApOworICAgICAgICAgICAgYXBwZW5kKHR5cGUgPT0gVHlwZTo6RjMyID8gTW92ZTMyVG9GbG9h
dCA6IE1vdmU2NFRvRG91YmxlLCB0ZW1wLCBsb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gT09QUzogSXMgdGhpcyBjb3JyZWN0PworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENvbnN0YW50KFR5
cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpIC0+IEV4cHJlc3Npb25UeXBlCit7CisgICAgcmV0dXJu
IGFkZENvbnN0YW50KG1fY3VycmVudEJsb2NrLCB0eXBlLCB2YWx1ZSk7Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZENvbnN0YW50KEJhc2ljQmxvY2sqIGJsb2NrLCBUeXBlIHR5cGUsIHVp
bnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlwZQoreworICAgIFRtcCByZXN1bHQ7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6
CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFy
Zzo6YmlnSW1tKHZhbHVlKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBl
OjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZnByKCk7Cisg
ICAgICAgIFRtcCB0bXAgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCBBcmc6
OmJpZ0ltbSh2YWx1ZSksIHRtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgdHlwZSA9PSBUeXBl
OjpGMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9Eb3VibGUsIHRtcCwgcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2Fscy5zaXplKCkg
PT0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7IC8vIFdlIGhhbmRsZSBhcmd1bWVudHMgaW4g
dGhlIHByb2xvZ3VlCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdLmZpcnN0KTsKKyAgICByZXN1
bHQgPSBtX2xvY2Fsc1tpbmRleF0uZmlyc3QuaXNHUCgpID8gZ3ByKCkgOiBmcHIoKTsKKyAgICBh
cHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKG1fbG9jYWxzW2luZGV4XS5zZWNvbmQpLCBtX2xvY2Fs
c1tpbmRleF0uZmlyc3QsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogdW5yZWFjaGFibGUgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsK
KyAgICB1bnJlYWNoYWJsZS0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVt
aXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6OlVucmVhY2hhYmxlKTsKKyAgICB9
KTsKKyAgICB1bnJlYWNoYWJsZS0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7CisgICAgZW1pdFBh
dGNocG9pbnQodW5yZWFjaGFibGUsIFRtcCgpKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgaW50MzJfdCAoKmdy
b3dNZW1vcnkpKHZvaWQqLCBJbnN0YW5jZSosIGludDMyX3QpID0gW10gKHZvaWQqIGNhbGxGcmFt
ZSwgSW5zdGFuY2UqIGluc3RhbmNlLCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKKyAgICAg
ICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICAgICAgaWYg
KGRlbHRhIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBhdXRvIGdyb3du
ID0gaW5zdGFuY2UtPm1lbW9yeSgpLT5ncm93KFBhZ2VDb3VudChkZWx0YSkpOworICAgICAgICBp
ZiAoIWdyb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdyb3duLmVycm9yKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRhOgorICAgICAg
ICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6CisgICAg
ICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OldvdWxkRXhjZWVkTWF4aW11bToK
KyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBn
cm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOworICAgIH07CisKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBlbWl0Q0NhbGwoZ3Jvd01lbW9yeSwgcmVzdWx0LCBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpLCBpbnN0YW5jZVZhbHVlKCksIGRlbHRhKTsKKyAgICByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6Tm8sIG1faW5mby5tZW1vcnks
IGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVj
bHR5cGUoc3RhdGljX2Nhc3Q8TWVtb3J5Kj4obnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1
aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKKworICAgIHJlc3VsdCA9
IGdwcigpOworCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChB
cmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCks
IEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVl
KCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHRlbXAxKTsKKyAgICBj
b25zdGV4cHIgdWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OworICAgIHN0YXRpY19hc3NlcnQoUGFn
ZUNvdW50OjpwYWdlU2l6ZSA9PSAxdWxsIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBm
b3IgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJn
OjppbW0oMTYpLCByZXN1bHQpOworICAgIGFkZFNoaWZ0KFVyc2hpZnQ2NCwgdGVtcDEsIHJlc3Vs
dCwgcmVzdWx0KTsKKyAgICBhcHBlbmQoTW92ZTMyLCByZXN1bHQsIHJlc3VsdCk7CisKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NF
UlQobV9sb2NhbHNbaW5kZXhdLmZpcnN0KTsKKyAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBl
KG1fbG9jYWxzW2luZGV4XS5zZWNvbmQpLCB2YWx1ZSwgbV9sb2NhbHNbaW5kZXhdLmZpcnN0KTsK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBUeXBlIHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKworICAgIHJlc3Vs
dCA9IHRtcEZvclR5cGUodHlwZSk7CisKKyAgICBUbXAgdGVtcCA9IGdwcigpOworCisgICAgUkVM
RUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFs
cygpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VW
YWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpLCB0ZW1wKTsKKworICAgIGludDMy
X3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsK
KyAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHRv
QjNUeXBlKHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSks
IEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpLCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBU
bXAgdGVtcDIgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNl
dCksIHRlbXAyKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwgdGVtcCwgdGVtcCk7Cisg
ICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6YWRkcih0ZW1wKSwg
cmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisKKyAgICBSRUxFQVNFX0FTU0VS
VChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCksIEIzOjpX
aWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIElu
c3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSksIHRlbXApOworCisgICAgVHlwZSB0eXBlID0gbV9p
bmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisKKyAgICBpbnQzMl90IG9mZnNldCA9IHNhZmVDYXN0
PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgaWYgKEFyZzo6aXNWYWxp
ZEFkZHJGb3JtKG9mZnNldCwgQjM6OndpZHRoRm9yVHlwZSh0b0IzVHlwZSh0eXBlKSkpKQorICAg
ICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5cGUpLCB2YWx1ZSwgQXJnOjphZGRyKHRl
bXAsIG9mZnNldCkpOworICAgIGVsc2UgeworICAgICAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAg
ICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIHRlbXAyKTsKKyAgICAgICAg
YXBwZW5kKEFkZDY0LCB0ZW1wMiwgdGVtcCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChtb3ZlT3BG
b3JWYWx1ZVR5cGUodHlwZSksIHZhbHVlLCBBcmc6OmFkZHIodGVtcCkpOworICAgIH0KKworICAg
IHJldHVybiB7IH07Cit9CisKK2lubGluZSBBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUg
QWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQorewor
ICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOworCisgICAgVG1wIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChNb3ZlMzIsIHBvaW50ZXIsIHJlc3VsdCk7CisKKyAgICBzd2l0Y2ggKG1fbW9k
ZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsKKyAgICAgICAgLy8g
V2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3QgdGhlcmVmb3Jl
IGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50IG1lbW9yeSBz
aXplLgorICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAgQVNTRVJUKHNp
emVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAgICAgIFRtcCB0ZW1wID0gZ3By
KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShzdGF0aWNfY2FzdDx1aW50NjRf
dD4oc2l6ZU9mT3BlcmF0aW9uKSArIG9mZnNldCAtIDEpLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5k
KEFkZDY0LCByZXN1bHQsIHRlbXApOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAg
ICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCksIHRlbXAsIFRtcChtX21lbW9yeVNpemVHUFIpKTsKKyAgICAgICAgfSwgWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
KyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6
Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIC8vIFdl
J3ZlIHZpcnR1YWxseSBtYXBwZWQgNEdpQityZWR6b25lIGZvciB0aGlzIG1lbW9yeS4gT25seSB0
aGUgdXNlci1hbGxvY2F0ZWQgcGFnZXMgYXJlIGFkZHJlc3NhYmxlLCBjb250aWd1b3VzbHkgaW4g
cmFuZ2UgWzAsIGN1cnJlbnRdLAorICAgICAgICAvLyBhbmQgZXZlcnl0aGluZyBhYm92ZSBpcyBt
YXBwZWQgUFJPVF9OT05FLiBXZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGV4cGxpY2l0IGJv
dW5kcyBjaGVjayBpbiB0aGUgNEdpQiByYW5nZSBiZWNhdXNlIFdlYkFzc2VtYmx5IHJlZ2lzdGVy
CisgICAgICAgIC8vIG1lbW9yeSBhY2Nlc3NlcyBhcmUgMzItYml0LiBIb3dldmVyIFdlYkFzc2Vt
Ymx5IHJlZ2lzdGVyICsgb2Zmc2V0IGFjY2Vzc2VzIHBlcmZvcm0gdGhlIGFkZGl0aW9uIGluIDY0
LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nlc3MgYWJvdmUKKyAgICAgICAgLy8gdGhlIDMyLWJp
dCBsaW1pdCAodGhlIG9mZnNldCBpcyB1bnNpZ25lZCAzMi1iaXQpLiBUaGUgcmVkem9uZSB3aWxs
IGNhdGNoIG1vc3Qgc21hbGwgb2Zmc2V0cywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91bmRzIGNo
ZWNrIGFueQorICAgICAgICAvLyByZWdpc3RlciArIGxhcmdlIG9mZnNldCBhY2Nlc3MuIFdlIGRv
bid0IHRoaW5rIHRoaXMgd2lsbCBiZSBnZW5lcmF0ZWQgZnJlcXVlbnRseS4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgdGhhdCByZWdpc3RlciArIGxhcmdlIG9mZnNldCBk
b2Vzbid0IGV4Y2VlZCA0R2lCK3JlZHpvbmUgc2luY2UgdGhhdCdzIHRlY2huaWNhbGx5IHRoZSBs
aW1pdCB3ZSBuZWVkIHRvIGF2b2lkIG92ZXJmbG93aW5nIHRoZQorICAgICAgICAvLyBQUk9UX05P
TkUgcmVnaW9uLCBidXQgaXQncyBiZXR0ZXIgaWYgd2UgdXNlIGEgc21hbGxlciBpbW1lZGlhdGUg
YmVjYXVzZSBpdCBjYW4gY29kZWdlbnMgYmV0dGVyLiBXZSBrbm93IHRoYXQgYW55dGhpbmcgZXF1
YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICAvLyB0aGFuIHRoZSBkZWNsYXJlZCAnbWF4aW11bScg
d2lsbCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVy
ZSB3YXMgbm8gZGVjbGFyZWQgJ21heGltdW0nIHRoZW4gd2Ugc3RpbGwga25vdyB0aGF0CisgICAg
ICAgIC8vIGFueSBhY2Nlc3MgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDRHaUIgd2lsbCB0cmFw
LCBubyBuZWVkIHRvIGFkZCB0aGUgcmVkem9uZS4KKyAgICAgICAgaWYgKG9mZnNldCA+PSBNZW1v
cnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKSkgeworICAgICAgICAgICAgdWludDY0X3QgbWF4
aW11bSA9IG1faW5mby5tZW1vcnkubWF4aW11bSgpID8gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCku
Ynl0ZXMoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAg
ICAgIFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpemVPZk9wZXJhdGlvbikgKyBvZmZzZXQgLSAxKSwg
dGVtcCk7CisgICAgICAgICAgICBhcHBlbmQoQWRkNjQsIHJlc3VsdCwgdGVtcCk7CisgICAgICAg
ICAgICBUbXAgc2l6ZU1heCA9IGdwcigpOworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YmlnSW1tKG1heGltdW0pLCBzaXplTWF4KTsKKworICAgICAgICAgICAgZW1pdENoZWNrKFsmXSB7
CisgICAgICAgICAgICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCksIHRlbXAsIHNpemVNYXgpOworICAgICAgICAgICAgfSwgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgYXBwZW5kKEFkZDY0LCBU
bXAobV9tZW1vcnlCYXNlR1BSKSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitp
bmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgb3ApCit7CisgICAgc3dpdGNo
IChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOgorICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDhVOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgorICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkkzMkxvYWQxNlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgor
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQxNlU6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkMzJVOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlw
ZTo6RjY0TG9hZDoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2Fk
T3AoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNl
dCkKK3sKKyAgICB1aW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50
ZXIsIHVvZmZzZXQpOworCisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworICAgIFRt
cCByZXN1bHQ7CisKKyAgICBhdXRvIGxvYWRBcmcgPSBbJl0gKCkgeworICAgICAgICBpZiAoQXJn
Ojppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JCeXRlcyhzaXplT2ZMb2FkT3Ao
b3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9mZnNldCk7Cisg
ICAgICAgIGltbVRtcCA9IGdwcigpOworICAgICAgICBuZXdQdHIgPSBncHIoKTsKKyAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgIGFwcGVu
ZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQdHIpOworICAgICAgICByZXR1cm4gQXJnOjph
ZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIExvYWRP
cFR5cGU6OkkzMkxvYWQ4UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBw
ZW5kRWZmZWN0ZnVsKExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4Uzog
eworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQ4
U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2ln
bkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOCwgbG9hZEFyZygpLCByZXN1bHQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VTog
eworICAgICAgICAvLyBPT1BTOiBEbyBJIG5lZWQgYW5vdGhlciB6ZXh0IGhlcmU/CisgICAgICAg
IHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTG9hZDgsIGxvYWRBcmco
KSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkMTZTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmRF
ZmZlY3RmdWwoTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6IHsK
KyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTZT
aWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWdu
RXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTYsIGxvYWRBcmcoKSwgcmVzdWx0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZV
OiB7CisgICAgICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90aGVyIHpleHQgaGVyZT8KKyAgICAg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTYsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVTogeworICAgICAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmUzMiwgbG9hZEFy
ZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQzMlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVu
ZEVmZmVjdGZ1bChNb3ZlMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNp
Z25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDogeworICAgICAgICByZXN1bHQgPSBncHIo
KTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmUsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7Cisg
ICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTW92ZUZsb2F0
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6RjY0TG9hZDogeworICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAg
YXBwZW5kRWZmZWN0ZnVsKE1vdmVEb3VibGUsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgQVNTRVJUKHBvaW50ZXIuaXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1P
dmVyZmxvd3M8dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0
J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAg
ICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIGF1
dG8qIHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIHBhdGNoLT5zZXRH
ZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSk7CisKKyAgICAgICAgLy8gV2Ug
d29uJ3QgcmVhY2ggaGVyZSwgc28gd2UganVzdCBwaWNrIGEgcmFuZG9tIHJlZy4KKyAgICAgICAg
c3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAgICAgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0
TG9hZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VToKKyAgICAgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQzMlU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKKyAgICAgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQx
NlU6CisgICAgICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6
RjY0TG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgIH0gZWxzZQorICAgICAgICByZXN1bHQgPSBlbWl0TG9hZE9wKG9w
LCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRP
cChvcCkpLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIHVpbnQzMl90
IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAg
IGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRT
dG9yZTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3Jl
MTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICAgICAgcmV0dXJuIDI7
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6
STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9w
VHlwZTo6RjY0U3RvcmU6CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2lubGluZSB2b2lkIEFpcklSR2VuZXJhdG9yOjpl
bWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCit7CisgICAgdWludDMyX3Qgb2Zmc2V0
ID0gZml4dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIFRtcCBp
bW1UbXA7CisgICAgVG1wIG5ld1B0cjsKKworICAgIGF1dG8gc3RvcmVBcmcgPSBbJl0gKCkgewor
ICAgICAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JCeXRl
cyhzaXplT2ZTdG9yZU9wKG9wKSkpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihwb2lu
dGVyLCBvZmZzZXQpOworICAgICAgICBpbW1UbXAgPSBncHIoKTsKKyAgICAgICAgbmV3UHRyID0g
Z3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCBpbW1UbXAp
OworICAgICAgICBhcHBlbmQoQWRkNjQsIGltbVRtcCwgcG9pbnRlciwgbmV3UHRyKTsKKyAgICAg
ICAgcmV0dXJuIEFyZzo6YWRkcihuZXdQdHIpOworICAgIH07CisKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgIGNhc2UgU3RvcmVPcFR5cGU6
OkkzMlN0b3JlODoKKyAgICAgICAgYXBwZW5kKFN0b3JlOCwgdmFsdWUsIHN0b3JlQXJnKCkpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTE2OgorICAg
IGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgICAgIGFwcGVuZChTdG9yZTE2LCB2
YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5
cGU6Okk2NFN0b3JlMzI6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAgICAg
IGFwcGVuZChNb3ZlMzIsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlLCB2YWx1
ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6
OkYzMlN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCB2YWx1ZSwgc3RvcmVBcmcoKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgorICAg
ICAgICBhcHBlbmQoTW92ZURvdWJsZSwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci5pc0dQKCkpOworCisgICAgaWYgKFVOTElLRUxZ
KHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSkpKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3VnaCB0aGlzIGlzIHByb3ZhYmx5IG91dCBvZiBib3Vu
ZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBlcnJvciwgc28gd2UgaGF2ZSB0byBoYW5kbGUgaXQK
KyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gSG93ZXZlciwgdGhpcyBtYXkgY2hh
bmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDM1CisgICAg
ICAgIGF1dG8qIHRocm93RXhjZXB0aW9uID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAg
ICAgIHRocm93RXhjZXB0aW9uLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRo
aXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVt
b3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHRocm93RXhj
ZXB0aW9uLCBUbXAoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRTdG9yZU9wKG9wLCBlbWl0
Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3Ap
KSwgdmFsdWUsIG9mZnNldCk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlw
ZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG5vblplcm8uaXNHUCgpID09IHplcm8uaXNH
UCgpKTsKKyAgICByZXN1bHQgPSBub25aZXJvLmlzR1AoKSA/IGdwcigpIDogZnByKCk7CisgICAg
aWYgKG5vblplcm8uaXNHUCgpKQorICAgICAgICBhcHBlbmQoTW92ZSwgbm9uWmVybywgcmVzdWx0
KTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBub25aZXJvLCByZXN1bHQp
OworCisgICAgQmFzaWNCbG9jayogaXNaZXJvID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQo
QnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjb25kaXRp
b24sIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNaZXJv
LCBjb250aW51YXRpb24pOworCisgICAgaWYgKHplcm8uaXNHUCgpKQorICAgICAgICBhcHBlbmQo
aXNaZXJvLCBNb3ZlLCB6ZXJvLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kKGlz
WmVybywgTW92ZURvdWJsZSwgemVybywgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNaZXJvLCBKdW1w
KTsKKyAgICBpc1plcm8tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBB
aXJJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKHVpbnQzMl90IGRlY3JlbWVudENvdW50LCBC
Mzo6T3JpZ2luIG9yaWdpbikKK3sKKyAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsgLy8gT09QUwor
CisgICAgaWYgKCFtX3RpZXJVcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVG1wIGNvdW50ZG93
blB0ciA9IGdwcigpOworICAgIFRtcCBvbGRDb3VudGRvd24gPSBncHIoKTsKKyAgICBUbXAgbmV3
Q291bnRkb3duID0gZ3ByKCk7CisKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ocmVpbnRl
cnByZXRfY2FzdDx1aW50NjRfdD4obV90aWVyVXApKSwgY291bnRkb3duUHRyKTsKKyAgICBhcHBl
bmQoTW92ZTMyLCBBcmc6OmFkZHIoY291bnRkb3duUHRyKSwgb2xkQ291bnRkb3duKTsKKworICAg
IFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEltbUZvcm0oZGVjcmVtZW50Q291bnQpKTsKKyAg
ICBhcHBlbmQoTW92ZTMyLCBvbGRDb3VudGRvd24sIG5ld0NvdW50ZG93bik7CisgICAgYXBwZW5k
KFN1YjMyLCBBcmc6OmltbShkZWNyZW1lbnRDb3VudCksIG5ld0NvdW50ZG93bik7CisgICAgYXBw
ZW5kKE1vdmUzMiwgbmV3Q291bnRkb3duLCBBcmc6OmFkZHIoY291bnRkb3duUHRyKSk7CisKKyAg
ICBhdXRvKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIEIzOjpFZmZlY3Rz
IGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6
SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBlZmZlY3RzLndyaXRlcyA9IEIzOjpIZWFwUmFuZ2U6OnRv
cCgpOworICAgIHBhdGNoLT5lZmZlY3RzID0gZWZmZWN0czsKKworICAgIHBhdGNoLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRpZXJVcCA9
IGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHBhcmFtc1swXS5ncHIoKSwgcGFy
YW1zWzFdLmdwcigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHRpZXJVcFJlc3Vt
ZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICB0aWVyVXAubGluaygmaml0KTsKKworICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgZXh0cmFQYWRkaW5nQnl0ZXMgPSAwOworICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbCA9IHsgfTsKKyAgICAgICAgICAgIHJlZ2lzdGVy
c1RvU3BpbGwuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24gPSBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoaml0LCBy
ZWdpc3RlcnNUb1NwaWxsLCBleHRyYVBhZGRpbmdCeXRlcyk7CisKKyAgICAgICAgICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9mdW5jdGlvbkluZGV4KSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwg
PSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGws
IFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZh
dGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOworICAgICAgICAgICAgaml0Lmp1bXAodGllclVwUmVz
dW1lKTsKKworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8Tm9QdHJUYWc+KGNhbGwpLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRyaWdn
ZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSwg
bmV3Q291bnRkb3duLCBvbGRDb3VudGRvd24pOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJv
bERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpCit7CisgICAgQmFz
aWNCbG9jayogYm9keSA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKEp1bXApOworICAgIG1f
Y3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkpOworCisgICAgbV9jdXJyZW50QmxvY2sg
PSBib2R5OworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6bG9vcERlY3JlbWVudCgp
LCBvcmlnaW4oKSk7CisKKyAgICByZXR1cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVy
ZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwg
Ym9keSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6
YWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKEIz
OjpPcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6
VG9wTGV2ZWwsIG1fY29kZS5hZGRCbG9jaygpKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICBy
ZXR1cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1
cmUpLCBCbG9ja1R5cGU6OkJsb2NrLCBtX2NvZGUuYWRkQmxvY2soKSk7Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1
cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCYXNpY0Js
b2NrKiB0YWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisgICAgCisgICAgLy8gV2FzbSBib29scyBhcmUgaTMyLgorICAgIGFw
cGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyks
IGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29y
cyh0YWtlbiwgbm90VGFrZW4pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKKyAgICBy
ZXN1bHQgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25h
dHVyZSksIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4pOworICAgIHJldHVy
biB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRh
dGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsK
KyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0
YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhKTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERh
dGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0g
QmxvY2tUeXBlOjpJZik7CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CisgICAg
ZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJU
KHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXplKCkp
IHsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlR1BSID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKKyAgICAgICAgc3dpdGNoIChkYXRhLnNpZ25hdHVyZSgpKSB7CisgICAgICAgIGNh
c2UgVHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgcmV0dXJuVmFsdWVzWzBd
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0MzIsIHJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAg
ICAgICAgIGFwcGVuZChNb3ZlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGFwcGVuZChSZXQ2NCwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVGbG9h
dCwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBhcHBlbmQo
UmV0RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCByZXR1cm5WYWx1
ZXNbMF0sIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0
dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBl
bHNlCisgICAgICAgIGFwcGVuZChSZXRWb2lkKTsKKyAgICByZXR1cm4geyB9OworfQorCisvLyBO
T1RFOiBBbGwgYnJhbmNoZXMgaW4gV2FzbSBhcmUgb24gMzItYml0IGludHMKKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVz
dWx0Rm9yQnJhbmNoKCkpOworCisgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRC
bG9ja0ZvckJyYW5jaCgpOworICAgIGlmIChjb25kaXRpb24pIHsKKyAgICAgICAgQmFzaWNCbG9j
ayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIGFwcGVuZChCcmFu
Y2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIGNvbmRpdGlv
biwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFy
Z2V0LCBjb250aW51YXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBk
ZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUo
KTsgKytpKQorICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRh
cmdldHNbaV0tPnJlc3VsdEZvckJyYW5jaCgpKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhl
eHByZXNzaW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQucmVzdWx0Rm9yQnJhbmNoKCkpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJh
c2ljQmxvY2sqIHRhcmdldCA9IHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
ICAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6Ymln
SW1tKGkpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChCcmFuY2gzMiwgQXJnOjpyZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGNvbnN0YW50LCBjb25kaXRpb24pOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgYXBwZW5k
KEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRlZmF1bHRUYXJnZXQu
dGFyZ2V0QmxvY2tGb3JCcmFuY2goKSk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEm
IGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4
cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1bHQpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1
cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisKKyAgICByZXR1
cm4gYWRkRW5kVG9VbnJlYWNoYWJsZShlbnRyeSk7Cit9CisKKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBt
X2N1cnJlbnRCbG9jayA9IGRhdGEuY29udGludWF0aW9uOworCisgICAgaWYgKGRhdGEudHlwZSgp
ID09IEJsb2NrVHlwZTo6SWYpIHsKKyAgICAgICAgYXBwZW5kKGRhdGEuc3BlY2lhbCwgSnVtcCk7
CisgICAgICAgIGRhdGEuc3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhtX2N1cnJlbnRCbG9jayk7Cisg
ICAgfQorCisgICAgZm9yIChUbXAgcmVzdWx0IDogZGF0YS5yZXN1bHQpCisgICAgICAgIGVudHJ5
LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworCisgICAgLy8gVG9wTGV2
ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tU
eXBlOjpUb3BMZXZlbCkKKyAgICAgICAgcmV0dXJuIGFkZFJldHVybihkYXRhLCBlbnRyeS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjayk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsK
KworICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgc3dp
dGNoIChyZXR1cm5UeXBlKSB7CisgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjMyOgorICAgIGNhc2Ug
VHlwZTo6RjY0OgorICAgICAgICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CisKKyAgICBpZiAobV9pbmZvLmlzSW1w
b3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKKyAg
ICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFy
Z3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICAgICAg
VG1wIGN1cnJlbnRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgaW5zdGFu
Y2VWYWx1ZSgpLCBjdXJyZW50SW5zdGFuY2UpOworCisgICAgICAgIC8vIEZJWE1FIGltcG9ydHMg
Y2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LCBi
ZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgQjMgY29tcGlsYXRp
b24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYy
CisgICAgICAgIFRtcCB0YXJnZXRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICAvLyBPT1BTOiBU
cnkgdG8gaXNlbCB0aGlzIGJldHRlcgorICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
SW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpLCB0YXJnZXRJ
bnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCB0YXJnZXRJ
bnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGFyZ2V0SW5zdGFuY2Up
LCB0YXJnZXRJbnN0YW5jZSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sgPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2NrID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1f
Y29kZS5hZGRCbG9jaygpOworCisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0NjQsIEFyZzo6cmVz
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRhcmdldEluc3RhbmNlLCB0YXJnZXRJbnN0
YW5jZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJsb2Nr
LCBpc0VtYmVkZGVyQmxvY2spOworCisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcGF0
Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdl
IG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAgICAgICAgLy8gV2UgcGVzc2lt
aXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlz
IGJvdW5kcyBjaGVja2luZy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2
ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcy
MTgxCisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisKKyAgICAg
ICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAgICAgICAgICAgd2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0
Y2hwb2ludCwgYXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAg
ICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7
CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5k
ZXggfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgZW1pdFBhdGNocG9pbnQoaXNXYXNtQmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92
ZShwYXRjaEFyZ3MpKTsKKyAgICAgICAgICAgIGFwcGVuZChpc1dhc21CbG9jaywgSnVtcCk7Cisg
ICAgICAgICAgICBpc1dhc21CbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworICAg
ICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgVG1wIGp1bXBEZXN0aW5hdGlvbiA9IGdw
cigpOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgTW92ZSwgQXJnOjpiaWdJ
bW0oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5kZXgpKSwg
anVtcERlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIEFk
ZDY0LCBpbnN0YW5jZVZhbHVlKCksIGp1bXBEZXN0aW5hdGlvbik7CisgICAgICAgICAgICBhcHBl
bmQoaXNFbWJlZGRlckJsb2NrLCBNb3ZlLCBBcmc6OmFkZHIoanVtcERlc3RpbmF0aW9uKSwganVt
cERlc3RpbmF0aW9uKTsKKworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNo
cG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIg
YWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcg
dGhlIGluc3RhbmNlLgorICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3
ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4K
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgICAgICBw
YXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShN
ZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisgICAgICAgICAgICBWZWN0b3I8Q29uc3Ry
YWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoanVtcERl
c3RpbmF0aW9uKTsKKworICAgICAgICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0
dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2hwb2ludCwgYXJncywgWyZdIChUbXAgdG1w
LCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7
IHRtcCwgcmVwIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAg
ICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwg
V2FzbUVudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBlbWl0UGF0
Y2hwb2ludChpc0VtYmVkZGVyQmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShwYXRj
aEFyZ3MpKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIEp1bXApOworICAg
ICAgICAgICAgaXNFbWJlZGRlckJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIH0KKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICAg
ICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5z
dGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KKyAgICAgICAg
cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Olll
cywgbV9pbmZvLm1lbW9yeSwgY3VycmVudEluc3RhbmNlLCBjb250aW51YXRpb24pOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBl
KHJldHVyblR5cGUpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQg
PSB0cnVlOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsK
KworICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgd2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0
Y2hwb2ludCwgYXJncywgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAg
ICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1
bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
ID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21U
b1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVu
dHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hw
b2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgIH0KKworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEV4cHJlc3Npb25UeXBlIGNh
bGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOworICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKworICAgIG1fbWFrZXNDYWxscyA9IHRydWU7Cisg
ICAgLy8gTm90ZTogY2FsbCBpbmRpcmVjdCBjYW4gY2FsbCBlaXRoZXIgV2ViQXNzZW1ibHlGdW5j
dGlvbiBvciBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi4gQmVjYXVzZQorICAgIC8vIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uIGlzIGxpa2UgY2FsbGluZyBpbnRvIHRoZSBlbWJlZGRlciwg
d2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIGFsbCBjYWxsIGluZGlyZWN0cworICAgIC8vIGNhbiBi
ZSB0byB0aGUgZW1iZWRkZXIgZm9yIG91ciBzdGFjayBjaGVjayBjYWxjdWxhdGlvbi4KKyAgICBt
X21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRz
LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKKworICAgIFRtcCBjdXJyZW50
SW5zdGFuY2UgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZSwgaW5zdGFuY2VWYWx1ZSgpLCBjdXJy
ZW50SW5zdGFuY2UpOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ciA9IGdwcigpOworICAgIEV4cHJlc3Npb25UeXBlIGluc3RhbmNlc0J1ZmZlciA9IGdwcigpOwor
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGggPSBncHIoKTsK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3Rh
bmNlOjpvZmZzZXRPZlRhYmxlKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpLCBCMzo6
V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShU
YWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mTGVuZ3RoKCksIEIz
OjpXaWR0aDY0KSk7CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZh
bHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
TGVuZ3RoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9u
QnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSksIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpKSwgaW5zdGFuY2VzQnVm
ZmVyKTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rpb25C
dWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSwgY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlckxlbmd0aCk7CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUzMiwgY2FsbGVlSW5kZXgsIGNh
bGxlZUluZGV4KTsKKworICAgIC8vIENoZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3Ig
aXMgdmFsaWQuCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChCcmFuY2gzMiwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBjYWxsZWVJbmRleCwg
Y2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNDYWxs
SW5kaXJlY3QpOworICAgIH0pOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IGdw
cigpOworICAgIHsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXgg
PSBncHIoKTsKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRl
eCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6Omlt
bShzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpLCBjYWxsZWVTaWduYXR1cmVJ
bmRleCk7CisgICAgICAgIGFwcGVuZChNdWw2NCwgY2FsbGVlSW5kZXgsIGNhbGxlZVNpZ25hdHVy
ZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBj
YWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoTW92ZSwgQXJn
OjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
OjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIGNhbGxlZUNvZGUpOyAvLyBQb2lu
dGVyIHRvIGNhbGxlZSBjb2RlLgorCisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNuJ3Qu
IEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6
ZWQuCisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2Fu
IGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBp
cyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OnNp
Z25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMg
aTY0Iik7CisgICAgICAgIC8vIE9PUFM6IFRoaXMgc2VlbXMgZHVtYiB0byBkbyB0d28gY2hlY2tz
IGp1c3QgZm9yIGEgbmljZXIgZXJyb3IgaGVyZS4uLgorCisgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKwor
ICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoU2lnbmF0
dXJlOjppbnZhbGlkSW5kZXggPT0gMCwgIiIpOworICAgICAgICAgICAgYXBwZW5kKEJyYW5jaFRl
c3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok51bGxUYWJs
ZUVudHJ5KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAg
ICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gZ3ByKCk7CisgICAg
ICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmUpKSwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBhcHBl
bmQoQnJhbmNoNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBjYWxs
ZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCk7CisgICAgICAgIH0sIFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25U
eXBlOjpCYWRTaWduYXR1cmUpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBEbyBhIGNv
bnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFRtcCBuZXdDb250ZXh0SW5z
dGFuY2UgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW5kZXgoaW5zdGFuY2Vz
QnVmZmVyLCBjYWxsZWVJbmRleCwgOCwgMCksIG5ld0NvbnRleHRJbnN0YW5jZSk7CisKKyAgICAg
ICAgQmFzaWNCbG9jayogZG9Db250ZXh0U3dpdGNoID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAg
ICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCks
IG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBkb0NvbnRleHRTd2l0Y2gpOworCisg
ICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAvLyBX
ZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdpdGggQm91
bmRzQ2hlY2tpbmcgbWVtb3J5LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUg
dG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4
MQorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCku
dG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
R1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAg
ICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdz
LnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3Rh
bmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1l
bW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNt
Q29udGV4dEluc3RhbmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQo
c2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0
ZXIKKyAgICAgICAgICAgIC8vICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyOTUyCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEp
OworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250
ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250
ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4K
KyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZG9Db250ZXh0U3dpdGNoLCBw
YXRjaHBvaW50LCBUbXAoKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOwor
ICAgICAgICBhcHBlbmQoZG9Db250ZXh0U3dpdGNoLCBKdW1wKTsKKyAgICAgICAgZG9Db250ZXh0
U3dpdGNoLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRk
cihjYWxsZWVDb2RlKSwgY2FsbGVlQ29kZSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWdu
YXR1cmUucmV0dXJuVHlwZSgpOworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2Ug
VHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2Fz
ZSBUeXBlOjpJNjQ6CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBv
aW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICBwYXRjaC0+ZWZmZWN0cy53cml0ZXNQaW5u
ZWQgPSB0cnVlOworICAgIHBhdGNoLT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAv
LyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNl
IHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgIC8vIFdlIHBlc3NpbWlzdGlj
YWxseSBhc3N1bWUgd2UncmUgYWx3YXlzIGNhbGxpbmcgc29tZXRoaW5nIHRoYXQgaXMgYm91bmRz
IGNoZWNraW5nIHNvCisgICAgLy8gYmVjYXVzZSB0aGUgd2FzbS0+d2FzbSB0aHVuayB1bmNvbmRp
dGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBzaXplIHJlZ2lzdGVycy4KKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHViIGFzc3Vt
ZXMgaXQgY2FuCisgICAgLy8gdXNlIGFsbCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhcyBzY3JhdGNo
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgcGF0
Y2gtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRB
cmdzOworICAgIGVtaXRBcmdzLmFwcGVuZChjYWxsZWVDb2RlKTsKKyAgICB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaCwgYXJncywg
WyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgIGVtaXRBcmdzLmFwcGVu
ZCh7IHRtcCwgcmVwIH0pOworICAgIH0pOworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAg
OiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBv
aW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgcmVzdWx0LCBXVEZNb3ZlKGVtaXRBcmdzKSk7CisK
KyAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBp
bnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgIHJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMs
IG1faW5mby5tZW1vcnksIGN1cnJlbnRJbnN0YW5jZSwgbV9jdXJyZW50QmxvY2spOworCisgICAg
cmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVz
c2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUmIHNvdXJjZSkKK3sKKyAgICAvLyBP
T1BTOiBXZSBraW5kYSB3YW50IHR5cGVzIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2NC9mMzIv
ZjY0IQorICAgIFJFTEVBU0VfQVNTRVJUKGRzdC5pc0dQKCkgPT0gc291cmNlLmlzR1AoKSk7Cisg
ICAgYXBwZW5kKGRzdC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgc291cmNlLCBkc3QpOwor
fQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdCkKK3sKKyAg
ICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSByZXN1bHRTdGFjay5zaXplKCkpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5KHJl
c3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1bHRTdGFja1tyZXN1bHRTdGFjay5zaXpl
KCkgLSAxIC0gaV0pOworfQorCisvL3N0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29u
c3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgQWlySVJHZW5lcmF0b3I6OkV4cHJlc3Npb25M
aXN0JiBleHByZXNzaW9uU3RhY2spCisvL3sKKy8vICAgIGRhdGFMb2coY29tbWEsICJFeHByZXNz
aW9uU3RhY2s6Iik7CisvLyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNz
aW9uU3RhY2spCisvLyAgICAgICAgZGF0YUxvZyhjb21tYSwgKmV4cHJlc3Npb24pOworLy99CisK
K3ZvaWQgQWlySVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNv
bnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjaykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oY29udHJvbFN0YWNrKTsKKyAgICBVTlVTRURfUEFSQU0oZXhwcmVzc2lv
blN0YWNrKTsKKworICAgIC8vIE9PUFMhCisgICAgLyoKKyAgICBkYXRhTG9nTG4oIlByb2Nlc3Np
bmcgR3JhcGg6Iik7CisgICAgZGF0YUxvZyhtX2NvZGUpOworICAgIGRhdGFMb2dMbigiV2l0aCBj
dXJyZW50IGJsb2NrOiIsICptX2N1cnJlbnRCbG9jayk7CisgICAgZGF0YUxvZ0xuKCJDb250cm9s
IHN0YWNrOiIpOworICAgIEFTU0VSVChjb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gY29udHJvbFN0YWNrLnNpemUoKTsgaS0tOykgeworICAgICAgICBkYXRhTG9nKCIg
ICIsIGNvbnRyb2xTdGFja1tpXS5jb250cm9sRGF0YSwgIjogIik7CisgICAgICAgIENvbW1hUHJp
bnRlciBjb21tYSgiLCAiLCAiIik7CisgICAgICAgIGR1bXBFeHByZXNzaW9uU3RhY2soY29tbWEs
ICpleHByZXNzaW9uU3RhY2spOworICAgICAgICBleHByZXNzaW9uU3RhY2sgPSAmY29udHJvbFN0
YWNrW2ldLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOworICAgICAgICBkYXRhTG9nTG4oKTsKKyAg
ICB9CisgICAgZGF0YUxvZ0xuKCk7CisgICAgKi8KK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgoreworICAgIHJldHVybiBCMzo6T3JpZ2luKCk7CisgICAg
Ly9PcGNvZGVPcmlnaW4gb3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCksIG1fcGFyc2Vy
LT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSk7CisgICAgLy9BU1NFUlQoaXNWYWxpZE9w
VHlwZShzdGF0aWNfY2FzdDx1aW50OF90PihvcmlnaW4ub3Bjb2RlKCkpKSk7CisgICAgLy9yZXR1
cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsKK30KKworRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21w
aWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rp
b25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGls
YXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVw
Q291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sK
KyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsK
KworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1h
a2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKworICAgIEIz
OjpQcm9jZWR1cmUgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGUgPSBwcm9jZWR1cmUuY29kZSgp
OworCisgICAgcHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQs
IEIzOjpPcmlnaW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCJXYXNtOiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2luPihvcmln
aW4pKTsKKyAgICB9KTsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1c2UgZWl0
aGVyIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCisgICAgLy8g
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1bmF2YWlsYWJsZVJlZ2lzdGVycygpLiBJbiBleGNo
YW5nZSBmb3IgdGhpcyBjb25jZXNzaW9uLCB3ZQorICAgIC8vIGRvbid0IHN0cmljdGx5IG5lZWQg
dG8gcnVuIEFpcjo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLCB3aGljaCBzYXZlcyBhIGJpdCBvZiBD
UFUgdGltZSBhdAorICAgIC8vIG9wdExldmVsPTEuCisgICAgLy8gT09QUzogRG8gd2UgbmVlZCB0
aGlzPyBTaG91bGQgd2UganVzdCBzZXQgaXQgZGlyZWN0bHkgb24gQ29kZT8KKyAgICBwcm9jZWR1
cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKKyAgICAKKyAgICBwcm9jZWR1cmUuc2V0
T3B0TGV2ZWwoY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZQorICAg
ICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQorICAgICAg
ICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CisKKyAgICBB
aXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25J
bmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgRnVuY3Rp
b25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CisKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1
Y2Nlc3NvcnMoKTsgKytpKQorICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpLT5h
ZGRQcmVkZWNlc3NvcihibG9jayk7CisgICAgfQorICAgIC8vQjM6OkFpcjo6dmFsaWRhdGUoY29k
ZSk7CisgICAgLy8gT09QUzogVmFsaWRhdGUgJ2NvZGUnIGhlcmUhCisgICAgCisgICAgeworICAg
ICAgICBCMzo6QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihjb2RlKTsKKyAgICAgICAgQjM6OkFp
cjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7
CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBw
cm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50
LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlz
dCgpOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBJbnRUeXBlPgordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1v
ZE9yRGl2KGJvb2wgaXNTaWduZWREaXYsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0KQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09IDQgfHwg
c2l6ZW9mKEludFR5cGUpID09IDgsICIiKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAg
ICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBCcmFuY2hUZXN0MzIgOiBCcmFuY2hUZXN0
NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJpZ2h0LCByaWdodCk7Cisg
ICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0
aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgIH0pOworCisgICAgaWYgKGlzU2lnbmVkRGl2
KSB7CisgICAgICAgIEFTU0VSVChzdGQ6OmlzX3NpZ25lZDxJbnRUeXBlPjo6dmFsdWUpOworICAg
ICAgICBJbnRUeXBlIG1pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8SW50VHlwZT46Om1pbigpOwor
CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgLy8gT09QUzogVHJ5IHRvIGVt
aXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAgICAgICAgICBUbXAgbWluVG1wID0gZ3ByKCk7
CisgICAgICAgICAgICBUbXAgbmVnT25lID0gZ3ByKCk7CisKKyAgICAgICAgICAgIEIzOjpBaXI6
Ok9wY29kZSBvcCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQ29tcGFyZTMyIDogQ29tcGFyZTY0
OworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihtaW4pKSwgbWluVG1wKTsKKyAgICAgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGxlZnQsIG1pblRtcCwgbWluVG1wKTsKKworICAgICAg
ICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKC0xKSwgbmVnT25lKTsKKyAgICAgICAgICAgIGFw
cGVuZChvcCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIHJpZ2h0LCBuZWdP
bmUsIG5lZ09uZSk7CisKKyAgICAgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVz
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIG1pblRtcCwgbmVnT25lKTsKKyAgICAgICAg
fSwKKyAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6OkludGVnZXJPdmVyZmxvdyk7CisgICAgICAgIH0pOworICAgIH0K
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+Cit2b2lkIEFpcklSR2VuZXJhdG9yOjpl
bWl0TW9kT3JEaXYoYm9vbCBpc0RpdiwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlw
ZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoSW50VHlwZSkgPT0gNCB8fCBzaXplb2YoSW50VHlwZSkgPT0gOCwgIiIpOworCisgICAgcmVz
dWx0ID0gZ3ByKCk7CisKKyAgICBib29sIGlzU2lnbmVkID0gc3RkOjppc19zaWduZWQ8SW50VHlw
ZT46OnZhbHVlOworCisgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICBCMzo6QWlyOjpPcGNv
ZGUgZGl2OworICAgICAgICBzd2l0Y2ggKHNpemVvZihJbnRUeXBlKSkgeworICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICBkaXYgPSBpc1NpZ25lZCA/IERpdjMyIDogVURpdjMyOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGRpdiA9IGlzU2lnbmVk
ID8gRGl2NjQgOiBVRGl2NjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGFwcGVuZChkaXYsIGxocywgcmhzLCByZXN1bHQpOworCisgICAgICAgIGlmICghaXNEaXYp
IHsKKyAgICAgICAgICAgIGFwcGVuZChzaXplb2YoSW50VHlwZSkgPT0gNCA/IE11bDMyIDogTXVs
NjQsIHJlc3VsdCwgcmhzLCByZXN1bHQpOworICAgICAgICAgICAgYXBwZW5kKHNpemVvZihJbnRU
eXBlKSA9PSA0ID8gU3ViMzIgOiBTdWI2NCwgbGhzLCByZXN1bHQsIHJlc3VsdCk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82
NCkKKworICAgIFRtcCBlYXgoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIFRtcCBlZHgoWDg2UmVn
aXN0ZXJzOjplZHgpOworCisgICAgaWYgKGlzU2lnbmVkKSB7CisgICAgICAgIEIzOjpBaXI6Ok9w
Y29kZSBjb252ZXJ0VG9Eb3VibGVXb3JkOworICAgICAgICBCMzo6QWlyOjpPcGNvZGUgZGl2Owor
ICAgICAgICBzd2l0Y2ggKHNpemVvZihJbnRUeXBlKSkgeworICAgICAgICBjYXNlIDQ6CisgICAg
ICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvRG91YmxlV29yZDMyOwor
ICAgICAgICAgICAgZGl2ID0gWDg2RGl2MzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSA4OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1
YWRXb3JkNjQ7CisgICAgICAgICAgICBkaXYgPSBYODZEaXY2NDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGltcGxlbWVudCAicmVzID0gRGl2PENo
aWxsPi9Nb2Q8Q2hpbGw+KG51bSwgZGVuKSIgYXMgZm9sbG93czoKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gICAgIGlmIChkZW4gKyAxIDw9X3Vuc2lnbmVkIDEpIHsKKyAgICAgICAgLy8gICAgICAg
ICBpZiAoIWRlbikgeworICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSAwOworICAgICAgICAv
LyAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIC8vICAgICAgICAgfQorICAgICAgICAv
LyAgICAgICAgIGlmIChudW0gPT0gLTIxNDc0ODM2NDgpIHsKKyAgICAgICAgLy8gICAgICAgICAg
ICAgcmVzID0gaXNEaXYgPyBudW0gOiAwOworICAgICAgICAvLyAgICAgICAgICAgICBnb3RvIGRv
bmU7CisgICAgICAgIC8vICAgICAgICAgfQorICAgICAgICAvLyAgICAgfQorICAgICAgICAvLyAg
ICAgcmVzID0gbnVtICgvIG9yICUpIGRldjsKKyAgICAgICAgLy8gZG9uZToKKworICAgICAgICBC
YXNpY0Jsb2NrKiBkZW5Jc0dvb2QgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNC
bG9jayogZGVuTWF5QmVCYWQgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogZGVuTm90WmVybyA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgICAgICBUbXAgdGVtcCA9IGdw
cigpOworICAgICAgICBUbXAgb25lID0gYWRkQ29uc3RhbnQoc2l6ZW9mKEludFR5cGUpID09IDQg
PyBUeXBlOjpJMzIgOiBUeXBlOjpJNjQsIDEpOworCisgICAgICAgIGFwcGVuZChzaXplb2YoSW50
VHlwZSkgPT0gNCA/IEFkZDMyIDogQWRkNjQsIHJocywgb25lLCB0ZW1wKTsKKyAgICAgICAgYXBw
ZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQnJhbmNoMzIgOiBCcmFuY2g2NCwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSksIHRlbXAsIG9uZSk7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRlbklzR29vZCwgZGVuTWF5QmVCYWQpOworCisgICAgICAg
IGFwcGVuZChkZW5NYXlCZUJhZCwgWG9yNjQsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYXBw
ZW5kKGRlbk1heUJlQmFkLCBzaXplb2YoSW50VHlwZSkgPT0gNCA/IEJyYW5jaFRlc3QzMiA6IEJy
YW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgcmhzLCByaHMp
OworICAgICAgICBkZW5NYXlCZUJhZC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRlbk5v
dFplcm8pOworCisgICAgICAgIFRtcCBtaW4gPSBhZGRDb25zdGFudChkZW5Ob3RaZXJvLCBzaXpl
b2YoSW50VHlwZSkgPT0gNCA/IFR5cGU6OkkzMiA6IFR5cGU6Okk2NCwgc3RkOjpudW1lcmljX2xp
bWl0czxJbnRUeXBlPjo6bWluKCkpOworICAgICAgICBpZiAoaXNEaXYpCisgICAgICAgICAgICBh
cHBlbmQoZGVuTm90WmVybywgc2l6ZW9mKEludFR5cGUpID09IDQgPyBNb3ZlMzIgOiBNb3ZlLCBt
aW4sIHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gUmVzdWx0IGlzIHpl
cm8sIGFzIHNldCBhYm92ZS4uLgorICAgICAgICB9CisgICAgICAgIGFwcGVuZChkZW5Ob3RaZXJv
LCBzaXplb2YoSW50VHlwZSkgPT0gNCA/IEJyYW5jaDMyIDogQnJhbmNoNjQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBsaHMsIG1pbik7CisgICAgICAgIGRlbk5vdFplcm8t
PnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBkZW5Jc0dvb2QpOworCisgICAgICAgIFRtcCBk
aXZSZXN1bHQgPSBpc0RpdiA/IGVheCA6IGVkeDsKKyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwg
TW92ZSwgbGhzLCBlYXgpOworICAgICAgICBhcHBlbmQoZGVuSXNHb29kLCBjb252ZXJ0VG9Eb3Vi
bGVXb3JkLCBlYXgsIGVkeCk7CisgICAgICAgIGFwcGVuZChkZW5Jc0dvb2QsIGRpdiwgZWF4LCBl
ZHgsIHJocyk7CisgICAgICAgIGFwcGVuZChkZW5Jc0dvb2QsIHNpemVvZihJbnRUeXBlKSA9PSA0
ID8gTW92ZTMyIDogTW92ZSwgZGl2UmVzdWx0LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoZGVu
SXNHb29kLCBKdW1wKTsKKyAgICAgICAgZGVuSXNHb29kLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBCMzo6QWlyOjpPcGNvZGUgZGl2ID0gc2l6ZW9mKEludFR5
cGUpID09IDQgPyBYODZVRGl2MzIgOiBYODZVRGl2NjQ7CisKKyAgICBUbXAgZGl2UmVzdWx0ID0g
aXNEaXYgPyBlYXggOiBlZHg7CisKKyAgICBhcHBlbmQoTW92ZSwgbGhzLCBlYXgpOworICAgIGFw
cGVuZChYb3I2NCwgZWR4LCBlZHgpOworICAgIGFwcGVuZChkaXYsIGVheCwgZWR4LCByaHMpOwor
ICAgIGFwcGVuZChzaXplb2YoSW50VHlwZSkgPT0gNCA/IE1vdmUzMiA6IE1vdmUsIGRpdlJlc3Vs
dCwgcmVzdWx0KTsKKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNl
bmRpZgorfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkRpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zv
ck1vZE9yRGl2PGludDMyX3Q+KHRydWUsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8
aW50MzJfdD4odHJ1ZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1T
PihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRp
djxpbnQzMl90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjxpbnQzMl90
PihmYWxzZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPihFeHBy
ZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjx1aW50
MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8dWludDMyX3Q+KHRy
dWUsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtVT4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8dWludDMyX3Q+
KGZhbHNlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PHVpbnQzMl90PihmYWxzZSwg
bGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZTPihFeHByZXNzaW9uVHlw
ZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjxpbnQ2NF90Pih0cnVl
LCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PGludDY0X3Q+KHRydWUsIGxlZnQsIHJp
Z2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50NjRfdD4oZmFsc2UsIGxlZnQs
IHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8aW50NjRfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0LCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVz
c2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8dWludDY0X3Q+KGZhbHNlLCBsZWZ0LCByaWdo
dCk7CisgICAgZW1pdE1vZE9yRGl2PHVpbnQ2NF90Pih0cnVlLCBsZWZ0LCByaWdodCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQpOwor
ICAgIGVtaXRNb2RPckRpdjx1aW50NjRfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyQ3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0
Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0
czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczMyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBd
LmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2lu
dChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRDdHo+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9z
NjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNp
ZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVs
YXRpb24oKSkgeworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6
SW50MzIpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjMyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJl
c3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKworICAgIHVp
bnQzMl90ICgqcG9wY291bnQpKGludDMyX3QpID0gW10gKGludDMyX3QgdmFsdWUpIC0+IHVpbnQz
Ml90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxs
KHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3Nl
bWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hw
b2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGppdC5jb3VudFBvcHVsYXRpb242NChwYXJh
bXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0
UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50NjRfdCAoKnBvcGNvdW50KShpbnQ2NF90KSA9IFtd
IChpbnQ2NF90IHZhbHVlKSAtPiB1aW50NjRfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRs
bCh2YWx1ZSk7IH07CisgICAgZW1pdENDYWxsKHBvcGNvdW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
RjY0Q29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6
bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1h
Y3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRv
RG91YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNo
KDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7CisgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyQ29udmVydFVJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBh
ZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpF
ZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51
bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3Rl
clNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0
VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdw
U2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRmxvYXQocGFy
YW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCkpOworI2VuZGlmCisgICAgfSk7CisgICAgcmVz
dWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0TmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9
IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIz
OjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RG91YmxlKHBhcmFtc1sxXS5m
cHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJOZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChC
Mzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0
LnJvdW5kVG93YXJkTmVhcmVzdEludEZsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZw
cigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChw
YXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRG91
YmxlKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1
bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFk
ZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVm
ZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9GbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBUbXAgbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKSkpOworICAgIFRtcCBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRt
cCB0ZW1wMiA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNv
bmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwg
dGVtcDEpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgs
IHRlbXAyKTsKKyAgICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVj
ayhbJl0geworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
IHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRz
VHJ1bmMpOworICAgIH0pOworCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQo
QjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGpp
dC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkp
OworICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNo
cG9pbnQsIHJlc3VsdCwgYXJnKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBUbXAgbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0
PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpKSk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAg
IGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAg
IGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAg
ICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRo
cm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAg
fSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOwor
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRmxv
YXRUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9
IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2Fz
dDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApKTsK
KyAgICBUbXAgbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KC0xLjApKTsKKworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCB0ZW1wMiA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAx
KTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1w
Mik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5j
KTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJ
bnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1
bmNhdGVEb3VibGVUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7Cisg
ICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2lu
dCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjMyPihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBU
bXAgbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0
YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgKiBz
dGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAgICBUbXAgbWluID0gYWRkQ29uc3RhbnQoVHlw
ZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkp
OworCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBw
ZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBw
ZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAg
YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
KSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dF
eGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsK
KworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
VWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFy
Zyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFRtcCBtYXggPSBhZGRD
b25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1p
biA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNf
Y2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworCisg
ICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAgYXBwZW5k
KENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVE
b3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0
ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChCcmFu
Y2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0
ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGpp
dCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBhdXRv
KiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQ2NChwYXJh
bXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFRtcCBtYXggPSBhZGRDb25zdGFudChU
eXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7CisgICAgVG1wIG1pbiA9
IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7Cisg
ICAgCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBh
cHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAg
ICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJv
d0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0p
OworCisgICAgVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAg
ICAvLyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRvIGNvbnZlcnQgZmxv
YXRpbmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFzdCB0cnkgdG8gZG8g
dGhlIHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJzIGFyZSB3b3VsZCBiZSBw
b3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2UgY2Fubm90IG1hdGVy
aWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAorICAgICAgICAvLyBz
byB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJpdENvbnN0YW50ID0g
YWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorCisgICAgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPiBhcmdzOworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIz
OjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7
CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBhcmdz
LmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0
Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAg
ICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYo
KSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAg
ICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQu
dHJ1bmNhdGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwg
c2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0pOworCisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
ZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92
ZShhcmdzKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFRtcCBtYXgg
PSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19j
YXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKyAgICBU
bXAgbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0
YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsK
KworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW5PclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBh
cmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIs
IHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJy
YW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIs
IHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1
dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50NjQocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGFkZENvbnN0YW50KFR5
cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0yLjAp
KSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVp
bnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKyAgICAKKyAgICBUbXAgdGVtcDEg
PSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0
LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9y
VW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBB
cmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9y
VW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRl
bXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMy
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOwor
ICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2Vw
dGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgVG1wIHNpZ25CaXRD
b25zdGFudDsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAvLyBTaW5jZSB4ODYgZG9lc24n
dCBoYXZlIGFuIGluc3RydWN0aW9uIHRvIGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVuc2ln
bmVkIGludGVnZXJzLCB3ZSBhdCBsZWFzdCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlmCisg
ICAgICAgIC8vIHRoZSBudW1iZXJzIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25l
ZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBy
cyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVl
ZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJp
dHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgp
KSkpOworICAgIH0KKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJ
bnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBhcmdzOworICAgIGFyZ3MuYXBwZW5kKGFyZyk7Cisg
ICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgYXJncy5hcHBlbmQoc2lnbkJpdENvbnN0YW50KTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJl
ZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52
YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2gg
PSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0u
ZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQ2NChwYXJh
bXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0p
OworCisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50Qmxv
Y2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShhcmdzKSk7CisKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTaGlmdChCMzo6QWlyOjpPcGNvZGUgb3As
IEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworCisg
ICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewor
ICAgICAgICBhcHBlbmQob3AsIHZhbHVlLCBzaGlmdCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisgICAgCisgICAgVG1wIGVjeCA9IFRtcChYODZSZWdpc3RlcnM6OmVjeCk7
CisgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlLCBzaGlm
dCwgZWN4KTsKKyAgICBhcHBlbmQob3AsIGVjeCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3ViKEIzOjpBaXI6Ok9wY29kZSBv
cCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAg
IGlmIChpc1ZhbGlkRm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAg
ICAgICAgYXBwZW5kKG9wLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAvLyBTdWIgYSwgYgor
ICAgIC8vIG1lYW5zCisgICAgLy8gYiA9IGIgU3ViIGEKKyAgICBhcHBlbmQoTW92ZSwgbGhzLCBy
ZXN1bHQpOworICAgIGFwcGVuZChvcCwgcmhzLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMoQjM6OkFpcjo6T3Bj
b2RlIG9wLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IEFic0Zsb2F0IHx8IG9w
ID09IEFic0RvdWJsZSk7CisKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIGlmIChpc1ZhbGlk
Rm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIHZhbHVl
LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUKGlzWDg2KCkpOworCisgICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAgaWYgKG9wID09
IEFic0Zsb2F0KSB7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbShzdGF0aWNfY2FzdDx1
aW50MzJfdD4ofigxdWxsIDw8IDMxKSkpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChNb3Zl
MzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKEFuZEZsb2F0LCB2
YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpi
aWdJbW0ofigxdWxsIDw8IDYzKSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmU2NFRv
RG91YmxlLCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKEFuZERvdWJsZSwgdmFs
dWUsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5PcChCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Np
b25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBpZiAoaXNWYWxp
ZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVu
ZChvcCwgbGhzLCByaHMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisKKyAgICAvLyBPcCBhLCBiCisgICAgLy8gbWVh
bnMKKyAgICAvLyBiID0gYiBPcCBhCisgICAgLy8gT09QUzogdmVyaWZ5CisgICAgYXBwZW5kKE1v
dmVEb3VibGUsIGxocywgcmVzdWx0KTsgLy8gT09QUzogU2hvdWxkIGJlIE1vdmVGbG9hdCAmIE1v
dmVEb3VibGUKKyAgICBhcHBlbmQob3AsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2Vp
bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDZWlsRmxvYXQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRl
bW90ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0
RG91YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Js
b2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxv
YXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBh
cmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVh
bCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhj
b250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJl
c3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVx
dWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKwor
ICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsK
KyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9y
RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2Nr
ID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUs
IEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEx0PihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVE
b3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNYXg+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisK
KyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlz
RXF1YWwsIEFuZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFs
LCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAg
ICBhcHBlbmQobm90RXF1YWwsIE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
bm90RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMo
bGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVGbG9h
dCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAgIGxlc3NU
aGFuLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9
IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKE11bERvdWJsZSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkRpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
dHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoRGl2RmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJD
bHo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ291bnRMZWFkaW5n
WmVyb3MzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29weXNpZ24+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29k
ZWdlbiBoZXJlIGZvciB0aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAg
cmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHNpZ24gPSBn
cHIoKTsKKyAgICBUbXAgdmFsdWUgPSBncHIoKTsKKworICAgIC8vIE9PUFM6IENhbiBmaXQgaW4g
SW1tL0JpdEltbSBpbnN0ZWFkIG9mIEJpZ0ltbT8KKyAgICBhcHBlbmQoTW92ZUZsb2F0VG8zMiwg
YXJnMSwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwKSwg
c2lnbik7CisgICAgYXBwZW5kKEFuZDMyLCB0ZW1wMSwgc2lnbiwgc2lnbik7CisKKyAgICBhcHBl
bmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpi
aWdJbW0oMHg3ZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBlbmQoQW5kMzIsIHRlbXAxLCB2YWx1
ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9yMzIsIHNpZ24sIHZhbHVlLCB2YWx1ZSk7CisgICAg
YXBwZW5kKE1vdmUzMlRvRmxvYXQsIHZhbHVlLCByZXN1bHQpOworCisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENv
bnZlcnRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSBn
cHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVy
dEludDY0VG9Eb3VibGUsIHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlJlaW50ZXJwcmV0
STMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE1vdmUzMlRvRmxv
YXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFuZD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBbmQ2NCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHdD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRG91Ymxl
LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3FydD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NEdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0R3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0
VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcXo+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjREaXY+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICAvLyBPT1BTOiB3aGF0IGFib3V0IGNoaWxsLW5l
c3MgaGVyZS4uLj8KKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKERpdkRvdWJsZSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMkFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChBZGRGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0T3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoT3I2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyTGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJM
ZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE5lPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NENsej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczY0LCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJOZWc+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBpZiAoaXNW
YWxpZEZvcm0oTmVnYXRlRmxvYXQsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVu
ZChOZWdhdGVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgVG1wIGNv
bnN0YW50ID0gYWRkQ29uc3RhbnQoVHlwZTo6STMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0
YXRpY19jYXN0PGZsb2F0PigtMC4wKSkpOworICAgICAgICBUbXAgdGVtcCA9IGdwcigpOworICAg
ICAgICBhcHBlbmQoTW92ZUZsb2F0VG8zMiwgYXJnMCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChY
b3IzMiwgY29uc3RhbnQsIHRlbXApOworICAgICAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdGVt
cCwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFuZD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBbmQzMiwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFJvdHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
YWRkU2hpZnQoUm90YXRlUmlnaHQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFicz4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0
Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAg
IGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4p
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcT4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1z
IGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBU
bXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2YWx1ZSA9
IGdwcigpOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcxLCB0ZW1wMSk7CisgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAwMDAwMDAwMDAwMCksIHNpZ24pOworICAg
IGFwcGVuZChBbmQ2NCwgdGVtcDEsIHNpZ24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3Vi
bGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2Zm
ZmZmZmZmZmZmZmZmZiksIHZhbHVlKTsKKyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCB2YWx1ZSwg
dmFsdWUpOworCisgICAgYXBwZW5kKE9yNjQsIHNpZ24sIHZhbHVlLCB2YWx1ZSk7CisgICAgYXBw
ZW5kKE1vdmU2NFRvRG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252
ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0
SW50NjRUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RsPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZUxlZnQ2NCwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMkx0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NENvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7Cisg
ICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTGU+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkdl
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJTaHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0
KFVyc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTMyPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZnByKCk7CisgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMy
LCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9GbG9hdCwgdGVtcCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJldHVybiBhZGRTaGlmdChSc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkdlVT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q2VpbD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDZWlsRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJHZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlm
dChMc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZnByKCk7CisgICAgYXBwZW5kKEZsb29yRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJYb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoWG9yMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkFicz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0Zsb2F0
LCBhcmcwLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0TWluPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZnByKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVu
ZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNl
dFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIE9y
RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsK
KyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQo
bm90RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFs
LCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVx
dWFsLCBNb3ZlRG91YmxlLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChncmVhdGVyVGhhbk9y
RXF1YWwsIEp1bXApOworICAgIGdyZWF0ZXJUaGFuT3JFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyTXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZnByKCk7CisgICAgYXBwZW5kKE11bEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRk
SW50ZWdlclN1YihTdWI2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlaW50ZXJwcmV0RjMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChBZGQzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChTdWJEb3VibGUsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChPcjMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRM
dFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0THRTPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRYb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoWG9yNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NEdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TXVsPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE11bDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTdWI+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBpZiAoaXNW
YWxpZEZvcm0oU3ViRmxvYXQsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAg
ICBhcHBlbmQoU3ViRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCBh
cmcwLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU3ViRmxvYXQsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGNjRQcm9tb3RlRjMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgYXBwZW5kKENvbnZlcnRGbG9hdFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBmcHIoKTsKKyAgICBhcHBlbmQoQWRkRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRHZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NEV4dGVuZFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
TW92ZTMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJOZT4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIFJFTEVBU0VfQVNTRVJUKGFy
ZzAgJiYgYXJnMSk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFJl
aW50ZXJwcmV0STY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKE1v
dmU2NFRvRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJFcT4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21w
YXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcT4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJGbG9vcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFw
cGVuZChGbG9vckZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0U0kz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChDb252ZXJ0SW50MzJU
b0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcXo+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZWludGVy
cHJldEY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlRG91
YmxlVG82NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyUz4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChSc2hpZnQ2NCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
YWRkU2hpZnQoVXJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3FydD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChTcXJ0RG91YmxlLCBhcmcwLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkU2hpZnQoTHNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHdD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4p
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJXcmFwSTY0PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyUm90bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biBhZGRTaGlmdChSb3RhdGVMZWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RyPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZVJpZ2h0MzIs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChTaWdu
RXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RTPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiksIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVEb3VibGUsIEFyZzo6VG1wLCBBcmc6
OlRtcCkpCisgICAgICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAg
ZWxzZSB7CisgICAgICAgIFRtcCBjb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6Okk2NCwgYml0
d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KC0wLjApKSk7CisgICAgICAg
IFRtcCB0ZW1wID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwg
dGVtcCk7CisgICAgICAgIGFwcGVuZChYb3I2NCwgY29uc3RhbnQsIHRlbXApOworICAgICAgICBh
cHBlbmQoTW92ZTY0VG9Eb3VibGUsIHRlbXAsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRNYXg+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsK
KworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxl
c3NUaGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5j
aERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFy
ZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5v
dEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmREb3VibGUsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nl
c3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwg
YXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpk
b3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOwor
ICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisg
ICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRG91YmxlLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVu
ZChsZXNzVGhhbiwgSnVtcCk7CisgICAgbGVzc1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0
aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NExlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigp
OworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVs
b3dPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVTPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRBZGQ+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQWRkNjQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0Jiwg
Y29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBD
b21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51
bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBCM0lSR2VuZXJh
dG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbgogICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJh
bmdlOjp0b3AoKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKICAgICBwYXRj
aHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIp
KTsKLSAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgpLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsgLy8gT09QUzogUHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nIGFy
ZyEKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJbnN0
YW5jZUdQUjsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgewogICAgICAgICBq
aXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CkBAIC00NTks
OSArNDU5LDkgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAogCiAg
ICAgaWYgKHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0ID09IFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
OjpZZXMpIHsKICAgICAgICAgLy8gVGhlIEluc3RhbmNlIGNhY2hlcyB0aGUgc3RhY2sgbGltaXQs
IGJ1dCBhbHNvIGtub3dzIHdoZXJlIGl0cyBjYW5vbmljYWwgbG9jYXRpb24gaXMuCi0gICAgICAg
IFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZQb2lu
dGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpKTsKLSAgICAgICAgVmFsdWUqIGFjdHVhbFN0YWNrTGlt
aXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBwb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9y
ZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGltaXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAg
IFZhbHVlKiBwb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VW
YWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1
YWxTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgVmFsdWUqIGFjdHVhbFN0YWNrTGltaXQgPSBibG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9y
aWdpbigpLCBwb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KTsKKyAgICAgICAgYmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGFjdHVhbFN0YWNrTGlt
aXQsIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkU3RhY2tMaW1pdCgpKSk7IC8vIE9PUFM6IHNob3VsZCBiZSBibG9jayEKICAgICB9CiAK
ICAgICBpZiAoISFtZW1vcnkpIHsKQEAgLTE2MDksNiArMTYwOSw3IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkT3A8RjY0Q29udmVydFVJNjQKICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgcGF0
Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBw
YXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7
CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICNpZiBDUFUoWDg2XzY0
KQpAQCAtMTYyOSw2ICsxNjMwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkNvbgogICAgIGlmIChpc1g4NigpKQogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOwogI2lmIENQVShYODZfNjQpCkBAIC0xODM4LDcgKzE4NDAs
NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIHBh
dGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAgfQogICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsgLy8gT09QUzogVGhpcyBsb29rcyBzdXBlciB3
cm9uZyBnaXZlbiB3ZSBkb24ndCBzYXkgd2UgY2xvYmJlciB0aGlzIQogICAgICAgICBGUFJSZWcg
c2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CiAgICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFs
aWRGUFJSZWc7CiAgICAgICAgIGlmIChpc1g4NigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJXYXNt
QjNJUkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldh
c21DYWxsaW5nQ29udmVudGlvbi5oIgpAQCAtMjcxLDcgKzI3Miw3IEBAIHZvaWQgQkJRUGxhbjo6
Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGkKIAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7
CiAgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVj
a3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6IG51bGxwdHI7Ci0gICAgICAg
IGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRp
b25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9u
LmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rp
b25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9u
KTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVB
aXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRh
dGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2Rl
LCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJv
d1dhc21FeGNlcHRpb24pOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxl
UmVzdWx0KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2
MiwzNiBAQCBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5nCiAgICAgcmV0
dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKIH0KIAorY29uc3QgSlNDQ2FsbGluZ0Nv
bnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyPiBzdGF0aWNKU0NDYWxsaW5n
Q29udmVudGlvbjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljSlNDQ2FsbGluZ0Nv
bnZlbnRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50
aW9uRmxhZywgW10gKCkgeworICAgICAgICBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25z
dHJ1Y3QoVmVjdG9yPFJlZz4oKSwgVmVjdG9yPFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0Nv
bnZlbnRpb247Cit9CisKK2NvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbkFpciYgd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFdhc21D
YWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOworICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnOworICAg
IHN0ZDo6Y2FsbF9vbmNlKHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbkZsYWcsIFtdICgpIHsK
KyAgICAgICAgVmVjdG9yPFJlZz4gZ3ByQXJndW1lbnRSZWdpc3RlcnMoR1BSSW5mbzo6bnVtYmVy
T2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
UFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBncHJB
cmd1bWVudFJlZ2lzdGVyc1tpXSA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKwor
ICAgICAgICBWZWN0b3I8UmVnPiBmcHJBcmd1bWVudFJlZ2lzdGVycyhGUFJJbmZvOjpudW1iZXJP
ZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQ
UkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgICAgIGZwckFy
Z3VtZW50UmVnaXN0ZXJzW2ldID0gRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisg
ICAgICAgIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoV1RGTW92ZShncHJB
cmd1bWVudFJlZ2lzdGVycyksIFdURk1vdmUoZnByQXJndW1lbnRSZWdpc3RlcnMpLCBSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGF0
aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDI0MDQ3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKKyNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCiAjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCkBAIC00NCwyNyArNDUsMjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVk
IGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlIHR5cGUpOwordHlwZWRlZiB1bnNpZ25lZCAoKk5leHRP
ZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQpOwogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFk
ZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KIGNsYXNzIENhbGxpbmdDb252ZW50aW9u
IHsKIHB1YmxpYzoKICAgICBDYWxsaW5nQ29udmVudGlvbihWZWN0b3I8UmVnPiYmIGdwckFyZ3Ms
IFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJz
KQotICAgICAgICA6IG1fZ3ByQXJncyhncHJBcmdzKQotICAgICAgICAsIG1fZnByQXJncyhmcHJB
cmdzKQotICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhjYWxsZWVTYXZlUmVnaXN0ZXJz
KQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZNb3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnBy
QXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhX
VEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMpKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJndW1lbnRJbXBsKFZlY3RvcjxSZWc+IHJlZ0FyZ3Ms
IEIzOjpUeXBlIHR5cGUsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0
CisgICAgQjM6OlZhbHVlUmVwIG1hcnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+
JiByZWdBcmdzLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKGNvdW50IDwgcmVnQXJncy5zaXplKCkpCiAgICAgICAgICAgICByZXR1
cm4gQjM6OlZhbHVlUmVwOjpyZWcocmVnQXJnc1tjb3VudCsrXSk7CiAKICAgICAgICAgY291bnQr
KzsKICAgICAgICAgQjM6OlZhbHVlUmVwIHJlc3VsdCA9IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1
bWVudChzdGFja09mZnNldCk7Ci0gICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0
YWNrT2Zmc2V0LCB0eXBlKTsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3Rh
Y2tPZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNzMsMTAgKzc0
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEIz
OjpJbnQzMjoKICAgICAgICAgY2FzZSBCMzo6SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFy
c2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCB0eXBlLCBncEFyZ3VtZW50Q291bnQsIHN0YWNr
T2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFy
Z3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwogICAgICAgICBjYXNlIEIzOjpGbG9h
dDoKICAgICAgICAgY2FzZSBCMzo6RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxs
QXJndW1lbnRJbXBsKG1fZnByQXJncywgdHlwZSwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNl
dCk7CisgICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBm
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAgICAgY2FzZSBCMzo6Vm9pZDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xODksMTkgKzE5MCwxNDQgQEAgcHVibGlj
OgogICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVyU2F2ZVJlZ2lzdGVyczsKIH07CiAKLWlu
bGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpU
eXBlKQordGVtcGxhdGU8dW5zaWduZWQgaGVhZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZz
ZXQ+CitjbGFzcyBDYWxsaW5nQ29udmVudGlvbkFpciB7CitwdWJsaWM6CisgICAgQ2FsbGluZ0Nv
bnZlbnRpb25BaXIoVmVjdG9yPFJlZz4mJiBncHJBcmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3Ms
IFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICAgICAgOiBtX2dwckFyZ3Mo
V1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBtX2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkK
KyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0
ZXJzKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHNjcmF0Y2ggPSBSZWdpc3RlclNldDo6
YWxsR1BScygpOworICAgICAgICBzY3JhdGNoLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6Om1hY3JvU2Ny
YXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0Ojpy
ZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgICAgICBzY3JhdGNoLmV4Y2x1ZGUoUmVn
aXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2dw
ckFyZ3MpCisgICAgICAgICAgICBzY3JhdGNoLmNsZWFyKHJlZyk7CisgICAgICAgIGZvciAoUmVn
IHJlZyA6IG1fY2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIHNjcmF0Y2guY2xlYXIo
cmVnKTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogc2NyYXRjaCkKKyAgICAgICAgICAgIG1fc2Ny
YXRjaEdQUnMuYXBwZW5kKHJlZyk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc2NyYXRjaEdQ
UnMuc2l6ZSgpID49IDIpOworICAgIH0KKworICAgIEdQUlJlZyBwcm9sb2d1ZVNjcmF0Y2goc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc2NyYXRjaEdQUnNbaV0uZ3ByKCk7IH0KKworcHJpdmF0
ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVnRnVuYywgdHlwZW5hbWUgU3RhY2tGdW5jPgor
ICAgIHZvaWQgbWFyc2hhbGxBcmd1bWVudEltcGwoY29uc3QgVmVjdG9yPFJlZz4mIHJlZ0FyZ3Ms
IHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1
bmMsIGNvbnN0IFN0YWNrRnVuYyYgc3RhY2tGdW5jKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGNvdW50IDwgcmVnQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJlZ0Z1bmMocmVnQXJnc1tj
b3VudCsrXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb3Vu
dCsrOworICAgICAgICBzdGFja0Z1bmMoc3RhY2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNl
dCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0YWNrRnVuYz4KKyAgICB2b2lkIG1hcnNoYWxsQXJn
dW1lbnQoVHlwZSB0eXBlLCBzaXplX3QmIGdwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBmcEFyZ3Vt
ZW50Q291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQsIGNvbnN0IFJlZ0Z1bmMmIHJlZ0Z1bmMsIGNv
bnN0IFN0YWNrRnVuYyYgc3RhY2tGdW5jKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoK
KyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwgcmVnRnVuYywgc3RhY2tGdW5jKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAg
ICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwg
c3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVy
U2l6ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFkZXJTaXplOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgbG9hZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHNp
emVfdCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBBcmd1bWVudENvdW50
ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6ZTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkg
eworICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudChzaWduYXR1cmUuYXJndW1lbnQoaSksIGdw
QXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwKKyAgICAgICAgICAg
ICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihCMzo6QWly
OjpUbXAocmVnKSwgaSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBbJl0g
KHNpemVfdCBzdGFja09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKEIzOjpB
aXI6OkFyZzo6YWRkcihCMzo6QWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBz
dGFja09mZnNldCksIGkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gSXQncyBleHBlY3RlZCB0aGF0IHRoZSBwYWNocG9pbnRGdW5jdG9yIHNldHMgdGhl
IGdlbmVyYXRvciBmb3IgdGhlIGNhbGwgb3BlcmF0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBzZXR1cENhbGwoQjM6OkFpcjo6Q29kZSYgY29kZSwgVHlwZSBy
ZXR1cm5UeXBlLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50LCBjb25zdCBWZWN0b3I8
QjM6OkFpcjo6VG1wPiYgYXJncywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7
CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3QgZnBB
cmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVyU2l6
ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKworICAgICAgICBmb3IgKGF1dG8gdG1wIDog
YXJncykgeworICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudCh0bXAuaXNHUCgpID8gVHlwZTo6
STY0IDogVHlwZTo6RjY0LCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQsCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0b3IodG1wLCBCMzo6VmFsdWVSZXA6OnJlZyhyZWcpKTsKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIFsmXSAoc2l6ZV90IHN0YWNrT2Zmc2V0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0b3IodG1wLCBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoc3Rh
Y2tPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGNv
ZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RhY2tPZmZzZXQpKTsKKworICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVn
aXN0ZXJzRm9ySlNDYWxsKCkpOworCisgICAgICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAg
ICAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+cmVzdWx0Q29uc3RyYWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEZQUkluZm86OnJldHVyblZh
bHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25z
dHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgVmVjdG9y
PFJlZz4gbV9ncHJBcmdzOworICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZnByQXJnczsKKyAgICBW
ZWN0b3I8UmVnPiBtX3NjcmF0Y2hHUFJzOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVl
U2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3Rl
cnM7Cit9OworCitpbmxpbmUgdW5zaWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50
T2Zmc2V0KQogewogICAgIHJldHVybiBjdXJyZW50T2Zmc2V0ICsgc2l6ZW9mKFJlZ2lzdGVyKTsK
IH0KIAogY29uc3RleHByIHVuc2lnbmVkIGpzY0hlYWRlclNpemUgPSBFeGVjU3RhdGU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rlcik7Ci10eXBlZGVmIENhbGxpbmdDb252
ZW50aW9uPGpzY0hlYWRlclNpemUsIG5leHRKU0NPZmZzZXQ+IEpTQ0NhbGxpbmdDb252ZW50aW9u
OwotCi10eXBlZGVmIEpTQ0NhbGxpbmdDb252ZW50aW9uIFdhc21DYWxsaW5nQ29udmVudGlvbjsK
IAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRpb24gPSBDYWxsaW5nQ29udmVudGlvbjxqc2NIZWFk
ZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3VzaW5nIFdhc21DYWxsaW5nQ29udmVudGlvbiA9IEpT
Q0NhbGxpbmdDb252ZW50aW9uOwogY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzY0NhbGxp
bmdDb252ZW50aW9uKCk7CiBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DYWxsaW5n
Q29udmVudGlvbigpOwogCit1c2luZyBKU0NDYWxsaW5nQ29udmVudGlvbkFpciA9IENhbGxpbmdD
b252ZW50aW9uQWlyPGpzY0hlYWRlclNpemUsIG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNh
bGxpbmdDb252ZW50aW9uQWlyID0gSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXI7Citjb25zdCBKU0ND
YWxsaW5nQ29udmVudGlvbkFpciYganNjQ2FsbGluZ0NvbnZlbnRpb25BaXIoKTsKK2NvbnN0IFdh
c21DYWxsaW5nQ29udmVudGlvbkFpciYgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCk7CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360498</attachid>
            <date>2019-01-29 14:05:24 -0800</date>
            <delta_ts>2019-01-29 17:51:54 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>162747</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNDc3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNjMzLDkgKzYzMyw5IEBAIGNsYXNzIERl
ZmF1bHRCZW5jaG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIHByaW50KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVy
KHRoaXMuZmlyc3RJdGVyYXRpb24pLCAibXMiKTsKLSAgICAgICAgcHJpbnQoIiAgICBXb3JzdCBD
YXNlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy53b3JzdDQpLCAibXMiKTsKLSAgICAgICAgcHJp
bnQoIiAgICBBdmVyYWdlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSwgIm1zIik7
CisgICAgICAgIHByaW50KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuZmly
c3RJdGVyYXRpb24pKTsKKyAgICAgICAgcHJpbnQoIiAgICBXb3JzdCBDYXNlOiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy53b3JzdDQpKTsKKyAgICAgICAgcHJpbnQoIiAgICBBdmVyYWdlOiIsIHVp
RnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7CiAgICAgICAgIHByaW50KCIgICAgU2NvcmU6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRp
b24pIHsKICAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKQEAgLTcyNyw4ICs3MjcsOCBAQCBj
bGFzcyBXU0xCZW5jaG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsgewogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgcHJpbnQoIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51
bWJlcih0aGlzLnN0ZGxpYiksICJtcyIpOwotICAgICAgICBwcmludCgiICAgIFRlc3RzOiIsIHVp
RnJpZW5kbHlOdW1iZXIodGhpcy5tYWluUnVuKSwgIm1zIik7CisgICAgICAgIHByaW50KCIgICAg
U3RkbGliOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGRsaWIpKTsKKyAgICAgICAgcHJpbnQo
IiAgICBUZXN0czoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMubWFpblJ1bikpOwogICAgICAgICBw
cmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAgICAg
ICBpZiAoUkFNaWZpY2F0aW9uKSB7CiAgICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9v
dHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CkBAIC04
ODMsOCArODgzLDggQEAgY2xhc3MgV2FzbUJlbmNobWFyayBleHRlbmRzIEJlbmNobWFyayB7CiAg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNjb3JlSUQpLmlubmVySFRN
TCA9IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTdGFydHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5zdGFydHVwVGltZSksICJtcyIpOwotICAgICAgICBwcmludCgiICAgIFJ1biB0aW1lOiIs
IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5ydW5UaW1lKSwgIm1zIik7CisgICAgICAgIHByaW50KCIg
ICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3RhcnR1cFRpbWUpKTsKKyAgICAg
ICAgcHJpbnQoIiAgICBSdW4gdGltZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMucnVuVGltZSkp
OwogICAgICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7CiAgICAgICAgICAgICBwcmludCgiICAgIEN1
cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50
KSk7CiAgICAgICAgICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CkBAIC0xNTM4LDcgKzE1MzgsNyBAQCBsZXQgcnVu
U2VhTW9uc3RlciA9IHRydWU7CiBsZXQgcnVuQ29kZUxvYWQgPSB0cnVlOwogbGV0IHJ1bldhc20g
PSB0cnVlOwogCi1pZiAoZmFsc2UpIHsKK2lmICh0cnVlKSB7CiAgICAgcnVuT2N0YW5lID0gZmFs
c2U7CiAgICAgcnVuQVJFUyA9IGZhbHNlOwogICAgIHJ1bldTTCA9IGZhbHNlOwpAQCAtMTU1MCw3
ICsxNTUwLDcgQEAgaWYgKGZhbHNlKSB7CiAgICAgcnVuV29ya2VyVGVzdHMgPSBmYWxzZTsKICAg
ICBydW5TZWFNb25zdGVyID0gZmFsc2U7CiAgICAgcnVuQ29kZUxvYWQgPSBmYWxzZTsKLSAgICBy
dW5XYXNtID0gZmFsc2U7CisgICAgcnVuV2FzbSA9IHRydWU7CiB9CiAKIGlmICh0eXBlb2YgdGVz
dExpc3QgIT09ICJ1bmRlZmluZWQiKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg2NSw2ICs4
NjUsOCBAQAogCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3OEY4
RDFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI2NzhGOTExQTA0MTc3QzAwNkEz
MDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyNjc4RjkwMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxv
d1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTI2QUM0QjcxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNkFDNEI1MUU5NzdDNUQw
MDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21BaXJJ
UkdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCAq
LzsgfTsKKwkJNTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdBREEy
MUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovOyB9OwogCQk1MkIzMTBG
QjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBGQTE5NzRBRTYxMDA4
MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8q
IFR5cGVMb2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkMw
NjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBS
dW50aW1lVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0zMzQwLDYgKzMzNDIsOCBAQAogCQk1MjZBQzRCNDFFOTc3QzVEMDAzNTAwRTEgLyog
V2FzbUNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2QUM0QjUx
RTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1Mjc3NzNERDFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVudGltZVR5cGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBX
YXNtQWlySVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUFpcklSR2VuZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAv
KiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMxMEZDMTk3
NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJCMzEwRkUxOTc1QjQyNDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVMb2NhdGlvbkNhY2hlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MDksNiArNjQxMyw4IEBACiAJCQkJQUQyRkNCOEExREI1
ODQwMDAwQjNFNzM2IC8qIGpzICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBX
YXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8q
IFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCisJCQkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8q
IFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi8sCisJCQkJNTI4NDdBREEyMUZGQjg2MzAwNjFBOURC
IC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovLAogCQkJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5
RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8sCiAJCQkJNTNDQTczMDgxRUE1MzNEODAwNzYwNDlEIC8q
IFdhc21CQlFQbGFuLmggKi8sCiAJCQkJNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2IC8qIFdhc21C
QlFQbGFuSW5saW5lcy5oICovLApAQCAtODQ5OSw2ICs4NTA1LDcgQEAKIAkJCQk0MzZFNTQ1MzFD
NDY4RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzE5REEwNDFDMUJFNDBEMDAxRDI2MEIgLyogQjNMb3dlck1hY3Jvc0Fm
dGVyT3B0aW1pemF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTI4NDdBREMyMUZGQjg2OTAw
NjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDNBQjI2QzYxQzFBNTM1OTAwRDgyQUU2IC8qIEIzTWF0aEV4dHJhcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTA0NTMsNiArMTA0NjAsNyBAQAogCQkJCTUzNkIzMTlBMUY3MzVFNzgwMDM3
RkMzMyAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTVG
MUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MzZCMzE5QjFGNzM1RTc4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTItbW0ubW0gaW4gU291
cmNlcyAqLywKKwkJCQk1Mjg0N0FEQjIxRkZCODY2MDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTU3MUY3MUM1OTkwMDM3RkMzMyAvKiBV
bmlmaWVkU291cmNlMi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzBBNjZCOTFGQTNFNzhCMDAy
NkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1
ODFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTMuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24g
MjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzNjYsOCArMzM2Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBU
bXAgcmV0dXJuVmFsdWVGUFIgPSBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwogICAgICAg
ICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIFZvaWQ6Ci0g
ICAgICAgICAgICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIGZvciBhIHZvaWQgdmFsdWUgdG8gYmUg
dXNlZCBhcyBhIGNoaWxkLiBJZiB3ZSBkaWQgd2FudCB0byBoYXZlIGEKLSAgICAgICAgICAgICAg
ICAvLyB2b2lkIHJldHVybiwgd2UnZCBpbnRyb2R1Y2UgYSBkaWZmZXJlbnQgb3Bjb2RlLCBsaWtl
IFJldHVyblZvaWQuCisgICAgICAgICAgICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIGZvciBhIHZv
aWQgdmFsdWUgdG8gYmUgdXNlZCBhcyBhIGNoaWxkLiBXZSB1c2UgUmV0Vm9pZAorICAgICAgICAg
ICAgICAgIC8vIGZvciB2b2lkIHJldHVybnMuCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw2ICsyNDAsOSBA
QCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAorICAgIGlmICghdmFsdWUpIC8vIE9PUFMKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKICAgICByZXR1cm4gYXJnLmNhblJlcHJlc2VudCh2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAyNDA0
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVnaXN0ZXJTZXQg
ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0JikgZmluYWw7CiAgICAgUmVnaXN0ZXJT
ZXQgZXh0cmFDbG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogCi0gICAgLy8gTm90ZSB0
aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBE
dW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkgc29tZQorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMg
bm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2Ug
aGF2ZSBtYW55CiAgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgogICAgIHZv
aWQgZm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVu
c2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5NywxMSBAQCBD
b2RlOjp+Q29kZSgpCiB7CiB9CiAKK3ZvaWQgQ29kZTo6ZW1pdERlZmF1bHRQcm9sb2d1ZShDQ2Fs
bEhlbHBlcnMmIGppdCkKK3sKKyAgICBkZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3Ioaml0LCAqdGhp
cyk7Cit9CisKIHZvaWQgQ29kZTo6c2V0UmVnc0luUHJpb3JpdHlPcmRlcihCYW5rIGJhbmssIGNv
bnN0IFZlY3RvcjxSZWc+JiByZWdzKQogewogICAgIHJlZ3NJblByaW9yaXR5T3JkZXJJbXBsKGJh
bmspID0gcmVnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShy
ZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDYgKzMzNSw4IEBAIHB1YmxpYzoKICAgICBSZWdpc3Rl
clNldCBwaW5uZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3Bpbm5lZFJlZ3M7IH0KICAg
ICAKICAgICBXZWFrUmFuZG9tJiB3ZWFrUmFuZG9tKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tOyB9
CisKKyAgICB2b2lkIGVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJik7CiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyA6OkpTQzo6QjM6OlByb2NlZHVyZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMjQwNDc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBjbGFzcyBDb2RlOwogCiBjbGFzcyBUbXAgewogcHVibGljOgotICAgIFRtcCgp
CisgICAgY29uc3RleHByIFRtcCgpCiAgICAgICAgIDogbV92YWx1ZSgwKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0MzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUu
aCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgi
CisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNsdWRl
ICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIz
UGF0Y2hwb2ludFNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJX
YXNtQ29udGV4dElubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2lu
Y2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgor
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtT01HUGxhbi5oIgorI2luY2x1
ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5o
IgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit1c2luZyBuYW1lc3BhY2UgQjM6OkFpcjsKKwor
c3RydWN0IENvbnN0cmFpbmVkVG1wIHsKKyAgICBDb25zdHJhaW5lZFRtcChUbXAgdG1wKQorICAg
ICAgICA6IENvbnN0cmFpbmVkVG1wKHRtcCwgdG1wLmlzUmVnKCkgPyBCMzo6VmFsdWVSZXA6OnJl
Zyh0bXAucmVnKCkpIDogQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpCisgICAgeyB9CisKKyAg
ICBDb25zdHJhaW5lZFRtcChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKQorICAgICAgICA6IHRt
cCh0bXApCisgICAgICAgICwgcmVwKHJlcCkKKyAgICB7CisgICAgfQorCisgICAgVG1wIHRtcDsK
KyAgICBCMzo6VmFsdWVSZXAgcmVwOworfTsKKworY2xhc3MgQWlySVJHZW5lcmF0b3IgeworcHVi
bGljOgorICAgIHN0cnVjdCBDb250cm9sRGF0YSB7CisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpP
cmlnaW4gb3JpZ2luLCBUeXBlIHJldHVyblR5cGUsIFRtcCByZXN1bHRUbXAsIEJsb2NrVHlwZSB0
eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxs
cHRyKQorICAgICAgICAgICAgOiBibG9ja1R5cGUodHlwZSkKKyAgICAgICAgICAgICwgY29udGlu
dWF0aW9uKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgICwgc3BlY2lhbChzcGVjaWFsKQorICAg
ICAgICAgICAgLCByZXR1cm5UeXBlKHJldHVyblR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFVOVVNFRF9QQVJBTShvcmlnaW4pOyAvLyBPT1BTCisgICAgICAgICAgICBpZiAocmVzdWx0VG1w
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXN1bHRUbXApOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKHJldHVyblR5cGUgPT0gVHlwZTo6Vm9pZCk7Cisg
ICAgICAgIH0KKworICAgICAgICBDb250cm9sRGF0YSgpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6
OklmOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiSWY6ICAgICAgICIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OkJsb2NrOgorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiQmxvY2s6ICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6Okxvb3A6CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCJMb29wOiAgICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEJsb2NrVHlwZTo6VG9wTGV2ZWw6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJU
b3BMZXZlbDogIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBvdXQucHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3Bl
Y2lhbDogIik7CisgICAgICAgICAgICBpZiAoc3BlY2lhbCkKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoKnNwZWNpYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5w
cmludCgiTm9uZSIpOworICAgICAgICB9CisKKyAgICAgICAgQmxvY2tUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBibG9ja1R5cGU7IH0KKworICAgICAgICBUeXBlIHNpZ25hdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIHJldHVyblR5cGU7IH0KKworICAgICAgICBib29sIGhhc05vblZvaWRTaWduYXR1
cmUoKSBjb25zdCB7IHJldHVybiByZXN1bHQuc2l6ZSgpOyB9CisKKyAgICAgICAgQmFzaWNCbG9j
ayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlw
ZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY2lhbDsK
KyAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb247CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGNvbnZlcnRJZlRvQmxvY2soKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodHlw
ZSgpID09IEJsb2NrVHlwZTo6SWYpOworICAgICAgICAgICAgYmxvY2tUeXBlID0gQmxvY2tUeXBl
OjpCbG9jazsKKyAgICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRyOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gT09QUzogV2hhdCBpcyB0aGlzPworICAgICAgICB1c2luZyBSZXN1bHRMaXN0ID0g
VmVjdG9yPFRtcCwgMT47IC8vIFZhbHVlIG11c3QgYmUgYSBQaGkKKworICAgICAgICBSZXN1bHRM
aXN0IHJlc3VsdEZvckJyYW5jaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0
eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRM
aXN0KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgQWlySVJHZW5lcmF0b3I7CisgICAgICAgIEJsb2Nr
VHlwZSBibG9ja1R5cGU7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKKyAgICAg
ICAgQmFzaWNCbG9jayogc3BlY2lhbDsKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHQ7CisgICAg
ICAgIFR5cGUgcmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUg
PSBUbXA7CisgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKKyAgICB1c2luZyBF
eHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT47CisgICAgdXNpbmcgUmVz
dWx0TGlzdCA9IENvbnRyb2xEYXRhOjpSZXN1bHRMaXN0OworICAgIHVzaW5nIENvbnRyb2xFbnRy
eSA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OworCisgICAg
c3RhdGljIGNvbnN0IEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbjsKKworICAgIHVzaW5n
IEVycm9yVHlwZSA9IFN0cmluZzsKKyAgICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBl
Y3RlZDxFcnJvclR5cGU+OworICAgIHVzaW5nIFJlc3VsdCA9IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPjsKKyAgICB1c2luZyBQYXJ0aWFsUmVz
dWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5h
bWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gV2FzbVBhcnNlci5o
LgorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJs
eS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7Cisg
ICAgfQorCisjZGVmaW5lIFdBU01fQ09NUElMRV9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7
IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCisgICAg
fSB3aGlsZSAoMCkKKworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1
cmUmKTsKKworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50
cyhjb25zdCBTaWduYXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CisgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3Rh
bnQoVHlwZSwgdWludDY0X3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KEJhc2lj
QmxvY2sqLCBUeXBlLCB1aW50NjRfdCk7CisKKyAgICAvLyBMb2NhbHMKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0
TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAgIC8vIEds
b2JhbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRHbG9iYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUgdmFsdWUpOworCisgICAgLy8gTWVtb3J5CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRh
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAg
Ly8gQmFzaWMgb3BlcmF0b3JzCisgICAgdGVtcGxhdGU8T3BUeXBlPgorICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgdGVtcGxhdGU8T3BUeXBlPgorICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHBy
ZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKKworICAgIC8vIENvbnRyb2wgZmxvdworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9s
RGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVyZSk7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJl
c3Npb25MaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxz
ZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKKworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3Qg
VmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0
cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lv
bkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKKworICAgIC8vIENhbGxz
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBj
YWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CisKKyAgICBQYXJ0aWFsUmVz
dWx0IGFkZFNoaWZ0KEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJl
c3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IGFkZEludGVnZXJTdWIoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4
cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJl
c3VsdCBhZGRGbG9hdGluZ1BvaW50QWJzKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxv
YXRpbmdQb2ludEJpbk9wKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHBy
ZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworCisgICAgdm9pZCBkdW1w
KGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Np
b25MaXN0KiBleHByZXNzaW9uU3RhY2spOworICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFy
c2VyPEFpcklSR2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OworCitw
cml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2YWxpZGF0ZUluc3QoSW5zdCYgaW5zdCkK
KyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBpZiAo
IWluc3QuaXNWYWxpZEZvcm0oKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbihpbnN0KTsK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChC
YXNpY0Jsb2NrKiBibG9jaywgS2luZCBraW5kLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisg
ICAgeworICAgICAgICAvLyBPT1BTOiBBZGQgb3JpZ2luCisgICAgICAgIGF1dG8mIGluc3QgPSBi
bG9jay0+YXBwZW5kKGtpbmQsIG51bGxwdHIsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pOworICAgICAgICB2YWxpZGF0ZUluc3QoaW5zdCk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEtpbmQga2luZCwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXBwZW5kKG1fY3VycmVu
dEJsb2NrLCBraW5kLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBl
bmRFZmZlY3RmdWwoQjM6OkFpcjo6T3Bjb2RlIG9wLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CisgICAgeworICAgICAgICBLaW5kIGtpbmQgPSBvcDsKKyAgICAgICAga2luZC5lZmZlY3RzID0g
dHJ1ZTsKKyAgICAgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBraW5kLCBzdGQ6OmZvcndhcmQ8
QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBUbXAgdG1wKEIzOjpCYW5r
IGJhbmspIHsgcmV0dXJuIG1fY29kZS5uZXdUbXAoYmFuayk7IH0KKyAgICBUbXAgZ3ByKCkgeyBy
ZXR1cm4gdG1wKEIzOjpHUCk7IH0KKyAgICBUbXAgZnByKCkgeyByZXR1cm4gdG1wKEIzOjpGUCk7
IH0KKyAgICBUbXAgdG1wRm9yVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0
OgorICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAg
ICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICByZXR1cm4gZnByKCk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBhZGRQYXRjaHBvaW50KEIzOjpUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9wcm9jLmFkZDxCMzo6UGF0Y2hwb2ludFZhbHVlPih0eXBl
LCBCMzo6T3JpZ2luKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5Bcmdz
PgorICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRt
cCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAgICB7CisgICAgICAgIGVtaXRQYXRjaHBvaW50
KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgcmVzdWx0LCBzdGQ6OmZvcndhcmQ8QXJncz4odGhlQXJn
cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZv
aWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRW
YWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAgICB7CisgICAgICAg
IGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBhdGNoLCByZXN1bHQsIFZlY3RvcjxDb25zdHJh
aW5lZFRtcCwgc2l6ZW9mLi4uKEFyZ3MpPjo6ZnJvbSh0aGVBcmdzLi4uKSk7CisgICAgfQorCisg
ICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGVtaXRQYXRjaHBv
aW50KGJhc2ljQmxvY2ssIHBhdGNoLCByZXN1bHQsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4oKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHNpemVfdCBpbmxpbmVTaXplPgorICAgIHZvaWQgZW1p
dFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSog
cGF0Y2gsIFRtcCByZXN1bHQsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBh
cmdzKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFsKQorICAgICAgICAg
ICAgbV9wYXRjaHBvaW50U3BlY2lhbCA9IHN0YXRpY19jYXN0PEIzOjpQYXRjaHBvaW50U3BlY2lh
bCo+KG1fY29kZS5hZGRTcGVjaWFsKHN0ZDo6bWFrZV91bmlxdWU8QjM6OlBhdGNocG9pbnRTcGVj
aWFsPigpKSk7CisKKyAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBwYXRjaCwgQXJnOjpzcGVjaWFs
KG1fcGF0Y2hwb2ludFNwZWNpYWwpKTsKKyAgICAgICAgSW5zdCByZXN1bHRNb3Y7CisgICAgICAg
IGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChwYXRjaC0+dHlwZSgpICE9IEIzOjpW
b2lkKTsKKyAgICAgICAgICAgIHN3aXRjaCAocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQua2luZCgp
KSB7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAg
ICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkp
KTsKKyAgICAgICAgICAgICAgICByZXN1bHRNb3YgPSBJbnN0KHJlc3VsdC5pc0dQKCkgPyBNb3Zl
IDogTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygp
KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQjM6
OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVu
ZChyZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChwYXRjaC0+dHlwZSgpID09
IEIzOjpWb2lkKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQ29uc3RyYWluZWRUbXAmIHRtcCA6
IGFyZ3MpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IFVnaCwgdGhpcyBpcyBzdXBlciBjcmFwcHkg
dG8ganVzdCB1c2UgbnVsbHB0ciBmb3IgQjM6OlZhbHVlKiBoZXJlLgorICAgICAgICAgICAgLy8g
SSB0aGluayB0aGlzIHdpbGwganVzdCB3b3JrLCBidXQgb3VyIGFsdGVybmF0aXZlIG9wdGlvbnMg
aXMgdG8gYWJzdHJhY3QKKyAgICAgICAgICAgIC8vIG9yIHJlaW52ZW50IHBhcnQgb2YgUGF0Y2hw
b2ludFNwZWNpYWwuCisgICAgICAgICAgICBCMzo6VmFsdWUqIGR1bW15VmFsdWUgPSBtX3Byb2Mu
YWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCB0bXAudG1wLmlzR1AoKSA/IEIzOjpJbnQ2NCA6IEIz
OjpEb3VibGUsIDApOworICAgICAgICAgICAgcGF0Y2gtPmFwcGVuZChkdW1teVZhbHVlLCB0bXAu
cmVwKTsKKyAgICAgICAgICAgIHN3aXRjaCAodG1wLnJlcC5raW5kKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZCh0bXAudG1wKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBJ
IHRoaW5rIHdlIHdhbnQgdHlwZSBoZXJlIHRvIGRpc3Rpbmd1aXNoIGkzMi9pNjMgYW5kIGYzMi9m
NjQKKyAgICAgICAgICAgICAgICBwYXRjaC0+ZWFybHlDbG9iYmVyZWQoKS5jbGVhcih0bXAucmVw
LnJlZygpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQoYmFzaWNCbG9jaywgdG1wLnRtcC5pc0dQ
KCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgdG1wLnRtcCwgdG1wLnJlcC5yZWcoKSk7CisgICAgICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChUbXAodG1wLnJlcC5yZWcoKSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlN0YWNrQXJndW1l
bnQ6IHsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBJIHRoaW5rIHdlIHdhbnQgdHlwZSBoZXJl
IHRvIGRpc3Rpbmd1aXNoIGkzMi9pNjMgYW5kIGYzMi9mNjQKKyAgICAgICAgICAgICAgICBhdXRv
IGFyZyA9IEFyZzo6Y2FsbEFyZyh0bXAucmVwLm9mZnNldEZyb21TUCgpKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQoYmFzaWNCbG9jaywgdG1wLnRtcC5pc0dQKCkgPyBNb3ZlIDogTW92ZURvdWJs
ZSwgdG1wLnRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGFyZyk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF0Y2gtPnJlc3VsdENvbnN0cmFp
bnQuaXNSZWcoKSkKKyAgICAgICAgICAgIHBhdGNoLT5sYXRlQ2xvYmJlcmVkKCkuY2xlYXIocGF0
Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBw
YXRjaC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAgaW5zdC5hcmdz
LmFwcGVuZChncHIoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNoLT5udW1GUFNj
cmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGZwcigp
KTsKKworICAgICAgICB2YWxpZGF0ZUluc3QoaW5zdCk7CisgICAgICAgIGJhc2ljQmxvY2stPmFw
cGVuZChXVEZNb3ZlKGluc3QpKTsKKyAgICAgICAgaWYgKHJlc3VsdE1vdikgeworICAgICAgICAg
ICAgdmFsaWRhdGVJbnN0KHJlc3VsdE1vdik7CisgICAgICAgICAgICBiYXNpY0Jsb2NrLT5hcHBl
bmQoV1RGTW92ZShyZXN1bHRNb3YpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCcmFuY2gsIHR5cGVuYW1lIEdlbmVyYXRvcj4KKyAgICB2b2lkIGVtaXRDaGVj
ayhjb25zdCBCcmFuY2gmIGVtaXRCcmFuY2gsIGNvbnN0IEdlbmVyYXRvciYgZ2VuZXJhdG9yKQor
ICAgIHsKKyAgICAgICAgLy8gV2UgZmFpbCBhbG9uZyB0aGUgInRydXRoeSIgZWRnZSBvZiAnYnJh
bmNoJworCisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgICAgICBCYXNpY0Jsb2NrKiBmYWlsZWQgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAg
ICAgICAgCisgICAgICAgIGVtaXRCcmFuY2goKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNl
dFN1Y2Nlc3NvcnMoZmFpbGVkLCBjb250aW51YXRpb24pOworCisgICAgICAgIGF1dG8qIGZhaWxl
ZFBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgZmFpbGVkUGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKGdlbmVyYXRvcik7CisgICAgICAgIGVtaXRQYXRjaHBvaW50
KGZhaWxlZCwgZmFpbGVkUGF0Y2hwb2ludCwgVG1wKCkpOworICAgICAgICBhcHBlbmQoZmFpbGVk
LCBPb3BzKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgLi4uQXJncz4KKyAgICB2
b2lkIGVtaXRDQ2FsbChGdW5jIGZ1bmMsIFRtcCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICB7
CisgICAgICAgIGVtaXRDQ2FsbChtX2N1cnJlbnRCbG9jaywgZnVuYywgcmVzdWx0LCBzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
YywgdHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRDQ2FsbChCYXNpY0Jsb2NrKiBibG9j
aywgRnVuYyBmdW5jLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAg
ICBCMzo6VHlwZSByZXN1bHRUeXBlID0gQjM6OlZvaWQ7CisgICAgICAgIGlmIChyZXN1bHQpCisg
ICAgICAgICAgICByZXN1bHRUeXBlID0gcmVzdWx0LmlzR1AoKSA/IEIzOjpJbnQ2NCA6IEIzOjpE
b3VibGU7CisKKyAgICAgICAgYXV0byBtYWtlRHVtbXlWYWx1ZSA9IFsmXSAoVG1wIHRtcCkgewor
ICAgICAgICAgICAgaWYgKHRtcC5pc0dQKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJv
Yy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgMCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkRvdWJsZSwgMCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgQjM6OlZhbHVlKiBkdW1teUZ1bmMgPSBtX3Byb2MuYWRkQ29u
c3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6SW50NjQsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZ1
bmMpKTsKKyAgICAgICAgQjM6OlZhbHVlKiBvcmlnaW4gPSBtX3Byb2MuYWRkPEIzOjpDQ2FsbFZh
bHVlPihyZXN1bHRUeXBlLCBCMzo6T3JpZ2luKCksIEIzOjpFZmZlY3RzOjpub25lKCksIGR1bW15
RnVuYywgbWFrZUR1bW15VmFsdWUodGhlQXJncykuLi4pOworCisgICAgICAgIEluc3QgaW5zdChD
Q2FsbCwgb3JpZ2luKTsKKworICAgICAgICBUbXAgY2FsbGVlID0gZ3ByKCk7CisgICAgICAgIGFw
cGVuZChNb3ZlLCBBcmc6OmltbVB0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMsIEIzQ0Nh
bGxQdHJUYWcpKSwgY2FsbGVlKTsKKyAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChjYWxsZWUpOwor
CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3Vs
dCk7CisKKyAgICAgICAgZm9yIChUbXAgdG1wIDogVmVjdG9yPFRtcCwgc2l6ZW9mLi4uKEFyZ3Mp
Pjo6ZnJvbSh0aGVBcmdzLi4uKSkKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKTsK
KworICAgICAgICBibG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgIH0KKworICAgIHN0
YXRpYyBCMzo6QWlyOjpPcGNvZGUgbW92ZU9wRm9yVmFsdWVUeXBlKFR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlMzI7CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAg
ICAgcmV0dXJuIE1vdmU7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgcmV0
dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICByZXR1
cm4gTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRUaHJv
d0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKKworICAgIHZvaWQgZW1p
dFRpZXJVcENoZWNrKHVpbnQzMl90IGRlY3JlbWVudENvdW50LCBCMzo6T3JpZ2luKTsKKworICAg
IEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOworICAgIEV4cHJl
c3Npb25UeXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
dWludDMyX3Qgb2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0
KTsKKworICAgIHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhw
cmVzc2lvblR5cGUmIHNvdXJjZSk7CisgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdExpc3QmIHN0YWNrKTsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgorICAgIHZvaWQgZW1pdENoZWNrc0Zv
ck1vZE9yRGl2KGJvb2wgaXNTaWduZWREaXYsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Np
b25UeXBlIHJpZ2h0KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgorICAgIHZv
aWQgZW1pdE1vZE9yRGl2KGJvb2wgaXNEaXYsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lv
blR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIGludDMyX3QgV0FSTl9V
TlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmLCB1aW50
MzJfdCk7CisKKyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sq
LCBUbXApOworICAgIGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVz
IH07CisgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBUbXAgaW5zdGFuY2UsIEJhc2lj
QmxvY2sqKTsKKworICAgIEIzOjpPcmlnaW4gb3JpZ2luKCk7IC8vIE9PUFM6IFdlIG5lZWQgdG8g
bWFrZSBhbiBBaXI6Ok9yaWdpbiBzaW5jZSB3ZSdyZSBub3QgZ2VuZXJhdGluZyBmcm9tIEIzIGNv
ZGUuCisKKyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVs
bHB0ciB9OworICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgY29uc3Qg
TWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIGNv
bnN0IENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9uTW9kZTo6
QkJRTW9kZSB9OworICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFY
IH07CisgICAgY29uc3QgVGllclVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9OworCisgICAg
QjM6OlByb2NlZHVyZSYgbV9wcm9jOworICAgIENvZGUmIG1fY29kZTsKKyAgICBCYXNpY0Jsb2Nr
KiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9j
ayB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFRtcCwgVHlwZT4+IG1fbG9jYWxz
OworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdo
b3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBHUFJSZWcgbV9tZW1v
cnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIg
eyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CisKKyAg
ICBUbXAgbV9pbnN0YW5jZVZhbHVlOyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0
byBlbnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCisg
ICAgYm9vbCBtX3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBUbXAgaW5zdGFuY2VW
YWx1ZSgpCisgICAgeworICAgICAgICBtX3VzZXNJbnN0YW5jZVZhbHVlID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIG1faW5zdGFuY2VWYWx1ZTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBtX21heE51
bUpTQ2FsbEFyZ3VtZW50cyB7IDAgfTsKKworICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCogbV9w
YXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKK307CisKK2NvbnN0IFRtcCBBaXJJUkdlbmVy
YXRvcjo6ZW1wdHlFeHByZXNzaW9uID0gVG1wIHsgfTsKKworLy8gTWVtb3J5IGFjY2Vzc2VzIGlu
IFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMgdGhleSBo
YXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK2ludDMyX3QgQWlySVJHZW5lcmF0b3I6
OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMyX3Qgb2Zm
c2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpIHsKKyAg
ICAgICAgVG1wIHByZXZpb3VzUHRyID0gcHRyOworICAgICAgICBwdHIgPSBncHIoKTsKKyAgICAg
ICAgVG1wIGNvbnN0YW50ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0lt
bShvZmZzZXQpLCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgY29uc3RhbnQsIHBy
ZXZpb3VzUHRyLCBwdHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG9m
ZnNldDsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFu
Y2UoQmFzaWNCbG9jayogYmxvY2ssIFRtcCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoQ29udGV4dDo6
dXNlRmFzdFRMUygpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50
KEIzOjpWb2lkKTsKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dElu
c3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBl
cnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1swXS5ncHIo
KSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2lu
dCwgVG1wKCksIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dEluc3RhbmNl
IHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQg
aW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZyBB
cmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVnaXN0ZXIu
CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIEIz
OjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVjdHMud3Jp
dGVzUGlubmVkID0gdHJ1ZTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9w
KCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7CisgICAg
R1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7
CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7CisgICAgICAgIGppdC5t
b3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICB9KTsKKyAg
ICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKK30K
KworQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBp
bGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUs
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4
Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQor
ICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY29tcGlsYXRp
b25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbklu
ZGV4KQorICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHByb2NlZHVyZSkKKyAg
ICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQorICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
cyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKK3sKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIG1fcm9vdEJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisKKyAgICAv
LyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUgaWYgdGhl
cmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxlciBmb3Ig
bm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIzCisgICAg
Y29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZv
OjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBv
aW50ZXI7CisgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBt
X3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyOworICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBtX2NvZGUu
cGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKworICAgIGlmIChtb2RlICE9
IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gcGlu
bmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25z
dCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0
ZXJzKQorICAgICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVy
KTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAgICBUaHVua3M6
OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOwor
CisgICAgaWYgKGluZm8ubWVtb3J5KSB7CisgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAg
ICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAvLyBNb3N0
IG1lbW9yeSBhY2Nlc3NlcyBpbiBzaWduYWxpbmcgbW9kZSBkb24ndCBkbyBhbiBleHBsaWNpdAor
ICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2UgdGhleSBjYW4gcmVseSBvbiBm
YXVsdCBoYW5kbGluZyB0byBkZXRlY3QKKyAgICAgICAgICAgIC8vIG91dC1vZi1ib3VuZHMgYWNj
ZXNzZXMuIEZhdWx0U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVkcyB0aGUKKyAgICAgICAg
ICAgIC8vIHRodW5rIHRvIGV4aXN0IHNvIHRoYXQgaXQgY2FuIGp1bXAgdG8gdGhhdCB0aHVuay4K
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93
RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQorICAgICAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY29kZS5z
ZXROdW1FbnRyeXBvaW50cygxKTsKKworICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2UgPSBDb250
ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNj
cmF0Y2goMSkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisKKyAgICBSZWY8QjM6OkFpcjo6
UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxC
Mzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgY29kZS5lbWl0RGVmYXVsdFByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICAgICAgICAg
IGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW2NvbXBpbGF0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY2Fs
bGVlR1BSLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgaml0LmVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAg
ICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3
YXNtRnJhbWVTaXplID0gbV9jb2RlLmZyYW1lU2l6ZSgpOworICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgbWluaW11bVBhcmVudENoZWNrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIDEwMjQpOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
ZXh0cmFGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCBzdGQ6Om1heDx1aW50MzJfdD4oCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxv
d3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hlY2tzIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgdGVybWlu
YWwgbm9kZXMgaW4gdGhlIGNhbGwKKyAgICAgICAgICAgICAgICAvLyB0cmVlLCAoZS5nIHRoZXkg
ZG9uJ3QgbWFrZSBhbnkgY2FsbHMpIGFuZCBoYXZlIGEgc21hbGwgZW5vdWdoIGZyYW1lIHNpemUu
IFRoaXMgd29ya3MgYnkKKyAgICAgICAgICAgICAgICAvLyBoYXZpbmcgYW55IHN1Y2ggdGVybWlu
YWwgbm9kZSBoYXZlIGl0cyBwYXJlbnQgY2FsbGVyIGluY2x1ZGUgc29tZSBleHRyYSBzaXplIGlu
IGl0cworICAgICAgICAgICAgICAgIC8vIG93biBjaGVjayBmb3IgaXQuIFRoZSBnb2FsIGhlcmUg
aXMgdHdvZm9sZDoKKyAgICAgICAgICAgICAgICAvLyAxLiBFbWl0IGxlc3MgY29kZS4KKyAgICAg
ICAgICAgICAgICAvLyAyLiBUcnkgdG8gc3BlZWQgdGhpbmdzIHVwIGJ5IHNraXBwaW5nIHN0YWNr
IGNoZWNrcy4KKyAgICAgICAgICAgICAgICBtaW5pbXVtUGFyZW50Q2hlY2tTaXplLAorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBpbiB0aGUg
V2FzbSAtPiBFbWJlZGRlciBjYWxsIElDIHN0dWIuIFNpbmNlIHRoZXNlIHdpbGwKKyAgICAgICAg
ICAgICAgICAvLyBzcGlsbCBhbGwgYXJndW1lbnRzIHRvIHRoZSBzdGFjaywgd2UgZW5zdXJlIHRo
YXQgYSBzdGFjayBjaGVjayBoZXJlIGNvdmVycyB0aGUKKyAgICAgICAgICAgICAgICAvLyBzdGFj
ayB0aGF0IHN1Y2ggYSBzdHViIHdvdWxkIHVzZS4KKyAgICAgICAgICAgICAgICAoQ2hlY2tlZDx1
aW50MzJfdD4obV9tYXhOdW1KU0NhbGxBcmd1bWVudHMpICogc2l6ZW9mKFJlZ2lzdGVyKSArIGpz
Y0NhbGxpbmdDb252ZW50aW9uKCkuaGVhZGVyU2l6ZUluQnl0ZXMoKSkudW5zYWZlR2V0KCkKKyAg
ICAgICAgICAgICkpOworICAgICAgICAgICAgY29uc3QgaW50MzJfdCBjaGVja1NpemUgPSBtX21h
a2VzQ2FsbHMgPyAod2FzbUZyYW1lU2l6ZSArIGV4dHJhRnJhbWVTaXplKS51bnNhZmVHZXQoKSA6
IHdhc21GcmFtZVNpemUudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBib29sIG5lZWRVbmRlcmZs
b3dDaGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9uczo6cmVz
ZXJ2ZWRab25lU2l6ZSgpOworICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hlY2sgPSBt
X21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tTaXplIHx8
IG5lZWRVbmRlcmZsb3dDaGVjazsKKworICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgbGVhZiBm
dW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXplIGlzIHdp
dGhpbgorICAgICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2FsbGVyIHdv
dWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVjay4KKyAgICAgICAgICAgIGlmIChuZWVkc092
ZXJmbG93Q2hlY2spIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKworICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNoZWNrU2l6
ZSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgaWYg
KFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCisgICAgICAgICAgICAgICAgICAgIG92ZXJm
bG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0Y2gsIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBw
ZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaCwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGNvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSkpOworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3ZlcmZsb3dd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5r
czo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUgaW5zdGFu
Y2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxw
ZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0
YW5jZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFdlIHNhaWQg
d2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJlY2F1c2Ug
aXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNhaWQgaXQg
aGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBpdCBmcm9t
IGdldHRpbmcgcmVtb3ZlZC4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisg
ICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2Vu
ZXJhdG9yKSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIG1f
aW5zdGFuY2VWYWx1ZSA9IGdwcigpOworICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRv
IG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCisgICAgICAgIGFwcGVuZChN
b3ZlLCBUbXAoY29udGV4dEluc3RhbmNlKSwgbV9pbnN0YW5jZVZhbHVlKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gVG1wKGNvbnRleHRJbnN0YW5jZSk7CisKKyAgICBB
U1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1
bWVudChpKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMy
OgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0geyBn
cHIoKSwgdHlwZSB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMy
OgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0geyBm
cHIoKSwgdHlwZSB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUs
IFsmXSAoY29uc3QgQXJnJiBhcmcsIHVuc2lnbmVkIGkpIHsKKyAgICAgICAgc3dpdGNoIChzaWdu
YXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAg
ICBhcHBlbmQoTW92ZTMyLCBhcmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBh
cmcsIG1fbG9jYWxzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6OkYzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIGFyZywgbV9sb2NhbHNb
aV0uZmlyc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0Ogor
ICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIGFyZywgbV9sb2NhbHNbaV0uZmlyc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBlbWl0VGll
clVwQ2hlY2soVGllclVwQ291bnQ6OmZ1bmN0aW9uRW50cnlEZWNyZW1lbnQoKSwgQjM6Ok9yaWdp
bigpKTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFs
U3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNv
bnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmxvY2ssIGluc3RhbmNl
KTsKKworICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdDo6WWVzKSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNr
IGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxJbnN0YW5j
ZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFja0xpbWl0KCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAi
Iik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFu
Y2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRTdGFja0xpbWl0KCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFRtcCB0ZW1w
ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgQXJnOjphZGRyKGluc3RhbmNl
VmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpKSwg
dGVtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgQXJnOjphZGRyKHRlbXApLCB0ZW1w
KTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCB0ZW1wLCBBcmc6OmFkZHIoaW5zdGFuY2VW
YWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICB9CisK
KyAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBw
aW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgIFJlZ2lzdGVy
U2V0IGNsb2JiZXJzOworICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9y
eVBvaW50ZXIpOworICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdp
c3RlcnMpCisgICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOworCisg
ICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAg
ICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIGVm
ZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpI
ZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsK
KyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVycyk7CisKKyAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BS
UmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKKyAg
ICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBBU1NF
UlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1l
cyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJz
IHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXpl
KCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRk
NjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAg
ICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAo
KSwgaW5zdGFuY2UpOworICAgIH0KK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFRocm93
RXhjZXB0aW9uKENDYWxsSGVscGVycyYgaml0LCBFeGNlcHRpb25UeXBlIHR5cGUpCit7CisgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHR5cGUpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBhdXRvIGp1bXBUb0V4Y2VwdGlv
blN0dWIgPSBqaXQuanVtcCgpOworCisgICAgaml0LmFkZExpbmtUYXNrKFtqdW1wVG9FeGNlcHRp
b25TdHViXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoanVtcFRvRXhjZXB0aW9uU3R1YiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+
KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSkpOworICAgIH0pOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRM
b2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
Q2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gY291
bnQ7CisgICAgdG90YWxCeXRlc0NoZWNrZWQgKz0gbV9sb2NhbHMuc2l6ZSgpOworICAgIHVpbnQz
Ml90IHRvdGFsQnl0ZXM7CisgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoKHRvdGFsQnl0ZXNDaGVj
a2VkLnNhZmVHZXQodG90YWxCeXRlcykgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgfHwg
IW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eSh0b3RhbEJ5dGVzKSwgImNhbid0IGFsbG9jYXRl
IG1lbW9yeSBmb3IgIiwgdG90YWxCeXRlcywgIiBsb2NhbHMiKTsKKworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6IHsKKyAgICAgICAg
ICAgIFRtcCBsb2NhbCA9IGdwcigpOworICAgICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBw
ZW5kKHsgbG9jYWwsIHR5cGUgfSk7CisgICAgICAgICAgICBhcHBlbmQoWG9yNjQsIGxvY2FsLCBs
b2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFR5cGU6
OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6IHsKKyAgICAgICAgICAgIFRtcCBsb2NhbCA9
IGZwcigpOworICAgICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHsgbG9jYWwsIHR5
cGUgfSk7CisgICAgICAgICAgICBUbXAgdGVtcCA9IGdwcigpOworICAgICAgICAgICAgLy8gSUVF
RSA3NTQgIjAiIGlzIGp1c3QgaW50MzIvNjQgemVyby4KKyAgICAgICAgICAgIGFwcGVuZChYb3I2
NCwgdGVtcCwgdGVtcCk7CisgICAgICAgICAgICBhcHBlbmQodHlwZSA9PSBUeXBlOjpGMzIgPyBN
b3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9Eb3VibGUsIHRlbXAsIGxvY2FsKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q29uc3RhbnQoVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkgLT4gRXhwcmVzc2lvblR5cGUKK3sK
KyAgICByZXR1cm4gYWRkQ29uc3RhbnQobV9jdXJyZW50QmxvY2ssIHR5cGUsIHZhbHVlKTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoQmFzaWNCbG9jayogYmxvY2ssIFR5
cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpIC0+IEV4cHJlc3Npb25UeXBlCit7CisgICAgVG1wIHJl
c3VsdDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICBjYXNl
IFR5cGU6Okk2NDoKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChibG9j
aywgTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDogeworICAgICAgICByZXN1bHQg
PSBmcHIoKTsKKyAgICAgICAgVG1wIHRtcCA9IGdwcigpOworICAgICAgICBhcHBlbmQoYmxvY2ss
IE1vdmUsIEFyZzo6YmlnSW1tKHZhbHVlKSwgdG1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCB0
eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwgdG1wLCBy
ZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9j
YWxzLnNpemUoKSA9PSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsgLy8gV2UgaGFuZGxlIGFy
Z3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3Qp
OworICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XS5maXJzdC5pc0dQKCkgPyBncHIoKSA6IGZw
cigpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnNlY29u
ZCksIG1fbG9jYWxzW2luZGV4XS5maXJzdCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJsZSA9IGFkZFBhdGNocG9pbnQo
QjM6OlZvaWQpOworICAgIHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6VW5yZWFjaGFi
bGUpOworICAgIH0pOworICAgIHVucmVhY2hhYmxlLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsK
KyAgICBlbWl0UGF0Y2hwb2ludCh1bnJlYWNoYWJsZSwgVG1wKCkpOworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUg
ZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBp
bnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAodm9p
ZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGludDMyX3QgZGVsdGEpIC0+IGludDMy
X3QgeworICAgICAgICBpbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKwor
ICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAg
IGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5KCktPmdyb3coUGFnZUNvdW50KGRlbHRhKSk7
CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3Io
KSkgeworICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVs
dGE6CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93
U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNl
ZWRNYXhpbXVtOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRP
Zk1lbW9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFnZUNvdW50KCk7CisgICAgfTsKKworICAgIHJlc3Vs
dCA9IGdwcigpOworICAgIGVtaXRDQ2FsbChncm93TWVtb3J5LCByZXN1bHQsIFRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOworICAgIHJlc3Rv
cmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpObywgbV9p
bmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRyKS0+c2l6ZSgpKSkg
PT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOworCisg
ICAgcmVzdWx0ID0gZ3ByKCk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKworICAgIFJFTEVB
U0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGlu
c3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgdGVt
cDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7CisgICAgc3RhdGlj
X2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMg
bXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOworICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmltbSgxNiksIHJlc3VsdCk7CisgICAgYWRkU2hpZnQoVXJzaGlmdDY0LCB0
ZW1wMSwgcmVzdWx0LCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlMzIsIHJlc3VsdCwgcmVzdWx0
KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldExvY2Fs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0uZmlyc3QpOworICAgIGFwcGVuZChtb3ZlT3BG
b3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnNlY29uZCksIHZhbHVlLCBtX2xvY2Fsc1tpbmRl
eF0uZmlyc3QpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6Omdl
dEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOwor
CisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAgIFRtcCB0ZW1wID0gZ3ByKCk7
CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zm
c2V0T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRk
cihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSksIHRlbXApOwor
CisgICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihS
ZWdpc3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0
aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVl
VHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3VsdCk7CisgICAgZWxzZSB7
CisgICAgICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpi
aWdJbW0ob2Zmc2V0KSwgdGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1w
LCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgQXJnOjph
ZGRyKHRlbXApLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIHRlbXAgPSBncHIoKTsKKworICAgIFJF
TEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkdsb2Jh
bHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNl
VmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwgdGVtcCk7CisKKyAgICBUeXBl
IHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKworICAgIGludDMyX3Qgb2Zmc2V0
ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBpZiAo
QXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHRvQjNUeXBlKHR5
cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIHZhbHVlLCBB
cmc6OmFkZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxzZSB7CisgICAgICAgIFRtcCB0ZW1wMiA9
IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIp
OworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBw
ZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1wKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFpcklSR2VuZXJhdG9yOjpFeHBy
ZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVy
YXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBUbXAgcmVzdWx0
ID0gZ3ByKCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcG9pbnRlciwgcmVzdWx0KTsKKworICAgIHN3
aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogewor
ICAgICAgICAvLyBXZSdyZSBub3QgdXNpbmcgc2lnbmFsIGhhbmRsaW5nIGF0IGFsbCwgd2UgbXVz
dCB0aGVyZWZvcmUgY2hlY2sgdGhhdCBubyBtZW1vcnkgYWNjZXNzIGV4Y2VlZHMgdGhlIGN1cnJl
bnQgbWVtb3J5IHNpemUuCisgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVHUFIpOworICAgICAg
ICBBU1NFUlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKKyAgICAgICAgVG1w
IHRlbXAgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzaXplT2ZPcGVyYXRpb24pICsgb2Zmc2V0IC0gMSksIHRlbXApOworICAg
ICAgICBhcHBlbmQoQWRkNjQsIHJlc3VsdCwgdGVtcCk7CisKKyAgICAgICAgZW1pdENoZWNrKFsm
XSB7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNoNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsKSwgdGVtcCwgVG1wKG1fbWVtb3J5U2l6ZUdQUikpOworICAgICAg
ICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6IHsKKyAg
ICAgICAgLy8gV2UndmUgdmlydHVhbGx5IG1hcHBlZCA0R2lCK3JlZHpvbmUgZm9yIHRoaXMgbWVt
b3J5LiBPbmx5IHRoZSB1c2VyLWFsbG9jYXRlZCBwYWdlcyBhcmUgYWRkcmVzc2FibGUsIGNvbnRp
Z3VvdXNseSBpbiByYW5nZSBbMCwgY3VycmVudF0sCisgICAgICAgIC8vIGFuZCBldmVyeXRoaW5n
IGFib3ZlIGlzIG1hcHBlZCBQUk9UX05PTkUuIFdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkg
ZXhwbGljaXQgYm91bmRzIGNoZWNrIGluIHRoZSA0R2lCIHJhbmdlIGJlY2F1c2UgV2ViQXNzZW1i
bHkgcmVnaXN0ZXIKKyAgICAgICAgLy8gbWVtb3J5IGFjY2Vzc2VzIGFyZSAzMi1iaXQuIEhvd2V2
ZXIgV2ViQXNzZW1ibHkgcmVnaXN0ZXIgKyBvZmZzZXQgYWNjZXNzZXMgcGVyZm9ybSB0aGUgYWRk
aXRpb24gaW4gNjQtYml0IHdoaWNoIGNhbiBwdXNoIGFuIGFjY2VzcyBhYm92ZQorICAgICAgICAv
LyB0aGUgMzItYml0IGxpbWl0ICh0aGUgb2Zmc2V0IGlzIHVuc2lnbmVkIDMyLWJpdCkuIFRoZSBy
ZWR6b25lIHdpbGwgY2F0Y2ggbW9zdCBzbWFsbCBvZmZzZXRzLCBhbmQgd2UnbGwgZXhwbGljaXRs
eSBib3VuZHMgY2hlY2sgYW55CisgICAgICAgIC8vIHJlZ2lzdGVyICsgbGFyZ2Ugb2Zmc2V0IGFj
Y2Vzcy4gV2UgZG9uJ3QgdGhpbmsgdGhpcyB3aWxsIGJlIGdlbmVyYXRlZCBmcmVxdWVudGx5Lgor
ICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayB0aGF0IHJlZ2lzdGVyICsgbGFy
Z2Ugb2Zmc2V0IGRvZXNuJ3QgZXhjZWVkIDRHaUIrcmVkem9uZSBzaW5jZSB0aGF0J3MgdGVjaG5p
Y2FsbHkgdGhlIGxpbWl0IHdlIG5lZWQgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgdGhlCisgICAgICAg
IC8vIFBST1RfTk9ORSByZWdpb24sIGJ1dCBpdCdzIGJldHRlciBpZiB3ZSB1c2UgYSBzbWFsbGVy
IGltbWVkaWF0ZSBiZWNhdXNlIGl0IGNhbiBjb2RlZ2VucyBiZXR0ZXIuIFdlIGtub3cgdGhhdCBh
bnl0aGluZyBlcXVhbCB0byBvciBncmVhdGVyCisgICAgICAgIC8vIHRoYW4gdGhlIGRlY2xhcmVk
ICdtYXhpbXVtJyB3aWxsIHRyYXAsIHNvIHdlIGNhbiBjb21wYXJlIGFnYWluc3QgdGhhdCBudW1i
ZXIuIElmIHRoZXJlIHdhcyBubyBkZWNsYXJlZCAnbWF4aW11bScgdGhlbiB3ZSBzdGlsbCBrbm93
IHRoYXQKKyAgICAgICAgLy8gYW55IGFjY2VzcyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gNEdp
QiB3aWxsIHRyYXAsIG5vIG5lZWQgdG8gYWRkIHRoZSByZWR6b25lLgorICAgICAgICBpZiAob2Zm
c2V0ID49IE1lbW9yeTo6ZmFzdE1hcHBlZFJlZHpvbmVCeXRlcygpKSB7CisgICAgICAgICAgICB1
aW50NjRfdCBtYXhpbXVtID0gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkgPyBtX2luZm8ubWVtb3J5
Lm1heGltdW0oKS5ieXRlcygpIDogc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OworICAgICAgICAgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmJpZ0ltbShzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZU9mT3BlcmF0aW9uKSArIG9m
ZnNldCAtIDEpLCB0ZW1wKTsKKyAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgcmVzdWx0LCB0ZW1w
KTsKKyAgICAgICAgICAgIFRtcCBzaXplTWF4ID0gZ3ByKCk7CisgICAgICAgICAgICBhcHBlbmQo
TW92ZSwgQXJnOjpiaWdJbW0obWF4aW11bSksIHNpemVNYXgpOworCisgICAgICAgICAgICBlbWl0
Q2hlY2soWyZdIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoQnJhbmNoNjQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgdGVtcCwgc2l6ZU1heCk7CisgICAgICAg
ICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBhcHBl
bmQoQWRkNjQsIFRtcChtX21lbW9yeUJhc2VHUFIpLCByZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2Fk
OFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIHJldHVybiAxOwor
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQxNlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKKyAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOgor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFRtcCBBaXJJUkdlbmVyYXRv
cjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCB1b2Zmc2V0KQoreworICAgIHVpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNP
ZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUbXAgaW1tVG1wOworICAgIFRtcCBuZXdQ
dHI7CisgICAgVG1wIHJlc3VsdDsKKworICAgIGF1dG8gbG9hZEFyZyA9IFsmXSAoKSB7CisgICAg
ICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNp
emVPZkxvYWRPcChvcCkpKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmFkZHIocG9pbnRlciwg
b2Zmc2V0KTsKKyAgICAgICAgaW1tVG1wID0gZ3ByKCk7CisgICAgICAgIG5ld1B0ciA9IGdwcigp
OworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgaW1tVG1wKTsKKyAg
ICAgICAgYXBwZW5kKEFkZDY0LCBpbW1UbXAsIHBvaW50ZXIsIG5ld1B0cik7CisgICAgICAgIHJl
dHVybiBBcmc6OmFkZHIobmV3UHRyKTsKKyAgICB9OworCisgICAgc3dpdGNoIChvcCkgeworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCks
IHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDhTOiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmRFZmZl
Y3RmdWwoTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAg
IGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogeworICAgICAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQ4LCBsb2FkQXJnKCks
IHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6
STY0TG9hZDhVOiB7CisgICAgICAgIC8vIE9PUFM6IERvIEkgbmVlZCBhbm90aGVyIHpleHQgaGVy
ZT8KKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2Fk
OCwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
ICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTZTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJl
c3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0
TG9hZDE2UzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0
ZnVsKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAg
YXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VTogeworICAgICAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQxNiwgbG9hZEFyZygp
LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQxNlU6IHsKKyAgICAgICAgLy8gT09QUzogRG8gSSBuZWVkIGFub3RoZXIgemV4dCBo
ZXJlPworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExv
YWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJV
OiB7CisgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTW92
ZTMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzogeworICAgICAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAg
ICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOiB7CisgICAgICAgIHJl
c3VsdCA9IGdwcigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTW92ZSwgbG9hZEFyZygpLCBy
ZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkYz
MkxvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1
bChNb3ZlRmxvYXQsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9IGZwcigp
OworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTW92ZURvdWJsZSwgbG9hZEFyZygpLCByZXN1bHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlw
ZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQocG9pbnRlci5pc0dQKCkpOworCisgICAgaWYgKFVO
TElLRUxZKHN1bU92ZXJmbG93czx1aW50MzJfdD4ob2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSkp
IHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkgb3V0IG9m
IGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRvIGhhbmRs
ZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0aGlzIG1h
eSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MzUK
KyAgICAgICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAg
cGF0Y2gtPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93
RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOwor
ICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0Y2gsIFRtcCgpKTsKKworICAg
ICAgICAvLyBXZSB3b24ndCByZWFjaCBoZXJlLCBzbyB3ZSBqdXN0IHBpY2sgYSByYW5kb20gcmVn
LgorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDhTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6CisgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZV
OgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGdwcigpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgY2FzZSBM
b2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0ID0gZnByKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IGVt
aXRMb2FkT3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwg
c2l6ZU9mTG9hZE9wKG9wKSksIG9mZnNldCk7CisKKyAgICByZXR1cm4geyB9OworfQorCitpbmxp
bmUgdWludDMyX3Qgc2l6ZU9mU3RvcmVPcChTdG9yZU9wVHlwZSBvcCkKK3sKKyAgICBzd2l0Y2gg
KG9wKSB7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAgIGNhc2UgU3RvcmVP
cFR5cGU6Okk2NFN0b3JlODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBTdG9yZU9wVHlw
ZTo6STMyU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTE2OgorICAgICAg
ICByZXR1cm4gMjsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKKyAgICBjYXNlIFN0
b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkYzMlN0b3JlOgor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICBj
YXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKworaW5saW5lIHZvaWQgQWlySVJH
ZW5lcmF0b3I6OmVtaXRTdG9yZU9wKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAgICB1aW50
MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQpOwor
CisgICAgVG1wIGltbVRtcDsKKyAgICBUbXAgbmV3UHRyOworCisgICAgYXV0byBzdG9yZUFyZyA9
IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3
aWR0aEZvckJ5dGVzKHNpemVPZlN0b3JlT3Aob3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJn
OjphZGRyKHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIGltbVRtcCA9IGdwcigpOworICAgICAg
ICBuZXdQdHIgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNl
dCksIGltbVRtcCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQ
dHIpOworICAgICAgICByZXR1cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3
aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4LCB2YWx1ZSwgc3Rv
cmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICAgICAgYXBwZW5k
KFN0b3JlMTYsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9y
ZToKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICAgICAgYXBwZW5k
KE1vdmUsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHZhbHVlLCBz
dG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0
U3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgc3RvcmVBcmcoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLmlzR1AoKSk7CisKKyAgICBp
ZiAoVU5MSUtFTFkoc3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZlN0b3JlT3Ao
b3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkg
b3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRv
IGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0
aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY0MzUKKyAgICAgICAgYXV0byogdGhyb3dFeGNlcHRpb24gPSBhZGRQYXRjaHBvaW50KEIzOjpW
b2lkKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9p
bnQodGhyb3dFeGNlcHRpb24sIFRtcCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3Jl
T3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9m
U3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4
cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobm9uWmVyby5pc0dQKCkg
PT0gemVyby5pc0dQKCkpOworICAgIHJlc3VsdCA9IG5vblplcm8uaXNHUCgpID8gZ3ByKCkgOiBm
cHIoKTsKKyAgICBpZiAobm9uWmVyby5pc0dQKCkpCisgICAgICAgIGFwcGVuZChNb3ZlLCBub25a
ZXJvLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIG5vblpl
cm8sIHJlc3VsdCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc1plcm8gPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKwor
ICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVy
byksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyhpc1plcm8sIGNvbnRpbnVhdGlvbik7CisKKyAgICBpZiAoemVyby5pc0dQKCkpCisgICAg
ICAgIGFwcGVuZChpc1plcm8sIE1vdmUsIHplcm8sIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAg
ICBhcHBlbmQoaXNaZXJvLCBNb3ZlRG91YmxlLCB6ZXJvLCByZXN1bHQpOworICAgIGFwcGVuZChp
c1plcm8sIEp1bXApOworICAgIGlzWmVyby0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOwor
CisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9Owor
fQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVt
ZW50Q291bnQsIEIzOjpPcmlnaW4gb3JpZ2luKQoreworICAgIFVOVVNFRF9QQVJBTShvcmlnaW4p
OyAvLyBPT1BTCisKKyAgICBpZiAoIW1fdGllclVwKQorICAgICAgICByZXR1cm47CisKKyAgICBU
bXAgY291bnRkb3duUHRyID0gZ3ByKCk7CisgICAgVG1wIG9sZENvdW50ZG93biA9IGdwcigpOwor
ICAgIFRtcCBuZXdDb3VudGRvd24gPSBncHIoKTsKKworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJp
Z0ltbShyZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihtX3RpZXJVcCkpLCBjb3VudGRvd25QdHIp
OworICAgIGFwcGVuZChNb3ZlMzIsIEFyZzo6YWRkcihjb3VudGRvd25QdHIpLCBvbGRDb3VudGRv
d24pOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkSW1tRm9ybShkZWNyZW1lbnRD
b3VudCkpOworICAgIGFwcGVuZChNb3ZlMzIsIG9sZENvdW50ZG93biwgbmV3Q291bnRkb3duKTsK
KyAgICBhcHBlbmQoU3ViMzIsIEFyZzo6aW1tKGRlY3JlbWVudENvdW50KSwgbmV3Q291bnRkb3du
KTsKKyAgICBhcHBlbmQoTW92ZTMyLCBuZXdDb3VudGRvd24sIEFyZzo6YWRkcihjb3VudGRvd25Q
dHIpKTsKKworICAgIGF1dG8qIHBhdGNoID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAg
QjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgZWZmZWN0cy5y
ZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIGVmZmVjdHMud3JpdGVzID0gQjM6Okhl
YXBSYW5nZTo6dG9wKCk7CisgICAgcGF0Y2gtPmVmZmVjdHMgPSBlZmZlY3RzOworCisgICAgcGF0
Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgdGllclVwID0gaml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcGFyYW1zWzBd
LmdwcigpLCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
dGllclVwUmVzdW1lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRo
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIHRpZXJVcC5saW5rKCZqaXQp
OworCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYVBhZGRpbmdCeXRlcyA9IDA7Cisg
ICAgICAgICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsID0geyB9OworICAgICAgICAg
ICAgcmVnaXN0ZXJzVG9TcGlsbC5hZGQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlv
biA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIGV4dHJhUGFkZGluZ0J5dGVzKTsKKworICAgICAg
ICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2Z1bmN0aW9uSW5k
ZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgICAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0
ZXJzVG9TcGlsbCwgUmVnaXN0ZXJTZXQoKSwgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lz
dGVyUHJlc2VydmF0aW9uLCBleHRyYVBhZGRpbmdCeXRlcyk7CisgICAgICAgICAgICBqaXQuanVt
cCh0aWVyVXBSZXN1bWUpOworCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxOb1B0clRhZz4oY2Fs
bCksIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigp
LnN0dWIodHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2gsIFRtcCgpLCBuZXdDb3VudGRvd24sIG9sZENvdW50ZG93bik7Cit9CisKK0FpcklSR2VuZXJh
dG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChUeXBlIHNpZ25hdHVyZSkK
K3sKKyAgICBCYXNpY0Jsb2NrKiBib2R5ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQoSnVt
cCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoYm9keSk7CisKKyAgICBtX2N1
cnJlbnRCbG9jayA9IGJvZHk7CisgICAgZW1pdFRpZXJVcENoZWNrKFRpZXJVcENvdW50Ojpsb29w
RGVjcmVtZW50KCksIG9yaWdpbigpKTsKKworICAgIHJldHVybiBDb250cm9sRGF0YShvcmlnaW4o
KSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6TG9vcCwgY29u
dGludWF0aW9uLCBib2R5KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklS
R2VuZXJhdG9yOjphZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29u
dHJvbERhdGEoQjM6Ok9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwg
QmxvY2tUeXBlOjpUb3BMZXZlbCwgbV9jb2RlLmFkZEJsb2NrKCkpOworfQorCitBaXJJUkdlbmVy
YXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZEJsb2NrKFR5cGUgc2lnbmF0dXJl
KQoreworICAgIHJldHVybiBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JU
eXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6QmxvY2ssIG1fY29kZS5hZGRCbG9jaygpKTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBU
eXBlIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogbm90VGFrZW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAKKyAgICAvLyBXYXNtIGJvb2xzIGFyZSBp
MzIuCisgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvKSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgIG1fY3VycmVudEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKHRha2VuLCBub3RUYWtlbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IHRh
a2VuOworICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZv
clR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZShDb250
cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGN1cnJlbnRTdGFjaykgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0
YS5yZXN1bHQpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3Vj
Y2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hh
YmxlKGRhdGEpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChkYXRh
LnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3Bl
Y2lhbDsKKyAgICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmIGRhdGEs
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBBU1NFUlQocmV0dXJuVmFsdWVzLnNpemUoKSA8PSAxKTsKKyAgICBpZiAocmV0dXJuVmFs
dWVzLnNpemUoKSkgeworICAgICAgICBUbXAgcmV0dXJuVmFsdWVHUFIgPSBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBUbXAgcmV0dXJuVmFsdWVGUFIgPSBUbXAoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBzd2l0Y2ggKGRhdGEuc2lnbmF0dXJlKCkpIHsK
KyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCByZXR1
cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXQzMiwg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6
STY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFs
dWVHUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldDY0LCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICBhcHBl
bmQoTW92ZUZsb2F0LCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAg
ICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUs
IHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYXBwZW5kKFJl
dEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgYXBwZW5kKFJldFZvaWQpOworICAgIHJldHVybiB7IH07
Cit9CisKKy8vIE5PVEU6IEFsbCBicmFuY2hlcyBpbiBXYXNtIGFyZSBvbiAzMi1iaXQgaW50cwor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2goQ29udHJvbERhdGEmIGRhdGEsIEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKHJldHVyblZhbHVl
cywgZGF0YS5yZXN1bHRGb3JCcmFuY2goKSk7CisKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBk
YXRhLnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAgaWYgKGNvbmRpdGlvbikgeworICAgICAg
ICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAg
YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
KSwgY29uZGl0aW9uLCBjb25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3Vj
Y2Vzc29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fY3VycmVudEJsb2NrID0g
Y29udGludWF0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIGFwcGVuZChKdW1wKTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTd2l0Y2goRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29u
dHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
cmdldHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Np
b25TdGFjaywgdGFyZ2V0c1tpXS0+cmVzdWx0Rm9yQnJhbmNoKCkpOworICAgIHVuaWZ5VmFsdWVz
V2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGVmYXVsdFRhcmdldC5yZXN1bHRGb3JCcmFuY2go
KSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gdGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JC
cmFuY2goKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJs
b2NrKCk7CisgICAgICAgIFRtcCBjb25zdGFudCA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjpiaWdJbW0oaSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKEJyYW5jaDMyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgY29uc3RhbnQsIGNvbmRpdGlvbik7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0
aW9uKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisK
KyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGVm
YXVsdFRhcmdldC50YXJnZXRCbG9ja0ZvckJyYW5jaCgpKTsKKworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIEV4
cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBD
b250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xEYXRhOworCisgICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXAp
OworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsK
KworICAgIHJldHVybiBhZGRFbmRUb1VucmVhY2hhYmxlKGVudHJ5KTsKK30KKworCithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRyb2xE
YXRhOworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5jb250aW51YXRpb247CisKKyAgICBpZiAo
ZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZikgeworICAgICAgICBhcHBlbmQoZGF0YS5zcGVj
aWFsLCBKdW1wKTsKKyAgICAgICAgZGF0YS5zcGVjaWFsLT5zZXRTdWNjZXNzb3JzKG1fY3VycmVu
dEJsb2NrKTsKKyAgICB9CisKKyAgICBmb3IgKFRtcCByZXN1bHQgOiBkYXRhLnJlc3VsdCkKKyAg
ICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAg
ICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVl
ZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgorICAgIGlmIChkYXRhLnR5cGUo
KSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQorICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGRhdGEs
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2Fs
bHMgPSB0cnVlOworCisgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUo
KTsKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6STY0OgorICAg
ICAgICByZXN1bHQgPSBncHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpGMzI6
CisgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIHJlc3VsdCA9IGZwcigpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKKworICAgIGlmICht
X2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbklu
ZGV4KSkgeworICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4
TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsK
KworICAgICAgICBUbXAgY3VycmVudEluc3RhbmNlID0gZ3ByKCk7CisgICAgICAgIGFwcGVuZChN
b3ZlLCBpbnN0YW5jZVZhbHVlKCksIGN1cnJlbnRJbnN0YW5jZSk7CisKKyAgICAgICAgLy8gRklY
TUUgaW1wb3J0cyBjYW4gYmUgbGlua2VkIGhlcmUsIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBh
dGNocG9pbnQsIGJlY2F1c2UgYWxsIGltcG9ydCBzdHVicyBhcmUgZ2VuZXJhdGVkIGJlZm9yZSBC
MyBjb21waWxhdGlvbiBzdGFydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY0NjIKKyAgICAgICAgVG1wIHRhcmdldEluc3RhbmNlID0gZ3ByKCk7CisgICAgICAg
IC8vIE9PUFM6IFRyeSB0byBpc2VsIHRoaXMgYmV0dGVyCisgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmJpZ0ltbShJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4
KSksIHRhcmdldEluc3RhbmNlKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbnN0YW5jZVZhbHVl
KCksIHRhcmdldEluc3RhbmNlKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcih0YXJn
ZXRJbnN0YW5jZSksIHRhcmdldEluc3RhbmNlKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBpc1dh
c21CbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBpc0VtYmVk
ZGVyQmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3Q2
NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGFyZ2V0SW5zdGFuY2Us
IHRhcmdldEluc3RhbmNlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
aXNXYXNtQmxvY2ssIGlzRW1iZWRkZXJCbG9jayk7CisKKworICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7
CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Cisg
ICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3Rl
cnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAv
LyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRo
aW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7
CisKKworICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAg
ICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1
cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXAp
IHsKKyAgICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxl
TmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5k
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwg
ZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChpc1dhc21CbG9jaywgcGF0Y2hwb2ludCwgcmVz
dWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAgICAgYXBwZW5kKGlzV2FzbUJsb2Nr
LCBKdW1wKTsKKyAgICAgICAgICAgIGlzV2FzbUJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBUbXAganVtcERlc3Rp
bmF0aW9uID0gZ3ByKCk7CisgICAgICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBNb3Zl
LCBBcmc6OmJpZ0ltbShJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtVG9FbWJlZGRlclN0dWIoZnVuY3Rp
b25JbmRleCkpLCBqdW1wRGVzdGluYXRpb24pOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRk
ZXJCbG9jaywgQWRkNjQsIGluc3RhbmNlVmFsdWUoKSwganVtcERlc3RpbmF0aW9uKTsKKyAgICAg
ICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIE1vdmUsIEFyZzo6YWRkcihqdW1wRGVzdGlu
YXRpb24pLCBqdW1wRGVzdGluYXRpb24pOworCisgICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQg
YmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2Fs
bHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRz
IGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRv
IHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisKKyAgICAgICAgICAgIFZl
Y3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAgICAgICAgICAgcGF0Y2hBcmdzLmFw
cGVuZChqdW1wRGVzdGluYXRpb24pOworCisgICAgICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRp
b25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBb
Jl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgICAgICBwYXRjaEFy
Z3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6
IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIGVtaXRQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBX
VEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywg
SnVtcCk7CisgICAgICAgICAgICBpc0VtYmVkZGVyQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworICAgICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJB
c3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5
LgorICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBjdXJyZW50SW5zdGFuY2UsIGNvbnRpbnVhdGlv
bik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndy
aXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5u
ZWQgPSB0cnVlOworCisgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOwor
ICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1
cm5UeXBlLCBwYXRjaHBvaW50LCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXAp
IHsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5j
dGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJs
b2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgRXhwcmVz
c2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAgQVNTRVJUKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9tYWtlc0NhbGxz
ID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGluZGlyZWN0IGNhbiBjYWxsIGVpdGhlciBXZWJB
c3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLiBCZWNhdXNlCisg
ICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gaXMgbGlrZSBjYWxsaW5nIGludG8gdGhl
IGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgYWxsIGNhbGwgaW5kaXJlY3RzCisg
ICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNoZWNrIGNhbGN1bGF0
aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0Nh
bGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOworCisgICAg
VG1wIGN1cnJlbnRJbnN0YW5jZSA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlLCBpbnN0YW5jZVZh
bHVlKCksIGN1cnJlbnRJbnN0YW5jZSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyID0gZ3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVy
ID0gZ3ByKCk7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0
aCA9IGdwcigpOworICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRk
ckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mRnVuY3Rp
b25zKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxp
ZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpLCBCMzo6V2lkdGg2NCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZM
ZW5ndGgoKSwgQjM6OldpZHRoNjQpKTsKKworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRy
KGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSksIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJMZW5ndGgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxh
YmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSwgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpLCBp
bnN0YW5jZXNCdWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92ZTMyLCBjYWxs
ZWVJbmRleCwgY2FsbGVlSW5kZXgpOworCisgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBs
b29raW5nIGZvciBpcyB2YWxpZC4KKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5k
KEJyYW5jaDMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNh
bGxlZUluZGV4LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc0NhbGxJbmRpcmVjdCk7CisgICAgfSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxs
ZWVDb2RlID0gZ3ByKCk7CisgICAgeworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWdu
YXR1cmVJbmRleCA9IGdwcigpOworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhl
IHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1v
dmUsIEFyZzo6aW1tKHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxl
ZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2Fs
bGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXIsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29k
ZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVlIGNvZGUuCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0
aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBp
ZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5v
dCBpbml0aWFsaXplZC4KKyAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRs
ZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52
YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzcyMTAKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVn
ZW4gYXNzdW1lcyBpNjQiKTsKKyAgICAgICAgLy8gT09QUzogVGhpcyBzZWVtcyBkdW1iIHRvIGRv
IHR3byBjaGVja3MganVzdCBmb3IgYSBuaWNlciBlcnJvciBoZXJlLi4uCisKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChTaWduYXR1cmU6OmludmFsaWRJbmRleCA9PSAwLCAiIik7CisgICAgICAgICAgICBhcHBl
bmQoQnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjYWxs
ZWVTaWduYXR1cmVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlw
ZTo6TnVsbFRhYmxlRW50cnkpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBn
cHIoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgVG1wIG5l
d0NvbnRleHRJbnN0YW5jZSA9IGdwcigpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbmRl
eChpbnN0YW5jZXNCdWZmZXIsIGNhbGxlZUluZGV4LCA4LCAwKSwgbmV3Q29udGV4dEluc3RhbmNl
KTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRvQ29udGV4dFN3
aXRjaCk7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZv
aWQpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Cisg
ICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhp
bmcgd2l0aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Cisg
ICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0gcGFyYW1zWzBdLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1sxXS5ncHIoKTsK
KyAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5
ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAgIEFTU0VSVChuZXdD
b250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkg
c2l6ZSByZWdpc3RlcgorICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5z
aXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBd
LnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6
ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1v
cnk6OnZvaWQqLgorICAgICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChkb0NvbnRl
eHRTd2l0Y2gsIHBhdGNocG9pbnQsIFRtcCgpLCBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNl
VmFsdWUoKSk7CisgICAgICAgIGFwcGVuZChkb0NvbnRleHRTd2l0Y2gsIEp1bXApOworICAgICAg
ICBkb0NvbnRleHRTd2l0Y2gtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZUNvZGUpLCBjYWxsZWVDb2RlKTsKKworICAgIFR5cGUgcmV0dXJu
VHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7
CisgICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6Okkz
MjoKKyAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjMyOgorICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBhdXRvKiBwYXRjaCA9
IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgIHBhdGNoLT5lZmZlY3Rz
LndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgcGF0Y2gtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0
cnVlOworICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdp
c3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgLy8gV2Ug
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhh
dCBpcyBib3VuZHMgY2hlY2tpbmcgc28KKyAgICAvLyBiZWNhdXNlIHRoZSB3YXNtLT53YXNtIHRo
dW5rIHVuY29uZGl0aW9uYWxseSBvdmVycmlkZXMgdGhlIHNpemUgcmVnaXN0ZXJzLgorICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNt
IHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJz
IGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIx
ODEKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1Nh
dmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgIFZlY3RvcjxDb25zdHJhaW5l
ZFRtcD4gZW1pdEFyZ3M7CisgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUpOworICAgIHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBh
dGNoLCBhcmdzLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgZW1p
dEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgfSk7CisgICAgcGF0Y2gtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9
PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgIH0pOworCisgICAg
ZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIFdURk1vdmUoZW1p
dEFyZ3MpKTsKKworICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdl
YkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1v
cnkuCisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgY3VycmVudEluc3RhbmNlLCBtX2N1cnJlbnRCbG9j
ayk7CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeShj
b25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKQor
eworICAgIC8vIE9PUFM6IFdlIGtpbmRhIHdhbnQgdHlwZXMgaGVyZSB0byBkaXN0aW5ndWlzaCBp
MzIvaTY0L2YzMi9mNjQhCisgICAgUkVMRUFTRV9BU1NFUlQoZHN0LmlzR1AoKSA9PSBzb3VyY2Uu
aXNHUCgpKTsKKyAgICBhcHBlbmQoZHN0LmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBzb3Vy
Y2UsIGRzdCk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVz
dWx0KQoreworICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAg
ICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrW3Jlc3Vs
dFN0YWNrLnNpemUoKSAtIDEgLSBpXSk7Cit9CisKKy8vc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Np
b25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBBaXJJUkdlbmVyYXRvcjo6
RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKKy8veworLy8gICAgZGF0YUxvZyhjb21t
YSwgIkV4cHJlc3Npb25TdGFjazoiKTsKKy8vICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lv
biA6IGV4cHJlc3Npb25TdGFjaykKKy8vICAgICAgICBkYXRhTG9nKGNvbW1hLCAqZXhwcmVzc2lv
bik7CisvL30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJv
bEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0
YWNrKQoreworICAgIFVOVVNFRF9QQVJBTShjb250cm9sU3RhY2spOworICAgIFVOVVNFRF9QQVJB
TShleHByZXNzaW9uU3RhY2spOworCisgICAgLy8gT09QUyEKKyAgICAvKgorICAgIGRhdGFMb2dM
bigiUHJvY2Vzc2luZyBHcmFwaDoiKTsKKyAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgZGF0YUxv
Z0xuKCJXaXRoIGN1cnJlbnQgYmxvY2s6IiwgKm1fY3VycmVudEJsb2NrKTsKKyAgICBkYXRhTG9n
TG4oIkNvbnRyb2wgc3RhY2s6Iik7CisgICAgQVNTRVJUKGNvbnRyb2xTdGFjay5zaXplKCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGRhdGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhLCAiOiAiKTsKKyAgICAg
ICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIsICIiKTsKKyAgICAgICAgZHVtcEV4cHJlc3Npb25T
dGFjayhjb21tYSwgKmV4cHJlc3Npb25TdGFjayk7CisgICAgICAgIGV4cHJlc3Npb25TdGFjayA9
ICZjb250cm9sU3RhY2tbaV0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGRhdGFM
b2dMbigpOworICAgIH0KKyAgICBkYXRhTG9nTG4oKTsKKyAgICAqLworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBCMzo6T3JpZ2luCit7CisgICAgcmV0dXJuIEIzOjpPcmln
aW4oKTsKKyAgICAvL09wY29kZU9yaWdpbiBvcmlnaW4obV9wYXJzZXItPmN1cnJlbnRPcGNvZGUo
KSwgbV9wYXJzZXItPmN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpKTsKKyAgICAvL0FTU0VS
VChpc1ZhbGlkT3BUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG9yaWdpbi5vcGNvZGUoKSkpKTsK
KyAgICAvL3JldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOworfQorCitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50
OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBt
b2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbEZ1
bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJ
VCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigp
OworCisgICAgQjM6OlByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZSA9IHByb2Nl
ZHVyZS5jb2RlKCk7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRT
dHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5kYXRh
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNvZGVP
cmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgd2UgY2Fu
bm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJzKCkg
b3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAgLy8gZG9uJ3Qgc3Ry
aWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCksIHdoaWNoIHNhdmVz
IGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAgICAvLyBPT1BTOiBE
byB3ZSBuZWVkIHRoaXM/IFNob3VsZCB3ZSBqdXN0IHNldCBpdCBkaXJlY3RseSBvbiBDb2RlPwor
ICAgIHByb2NlZHVyZS5zZXROZWVkc1VzZWRSZWdpc3RlcnMoZmFsc2UpOworICAgIAorICAgIHBy
b2NlZHVyZS5zZXRPcHRMZXZlbChjb21waWxhdGlvbk1vZGUgPT0gQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlCisgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZl
bCgpCisgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgp
KTsKKworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVz
dWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgY29tcGlsYXRpb25Nb2Rl
LCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsK
KyAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKKyAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKKworCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCisgICAgICAgICAgICBibG9jay0+c3VjY2Vzc29y
QmxvY2soaSktPmFkZFByZWRlY2Vzc29yKGJsb2NrKTsKKyAgICB9CisgICAgLy9CMzo6QWlyOjp2
YWxpZGF0ZShjb2RlKTsKKyAgICAvLyBPT1BTOiBWYWxpZGF0ZSAnY29kZScgaGVyZSEKKyAgICAK
KyAgICB7CisgICAgICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOworICAg
ICAgICBCMzo6QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRy
eXBvaW50SklUKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlw
cm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOworICAgICAgICByZXN1bHQt
PmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVy
QXRPZmZzZXRMaXN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+Cit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0
Q2hlY2tzRm9yTW9kT3JEaXYoYm9vbCBpc1NpZ25lZERpdiwgRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQpCit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSW50VHlw
ZSkgPT0gNCB8fCBzaXplb2YoSW50VHlwZSkgPT0gOCwgIiIpOworCisgICAgZW1pdENoZWNrKFsm
XSB7CisgICAgICAgIGFwcGVuZChzaXplb2YoSW50VHlwZSkgPT0gNCA/IEJyYW5jaFRlc3QzMiA6
IEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgcmlnaHQs
IHJpZ2h0KTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CisgICAgfSk7CisKKyAgICBpZiAo
aXNTaWduZWREaXYpIHsKKyAgICAgICAgQVNTRVJUKHN0ZDo6aXNfc2lnbmVkPEludFR5cGU+Ojp2
YWx1ZSk7CisgICAgICAgIEludFR5cGUgbWluID0gc3RkOjpudW1lcmljX2xpbWl0czxJbnRUeXBl
Pjo6bWluKCk7CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICAvLyBPT1BT
OiBUcnkgdG8gZW1pdCBuaWNlIGNvbXBhcmUgdy8gaW1tcy4KKyAgICAgICAgICAgIFRtcCBtaW5U
bXAgPSBncHIoKTsKKyAgICAgICAgICAgIFRtcCBuZWdPbmUgPSBncHIoKTsKKworICAgICAgICAg
ICAgQjM6OkFpcjo6T3Bjb2RlIG9wID0gc2l6ZW9mKEludFR5cGUpID09IDQgPyBDb21wYXJlMzIg
OiBDb21wYXJlNjQ7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG1pbikpLCBtaW5UbXApOworICAgICAgICAgICAgYXBwZW5kKG9wLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgbGVmdCwgbWluVG1wLCBtaW5UbXAp
OworCisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW0oLTEpLCBuZWdPbmUpOworICAg
ICAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwg
cmlnaHQsIG5lZ09uZSwgbmVnT25lKTsKKworICAgICAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3Qz
MiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgbWluVG1wLCBuZWdPbmUp
OworICAgICAgICB9LAorICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93
RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6SW50ZWdlck92ZXJmbG93KTsKKyAgICAgICAg
fSk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK3ZvaWQgQWlySVJH
ZW5lcmF0b3I6OmVtaXRNb2RPckRpdihib29sIGlzRGl2LCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4
cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKK3sKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihJbnRUeXBlKSA9PSA0IHx8IHNpemVvZihJbnRUeXBlKSA9PSA4LCAiIik7
CisKKyAgICByZXN1bHQgPSBncHIoKTsKKworICAgIGJvb2wgaXNTaWduZWQgPSBzdGQ6OmlzX3Np
Z25lZDxJbnRUeXBlPjo6dmFsdWU7CisKKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIEIz
OjpBaXI6Ok9wY29kZSBkaXY7CisgICAgICAgIHN3aXRjaCAoc2l6ZW9mKEludFR5cGUpKSB7Cisg
ICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGRpdiA9IGlzU2lnbmVkID8gRGl2MzIgOiBVRGl2
MzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgZGl2
ID0gaXNTaWduZWQgPyBEaXY2NCA6IFVEaXY2NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgYXBwZW5kKGRpdiwgbGhzLCByaHMsIHJlc3VsdCk7CisKKyAgICAgICAg
aWYgKCFpc0RpdikgeworICAgICAgICAgICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8g
TXVsMzIgOiBNdWw2NCwgcmVzdWx0LCByaHMsIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQo
c2l6ZW9mKEludFR5cGUpID09IDQgPyBTdWIzMiA6IFN1YjY0LCBsaHMsIHJlc3VsdCwgcmVzdWx0
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBDUFUoWDg2KSB8
fCBDUFUoWDg2XzY0KQorCisgICAgVG1wIGVheChYODZSZWdpc3RlcnM6OmVheCk7CisgICAgVG1w
IGVkeChYODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICBpZiAoaXNTaWduZWQpIHsKKyAgICAgICAg
QjM6OkFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgIEIzOjpBaXI6Ok9w
Y29kZSBkaXY7CisgICAgICAgIHN3aXRjaCAoc2l6ZW9mKEludFR5cGUpKSB7CisgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9Eb3Vi
bGVXb3JkMzI7CisgICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2
Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgaW1wbGVtZW50ICJy
ZXMgPSBEaXY8Q2hpbGw+L01vZDxDaGlsbD4obnVtLCBkZW4pIiBhcyBmb2xsb3dzOgorICAgICAg
ICAvLworICAgICAgICAvLyAgICAgaWYgKGRlbiArIDEgPD1fdW5zaWduZWQgMSkgeworICAgICAg
ICAvLyAgICAgICAgIGlmICghZGVuKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJlcyA9IDA7
CisgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgLy8gICAgICAgICB9
CisgICAgICAgIC8vICAgICAgICAgaWYgKG51bSA9PSAtMjE0NzQ4MzY0OCkgeworICAgICAgICAv
LyAgICAgICAgICAgICByZXMgPSBpc0RpdiA/IG51bSA6IDA7CisgICAgICAgIC8vICAgICAgICAg
ICAgIGdvdG8gZG9uZTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAgICAgIC8vICAgICB9Cisg
ICAgICAgIC8vICAgICByZXMgPSBudW0gKC8gb3IgJSkgZGV2OworICAgICAgICAvLyBkb25lOgor
CisgICAgICAgIEJhc2ljQmxvY2sqIGRlbklzR29vZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAg
ICAgICBCYXNpY0Jsb2NrKiBkZW5NYXlCZUJhZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAg
ICBCYXNpY0Jsb2NrKiBkZW5Ob3RaZXJvID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgICAgIFRt
cCB0ZW1wID0gZ3ByKCk7CisgICAgICAgIFRtcCBvbmUgPSBhZGRDb25zdGFudChzaXplb2YoSW50
VHlwZSkgPT0gNCA/IFR5cGU6OkkzMiA6IFR5cGU6Okk2NCwgMSk7CisKKyAgICAgICAgYXBwZW5k
KHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQWRkMzIgOiBBZGQ2NCwgcmhzLCBvbmUsIHRlbXApOwor
ICAgICAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBCcmFuY2gzMiA6IEJyYW5jaDY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgdGVtcCwgb25lKTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGVuSXNHb29kLCBkZW5NYXlCZUJhZCk7
CisKKyAgICAgICAgYXBwZW5kKGRlbk1heUJlQmFkLCBYb3I2NCwgcmVzdWx0LCByZXN1bHQpOwor
ICAgICAgICBhcHBlbmQoZGVuTWF5QmVCYWQsIHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQnJhbmNo
VGVzdDMyIDogQnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8p
LCByaHMsIHJocyk7CisgICAgICAgIGRlbk1heUJlQmFkLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVh
dGlvbiwgZGVuTm90WmVybyk7CisKKyAgICAgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KGRlbk5v
dFplcm8sIHNpemVvZihJbnRUeXBlKSA9PSA0ID8gVHlwZTo6STMyIDogVHlwZTo6STY0LCBzdGQ6
Om51bWVyaWNfbGltaXRzPEludFR5cGU+OjptaW4oKSk7CisgICAgICAgIGlmIChpc0RpdikKKyAg
ICAgICAgICAgIGFwcGVuZChkZW5Ob3RaZXJvLCBzaXplb2YoSW50VHlwZSkgPT0gNCA/IE1vdmUz
MiA6IE1vdmUsIG1pbiwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBS
ZXN1bHQgaXMgemVybywgYXMgc2V0IGFib3ZlLi4uCisgICAgICAgIH0KKyAgICAgICAgYXBwZW5k
KGRlbk5vdFplcm8sIHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQnJhbmNoMzIgOiBCcmFuY2g2NCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGxocywgbWluKTsKKyAgICAgICAg
ZGVuTm90WmVyby0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRlbklzR29vZCk7CisKKyAg
ICAgICAgVG1wIGRpdlJlc3VsdCA9IGlzRGl2ID8gZWF4IDogZWR4OworICAgICAgICBhcHBlbmQo
ZGVuSXNHb29kLCBNb3ZlLCBsaHMsIGVheCk7CisgICAgICAgIGFwcGVuZChkZW5Jc0dvb2QsIGNv
bnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4KTsKKyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwg
ZGl2LCBlYXgsIGVkeCwgcmhzKTsKKyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwgc2l6ZW9mKElu
dFR5cGUpID09IDQgPyBNb3ZlMzIgOiBNb3ZlLCBkaXZSZXN1bHQsIHJlc3VsdCk7CisgICAgICAg
IGFwcGVuZChkZW5Jc0dvb2QsIEp1bXApOworICAgICAgICBkZW5Jc0dvb2QtPnNldFN1Y2Nlc3Nv
cnMoY29udGludWF0aW9uKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEIzOjpBaXI6Ok9wY29kZSBkaXYgPSBz
aXplb2YoSW50VHlwZSkgPT0gNCA/IFg4NlVEaXYzMiA6IFg4NlVEaXY2NDsKKworICAgIFRtcCBk
aXZSZXN1bHQgPSBpc0RpdiA/IGVheCA6IGVkeDsKKworICAgIGFwcGVuZChNb3ZlLCBsaHMsIGVh
eCk7CisgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVkeCk7CisgICAgYXBwZW5kKGRpdiwgZWF4LCBl
ZHgsIHJocyk7CisgICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8gTW92ZTMyIDogTW92
ZSwgZGl2UmVzdWx0LCByZXN1bHQpOworI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUg
cmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBl
bWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50MzJfdD4odHJ1ZSwgbGVmdCwgcmlnaHQpOworICAgIGVt
aXRNb2RPckRpdjxpbnQzMl90Pih0cnVlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNr
c0Zvck1vZE9yRGl2PGludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9y
RGl2PGludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkRpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1v
ZE9yRGl2PHVpbnQzMl90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjx1
aW50MzJfdD4odHJ1ZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1V
PihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRp
djx1aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8dWludDMy
X3Q+KGZhbHNlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4
cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PGlu
dDY0X3Q+KHRydWUsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8aW50NjRfdD4odHJ1
ZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9u
VHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjxpbnQ2NF90Pihm
YWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjxpbnQ2NF90PihmYWxzZSwgbGVm
dCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBs
ZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjx1aW50NjRfdD4oZmFsc2Us
IGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8dWludDY0X3Q+KHRydWUsIGxlZnQsIHJp
Z2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8dWludDY0X3Q+KGZhbHNlLCBsZWZ0
LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1zWzFdLmdwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVt
aXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0
ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5jb3VudFRy
YWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7
CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVz
dWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0
c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpJbnQzMik7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZm
ZWN0czo6bm9uZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1zWzFdLmdwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyNlbmRp
ZgorCisgICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAoaW50MzJfdCB2YWx1
ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZhbHVlKTsgfTsKKyAg
ICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNu
dD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlm
IChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgeworICAgICAgICBh
dXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LmNvdW50UG9wdWxh
dGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQ2NF90ICgqcG9wY291bnQpKGlu
dDY0X3QpID0gW10gKGludDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIF9fYnVpbHRp
bl9wb3Bjb3VudGxsKHZhbHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9
IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIz
OjpFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHBhdGNocG9pbnQt
Pm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdp
c3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5jb252
ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFt
cy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJs
ZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAgICB9KTsKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQs
IGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0
Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0
Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50LT5jbG9i
YmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAg
aml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigp
LCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0
VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAgICB9
KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBy
ZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBw
YXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJbnREb3VibGUo
cGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9
IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZl
Y3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFyYW1zWzFdLmZwcigpLCBw
YXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQ
YXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5j
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91Ymxl
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRv
d2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0p
OworICAgIHJlc3VsdCA9IGZwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJl
c3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRj
aHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0Zsb2F0KHBhcmFtc1sxXS5m
cHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIFRtcCBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGNjQs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgVG1wIG1pbiA9IGFkZENvbnN0YW50KFR5
cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworCisgICAgVG1wIHRlbXAxID0gZ3By
KCk7CisgICAgVG1wIHRlbXAyID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFy
Zzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCks
IGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91Ymxl
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQp
LCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisg
ICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVz
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRk
UGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZm
ZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NG
MzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIFRtcCBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2Vf
Y2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptaW4oKSkpKTsKKyAgICBUbXAgbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBi
aXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRt
cCB0ZW1wMiA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCksIGFyZywgbWluLCB0
ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0
ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2so
WyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0
aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1Ry
dW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIz
OjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7
CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQu
dHJ1bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwor
ICAgIH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9p
bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBUbXAgbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
ICogLTIuMCkpOworICAgIFRtcCBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4oLTEuMCkpOworCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1w
IHRlbXAyID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcs
IG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJn
LCBtYXgsIHRlbXAyKTsKKyAgICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVt
aXRDaGVjayhbJl0geworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Cisg
ICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9m
Qm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNo
cG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6
Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBd
LmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2lu
dChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4
cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIFRtcCBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIFRtcCBtaW4gPSBhZGRD
b25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8Zmxv
YXQ+KC0xLjApKSk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAx
KTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAy
KTsKKyAgICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0g
eworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMt
PmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMp
OworICAgIH0pOworCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6Oklu
dDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVu
Y2F0ZUZsb2F0VG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAg
IH0pOworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1w
IG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigtc3Rh
dGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsK
KyAgICBUbXAgbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCkpKSk7CisKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAxKTsKKyAgICBhcHBl
bmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBw
ZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAg
YXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
KSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dF
eGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsK
KworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVU
b0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgVG1wIG1heCA9IGFk
ZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIC0yLjApKTsKKyAg
ICBUbXAgbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KC0xLjApKTsKKyAgICAKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBUbXAgdGVtcDIgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1w
MSk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVt
cDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsm
XSB7CisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CisgICAgfSk7CisKKyAgICBUbXAgc2lnbkJpdENvbnN0YW50OworICAgIGlmIChpc1g4Nigp
KSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8g
Y29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0
IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIG51bWJlcnMgYXJl
IHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNpZ25lZCBpbnRlZ2VyLiBTaW5jZSB3ZSBj
YW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8gZnBycyB3ZSBoYXZlIGIzIGRvIGl0Cisg
ICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYgbmVlZGVkLgorICAgICAgICBzaWduQml0
Q29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkg
LSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8Q29uc3RyYWluZWRUbXA+IGFyZ3M7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBh
dGNocG9pbnQoQjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVj
dHM6Om5vbmUoKTsKKyAgICBhcmdzLmFwcGVuZChhcmcpOworICAgIGlmIChpc1g4NigpKSB7Cisg
ICAgICAgIGFyZ3MuYXBwZW5kKHNpZ25CaXRDb25zdGFudCk7CisgICAgICAgIHBhdGNocG9pbnQt
Pm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgfQorICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRG
UFJSZWc7CisgICAgICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7CisgICAgICAg
IGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBzY3JhdGNoID0gcGFyYW1zLmZwU2NyYXRjaCgw
KTsKKyAgICAgICAgICAgIGNvbnN0YW50ID0gcGFyYW1zWzJdLmZwcigpOworICAgICAgICB9Cisg
ICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1z
WzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgcmVz
dWx0LCBXVEZNb3ZlKGFyZ3MpKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0YzMj4oRXhwcmVzc2lv
blR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgVG1wIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90
Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KSkpOworICAgIFRtcCBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1pbigpKSkpOworCisgICAgVG1wIHRlbXAxID0gZ3ByKCk7CisgICAgVG1wIHRlbXAyID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAxKTsKKyAgICBh
cHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBh
cHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAg
ICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJv
d0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0p
OworCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0
VG9JbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBh
cmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBUbXAgbWF4ID0gYWRk
Q29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZs
b2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxm
bG9hdD4oLTIuMCkpKTsKKyAgICBUbXAgbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3
aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOworICAgIAorICAg
IFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCB0ZW1wMiA9IGdwcigpOworICAgIGFwcGVuZChD
b21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1Ro
YW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChDb21w
YXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRo
YW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMy
LCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChC
cmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAy
LCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9u
KGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBU
bXAgc2lnbkJpdENvbnN0YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNl
IHg4NiBkb2Vzbid0IGhhdmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2lu
dHMgdG8gdW5zaWduZWQgaW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQg
dGhpbmcgaWYKKyAgICAgICAgLy8gdGhlIG51bWJlcnMgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5
IGFzIGEgc2lnbmVkIGludGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFu
dHMgaW50byBmcHJzIHdlIGhhdmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wg
dGhlbSBpZiBuZWVkZWQuCisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGFkZENvbnN0YW50KFR5
cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2
NF90Pjo6bWF4KCkpKSk7CisgICAgfQorCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNo
cG9pbnQoQjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6
Om5vbmUoKTsKKyAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGFyZ3M7CisgICAgYXJncy5hcHBl
bmQoYXJnKTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBhcmdzLmFwcGVuZChzaWduQml0
Q29uc3RhbnQpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAx
OworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29u
c3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAg
ICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9
IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
VWludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFu
dCk7CisgICAgfSk7CisKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludCht
X2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKGFyZ3MpKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KEIzOjpBaXI6
Ok9wY29kZSBvcCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJn
OjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICAKKyAgICBUbXAgZWN4ID0gVG1wKFg4NlJlZ2lz
dGVyczo6ZWN4KTsKKyAgICBhcHBlbmQoTW92ZSwgdmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5k
KE1vdmUsIHNoaWZ0LCBlY3gpOworICAgIGFwcGVuZChvcCwgZWN4LCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEludGVnZXJTdWIoQjM6OkFp
cjo6T3Bjb2RlIG9wLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6
VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworICAgIC8v
IFN1YiBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBTdWIgYQorICAgIGFwcGVuZChN
b3ZlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKG9wLCByaHMsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEFicyhC
Mzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQob3AgPT0gQWJz
RmxvYXQgfHwgb3AgPT0gQWJzRG91YmxlKTsKKworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAg
aWYgKGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVu
ZChvcCwgdmFsdWUsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisKKyAgICBUbXAgY29uc3RhbnQgPSBncHIoKTsKKyAg
ICBpZiAob3AgPT0gQWJzRmxvYXQpIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKHN0
YXRpY19jYXN0PHVpbnQzMl90Pih+KDF1bGwgPDwgMzEpKSksIGNvbnN0YW50KTsKKyAgICAgICAg
YXBwZW5kKE1vdmUzMlRvRmxvYXQsIGNvbnN0YW50LCByZXN1bHQpOworICAgICAgICBhcHBlbmQo
QW5kRmxvYXQsIHZhbHVlLCByZXN1bHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbSh+KDF1bGwgPDwgNjMpKSwgY29uc3RhbnQpOworICAgICAgICBhcHBl
bmQoTW92ZTY0VG9Eb3VibGUsIGNvbnN0YW50LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoQW5k
RG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEJpbk9wKEIzOjpBaXI6Ok9wY29kZSBv
cCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAg
IGlmIChpc1ZhbGlkRm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAg
ICAgICAgYXBwZW5kKG9wLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKworICAgIC8vIE9wIGEsIGIK
KyAgICAvLyBtZWFucworICAgIC8vIGIgPSBiIE9wIGEKKyAgICAvLyBPT1BTOiB2ZXJpZnkKKyAg
ICBhcHBlbmQoTW92ZURvdWJsZSwgbGhzLCByZXN1bHQpOyAvLyBPT1BTOiBTaG91bGQgYmUgTW92
ZUZsb2F0ICYgTW92ZURvdWJsZQorICAgIGFwcGVuZChvcCwgcmhzLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJDZWlsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENl
aWxGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTXVsPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE11bDMyLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTdWI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWIzMiwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NExlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3By
KCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyRGVtb3RlRjY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBw
ZW5kKENvbnZlcnREb3VibGVUb0Zsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJN
aW4+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKwor
ICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGdyZWF0
ZXJUaGFuT3JFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRp
bnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2Nr
LCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVh
bCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1
YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBPckZsb2F0LCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRT
dWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVGbG9h
dCwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7
CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBncmVhdGVyVGhhbk9y
RXF1YWwpOworCisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgTW92ZUZsb2F0LCBhcmcx
LCByZXN1bHQpOworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIEp1bXApOworICAgIGdy
ZWF0ZXJUaGFuT3JFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0THQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk1heD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOworCisgICAgQmFzaWNC
bG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVx
dWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbGVzc1RoYW4gPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRk
QmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAg
ICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAg
ICBhcHBlbmQoaXNFcXVhbCwgQW5kRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBw
ZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0
aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOwor
ICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0
U3VjY2Vzc29ycyhsZXNzVGhhbiwgY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChsZXNzVGhh
biwgTW92ZUZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhhbiwgSnVtcCk7
CisgICAgbGVzc1RoYW4tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3Vy
cmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE11bD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoTXVs
RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChEaXZGbG9hdCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkNsej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChD
b3VudExlYWRpbmdaZXJvczMyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb3B5c2ln
bj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZl
IGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBmb3JtcyBv
biB4ODYKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcDEgPSBncHIoKTsKKyAgICBU
bXAgc2lnbiA9IGdwcigpOworICAgIFRtcCB2YWx1ZSA9IGdwcigpOworCisgICAgLy8gT09QUzog
Q2FuIGZpdCBpbiBJbW0vQml0SW1tIGluc3RlYWQgb2YgQmlnSW1tPworICAgIGFwcGVuZChNb3Zl
RmxvYXRUbzMyLCBhcmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4
ODAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5kMzIsIHRlbXAxLCBzaWduLCBzaWduKTsK
KworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVuZChBbmQzMiwg
dGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3IzMiwgc2lnbiwgdmFsdWUsIHZh
bHVlKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0Q29udmVydFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBU
bXAgdGVtcCA9IGdwcigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHRlbXApOworICAgIGFw
cGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
UmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQo
TW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QW5kPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFu
ZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJl
RmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEd0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRl
clRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxej4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0NjQsIEFyZzo6cmVzQ29uZChN
YWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NERpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IHdoYXQgYWJv
dXQgY2hpbGwtbmVzcyBoZXJlLi4uPworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3Ao
RGl2RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKEFkZEZsb2F0LCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChPcjY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zNjQsIGFyZzAsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVGbG9hdCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAg
ICAgICAgYXBwZW5kKE5lZ2F0ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGVsc2UgeworICAg
ICAgICBUbXAgY29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpJMzIsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0wLjApKSk7CisgICAgICAgIFRtcCB0ZW1wID0g
Z3ByKCk7CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcwLCB0ZW1wKTsKKyAgICAg
ICAgYXBwZW5kKFhvcjMyLCBjb25zdGFudCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzJU
b0Zsb2F0LCB0ZW1wLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQW5kPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFu
ZDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFU+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFy
ZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93KSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJldHVybiBhZGRTaGlmdChSb3RhdGVSaWdodDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWJz
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRBYnMoQWJzRG91YmxlLCBhcmcw
LCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyTHRTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
Z3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5k
KENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgLy8gT09QUzogV2UgY2FuIGhhdmUgYmV0dGVyIGNvZGVnZW4gaGVyZSBm
b3IgdGhlIGltbXMgYW5kIHR3byBvcGVyYW5kIGZvcm1zIG9uIHg4NgorICAgIHJlc3VsdCA9IGZw
cigpOworICAgIFRtcCB0ZW1wMSA9IGdwcigpOworICAgIFRtcCBzaWduID0gZ3ByKCk7CisgICAg
VG1wIHZhbHVlID0gZ3ByKCk7CisKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzEsIHRl
bXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4MDAwMDAwMDAwMDAwMDAwKSwg
c2lnbik7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgc2lnbiwgc2lnbik7CisKKyAgICBhcHBl
bmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpi
aWdJbW0oMHg3ZmZmZmZmZmZmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVuZChBbmQ2NCwgdGVt
cDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3I2NCwgc2lnbiwgdmFsdWUsIHZhbHVl
KTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIHZhbHVlLCByZXN1bHQpOworCisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMkNvbnZlcnRTSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBw
ZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJv
dGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUm90
YXRlTGVmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTHQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGMzJMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdw
cigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyR2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
cHIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkU2hpZnQoVXJzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJMzI+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBUbXAgdGVtcCA9IGdwcigpOworICAgIGFw
cGVuZChNb3ZlMzIsIGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0
LCB0ZW1wLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyR2VVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7
CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDZWlsPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENlaWxEb3VibGUsIGFyZzAsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkdlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyU2hsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0
dXJuIGFkZFNoaWZ0KExzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Rmxvb3I+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoRmxvb3JEb3VibGUsIGFyZzAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlhvcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChYb3IzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyQWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRB
YnMoQWJzRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOwor
CisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91YmxlQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBtX2N1cnJl
bnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBhcHBlbmQo
aXNFcXVhbCwgT3JEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1
YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKwor
ICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBl
bmQobm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNz
b3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVuZChncmVh
dGVyVGhhbk9yRXF1YWwsIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGdy
ZWF0ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5zZXRTdWNj
ZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlv
bjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpGMzJNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoTXVsRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiBhZGRJbnRlZ2VyU3ViKFN1YjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVpbnRlcnBy
ZXRGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZUZsb2F0
VG8zMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQWRkPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKEFkZDMyLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKFN1YkRvdWJsZSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMk9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKE9yMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMdFM+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9Eb3VibGUsIGFyZzAsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFhvcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChYb3I2NCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0R2VVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIo
KTsKKyAgICBhcHBlbmQoTXVsNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MlN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGZwcigpOwor
ICAgIGlmIChpc1ZhbGlkRm9ybShTdWJGbG9hdCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRt
cCkpCisgICAgICAgIGFwcGVuZChTdWJGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBl
bHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7CisgICAgICAgIGFwcGVuZChN
b3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTdWJGbG9hdCwgYXJnMSwg
cmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFByb21vdGVGMzI+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBmcHIoKTsKKyAgICBhcHBlbmQoQ29udmVydEZsb2F0VG9Eb3VibGUsIGFyZzAsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NEFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGZwcigpOworICAgIGFwcGVuZChBZGREb3VibGUsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0RXh0ZW5kVUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOwor
ICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk5lPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoYXJnMCAmJiBhcmcxKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0UmVpbnRlcnByZXRJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmcHIoKTsKKyAg
ICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkVx
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENv
bXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnBy
KCk7CisgICAgYXBwZW5kKEZsb29yRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MkNvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKENv
bnZlcnRJbnQzMlRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxej4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChUZXN0MzIsIEFyZzo6cmVzQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFJlaW50ZXJwcmV0RjY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJTPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJzaGlmdDY0
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJldHVybiBhZGRTaGlmdChVcnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTcXJ0PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZnByKCk7CisgICAgYXBwZW5kKFNxcnREb3VibGUsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJldHVybiBhZGRTaGlmdChMc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkd0PihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAgYXBw
ZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVH
cmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMldyYXBJNjQ+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZFNoaWZ0KFJvdGF0ZUxlZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJv
dHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoUm90
YXRlUmlnaHQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRFeHRlbmRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZ3ByKCk7CisgICAg
YXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJH
dFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJU
aGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TmVnPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZnByKCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKE5lZ2F0ZURvdWJsZSwgQXJn
OjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKE5lZ2F0ZURvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgVG1wIGNvbnN0YW50ID0gYWRkQ29uc3RhbnQoVHlw
ZTo6STY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oLTAuMCkp
KTsKKyAgICAgICAgVG1wIHRlbXAgPSBncHIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGVU
bzY0LCBhcmcwLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBjb25zdGFudCwgdGVtcCk7
CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICB9Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGZwcigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRC
bG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
aXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZERvdWJsZSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVh
bC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBN
b3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91
YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJn
MCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNvbnRpbnVh
dGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7
CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZ3ByKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRMZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBncHIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFkZD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGdwcigpOworICAgIGFwcGVu
ZChBZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlv
bkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1l
bW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVw
Q291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNDA0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lk
IEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluCiAgICAgZWZmZWN0cy5yZWFkcyA9
IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3Rz
OwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUikpOwotICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZh
bHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOyAvLyBPT1BTOiBQcm9iYWJseSBzaG91bGQg
YmUgdXNpbmcgYXJnIQogICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gbV93YXNt
Q29udGV4dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7
CiAgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BS
KTsKQEAgLTQ1OSw5ICs0NTksOSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3Nl
bWJseUdsCiAKICAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgPT0gUmVzdG9yZUNhY2hl
ZFN0YWNrTGltaXQ6OlllcykgewogICAgICAgICAvLyBUaGUgSW5zdGFuY2UgY2FjaGVzIHRoZSBz
dGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9uaWNhbCBsb2NhdGlvbiBp
cy4KLSAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpv
ZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOwotICAgICAgICBWYWx1ZSogYWN0
dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJUb0FjdHVhbFN0YWNr
TGltaXQpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1pdCwgaW5zdGFuY2VWYWx1ZSgp
LCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkp
KTsKKyAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQgPSBibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZlBv
aW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOworICAgICAgICBWYWx1ZSogYWN0dWFsU3RhY2tM
aW1pdCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQpOworICAgICAgICBi
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgYWN0
dWFsU3RhY2tMaW1pdCwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsgLy8gT09QUzogc2hvdWxkIGJlIGJsb2Nr
IQogICAgIH0KIAogICAgIGlmICghIW1lbW9yeSkgewpAQCAtMTYwOSw2ICsxNjA5LDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2NAogICAgIGlmIChpc1g4NigpKQog
ICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogI2lm
IENQVShYODZfNjQpCkBAIC0xNjI5LDYgKzE2MzAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyQ29uCiAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgIHBhdGNocG9pbnQt
Pm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0
cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgcGF0Y2hwb2lu
dC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTE4
MzgsNyArMTg0MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnUK
ICAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKICAgICB9CiAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOyAvLyBPT1BTOiBUaGlzIGxv
b2tzIHN1cGVyIHdyb25nIGdpdmVuIHdlIGRvbid0IHNheSB3ZSBjbG9iYmVyIHRoaXMhCiAgICAg
ICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKICAgICAgICAgRlBSUmVnIGNvbnN0
YW50ID0gSW52YWxpZEZQUlJlZzsKICAgICAgICAgaWYgKGlzWDg2KCkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI0MDQ3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2lu
Y2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCkBAIC0yNzEsNyArMjcyLDcgQEAgdm9p
ZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aQogCiAgICAgICAgIG1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4oKTsKICAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJC
UVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0
cjsKLSAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUo
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEo
KSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBD
b21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dh
c21FeGNlcHRpb24pOworICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGll
clVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJz
ZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5jcHAJKHJldmlzaW9uIDI0MDQ3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDYgKzYyLDM2IEBAIGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNhbGxp
bmcKICAgICByZXR1cm4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOwogfQogCitjb25zdCBK
U0NDYWxsaW5nQ29udmVudGlvbkFpciYganNjQ2FsbGluZ0NvbnZlbnRpb25BaXIoKQoreworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SlNDQ2FsbGluZ0NvbnZlbnRpb25BaXI+IHN0YXRp
Y0pTQ0NhbGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljSlNDQ2Fs
bGluZ0NvbnZlbnRpb25GbGFnLCBbXSAoKSB7CisgICAgICAgIHN0YXRpY0pTQ0NhbGxpbmdDb252
ZW50aW9uLmNvbnN0cnVjdChWZWN0b3I8UmVnPigpLCBWZWN0b3I8UmVnPigpLCBSZWdpc3RlclNl
dDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbjsKK30KKworY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uQWly
JiB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8V2FzbUNhbGxpbmdDb252ZW50aW9uQWlyPiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRp
b247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlv
bkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uRmxh
ZywgW10gKCkgeworICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJlZ2lzdGVycyhHUFJJ
bmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKKyAgICAg
ICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lz
dGVyKGkpOworCisgICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVnaXN0ZXJzKEZQUklu
Zm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAg
ICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0
ZXIoaSk7CisKKyAgICAgICAgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVjdChX
VEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1bWVudFJlZ2lzdGVy
cyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0pOworCisgICAg
cmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNp
b24gMjQwNDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIK
ICNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKQEAgLTQ0LDI3ICs0NSwyNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi10eXBlZGVmIHVuc2lnbmVkICgqTmV4dE9mZnNl
dCkodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUgdHlwZSk7Cit0eXBlZGVmIHVuc2ln
bmVkICgqTmV4dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9mZnNldCk7CiAKIHRlbXBsYXRlPHVu
c2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgogY2xhc3MgQ2FsbGlu
Z0NvbnZlbnRpb24gewogcHVibGljOgogICAgIENhbGxpbmdDb252ZW50aW9uKFZlY3RvcjxSZWc+
JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYmIGNhbGxlZVNh
dmVSZWdpc3RlcnMpCi0gICAgICAgIDogbV9ncHJBcmdzKGdwckFyZ3MpCi0gICAgICAgICwgbV9m
cHJBcmdzKGZwckFyZ3MpCi0gICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKGNhbGxlZVNh
dmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKFdURk1vdmUoZ3ByQXJncykpCisgICAg
ICAgICwgbV9mcHJBcmdzKFdURk1vdmUoZnByQXJncykpCisgICAgICAgICwgbV9jYWxsZWVTYXZl
UmVnaXN0ZXJzKFdURk1vdmUoY2FsbGVlU2F2ZVJlZ2lzdGVycykpCiAgICAgewogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBCMzo6VmFsdWVSZXAgbWFyc2hhbGxBcmd1bWVudEltcGwoVmVjdG9yPFJl
Zz4gcmVnQXJncywgQjM6OlR5cGUgdHlwZSwgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09m
ZnNldCkgY29uc3QKKyAgICBCMzo6VmFsdWVSZXAgbWFyc2hhbGxBcmd1bWVudEltcGwoY29uc3Qg
VmVjdG9yPFJlZz4mIHJlZ0FyZ3MsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkKICAgICAg
ICAgICAgIHJldHVybiBCMzo6VmFsdWVSZXA6OnJlZyhyZWdBcmdzW2NvdW50KytdKTsKIAogICAg
ICAgICBjb3VudCsrOwogICAgICAgICBCMzo6VmFsdWVSZXAgcmVzdWx0ID0gQjM6OlZhbHVlUmVw
OjpzdGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KTsKLSAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRh
dGVPZmZzZXQoc3RhY2tPZmZzZXQsIHR5cGUpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0
ZU9mZnNldChzdGFja09mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBA
IC03MywxMCArNzQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAg
ICAgIGNhc2UgQjM6OkludDMyOgogICAgICAgICBjYXNlIEIzOjpJbnQ2NDoKLSAgICAgICAgICAg
IHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIHR5cGUsIGdwQXJndW1lbnRD
b3VudCwgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJ
bXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CiAgICAgICAgIGNh
c2UgQjM6OkZsb2F0OgogICAgICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAgICAgICAgICByZXR1
cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCB0eXBlLCBmcEFyZ3VtZW50Q291bnQs
IHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbCht
X2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwogICAgICAgICBjYXNlIEIz
OjpWb2lkOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE4OSwxOSArMTkwLDE0
NCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJz
OwogfTsKIAotaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWduZWQgY3VycmVudE9m
ZnNldCwgQjM6OlR5cGUpCit0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0
IHVwZGF0ZU9mZnNldD4KK2NsYXNzIENhbGxpbmdDb252ZW50aW9uQWlyIHsKK3B1YmxpYzoKKyAg
ICBDYWxsaW5nQ29udmVudGlvbkFpcihWZWN0b3I8UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+
JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICA6
IG1fZ3ByQXJncyhXVEZNb3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnByQXJncyhXVEZNb3Zl
KGZwckFyZ3MpKQorICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKGNhbGxl
ZVNhdmVSZWdpc3RlcnMpKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc2NyYXRjaCA9IFJl
Z2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVkZShSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBzY3JhdGNoLmV4Y2x1ZGUoUmVn
aXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAgIHNjcmF0Y2gu
ZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgIGZvciAoUmVn
IHJlZyA6IG1fZ3ByQXJncykKKyAgICAgICAgICAgIHNjcmF0Y2guY2xlYXIocmVnKTsKKyAgICAg
ICAgZm9yIChSZWcgcmVnIDogbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICAgICAgc2Ny
YXRjaC5jbGVhcihyZWcpOworICAgICAgICBmb3IgKFJlZyByZWcgOiBzY3JhdGNoKQorICAgICAg
ICAgICAgbV9zY3JhdGNoR1BScy5hcHBlbmQocmVnKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9zY3JhdGNoR1BScy5zaXplKCkgPj0gMik7CisgICAgfQorCisgICAgR1BSUmVnIHByb2xvZ3Vl
U2NyYXRjaChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zY3JhdGNoR1BSc1tpXS5ncHIoKTsg
fQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWdGdW5jLCB0eXBlbmFtZSBT
dGFja0Z1bmM+CisgICAgdm9pZCBtYXJzaGFsbEFyZ3VtZW50SW1wbChjb25zdCBWZWN0b3I8UmVn
PiYgcmVnQXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCwgY29uc3QgUmVn
RnVuYyYgcmVnRnVuYywgY29uc3QgU3RhY2tGdW5jJiBzdGFja0Z1bmMpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgcmVnRnVu
YyhyZWdBcmdzW2NvdW50KytdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGNvdW50Kys7CisgICAgICAgIHN0YWNrRnVuYyhzdGFja09mZnNldCk7CisgICAgICAg
IHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0KTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgUmVnRnVuYywgdHlwZW5hbWUgU3RhY2tGdW5jPgorICAgIHZvaWQg
bWFyc2hhbGxBcmd1bWVudChUeXBlIHR5cGUsIHNpemVfdCYgZ3BBcmd1bWVudENvdW50LCBzaXpl
X3QmIGZwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCwgY29uc3QgUmVnRnVuYyYg
cmVnRnVuYywgY29uc3QgU3RhY2tGdW5jJiBzdGFja0Z1bmMpIGNvbnN0CisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2Ug
VHlwZTo6STY0OgorICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCBn
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCByZWdGdW5jLCBzdGFja0Z1bmMpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6
OkY2NDoKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgZnBBcmd1
bWVudENvdW50LCBzdGFja09mZnNldCwgcmVnRnVuYywgc3RhY2tGdW5jKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworcHVibGljOgorICAgIHN0YXRpYyB1bnNp
Z25lZCBoZWFkZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBsb2FkQXJndW1lbnRzKGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsK
KyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBmcEFy
Z3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qgc3RhY2tPZmZzZXQgPSBoZWFkZXJTaXpl
OworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKTsgKytpKSB7CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50KHNpZ25hdHVyZS5hcmd1
bWVudChpKSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LAor
ICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBmdW5j
dG9yKEIzOjpBaXI6OlRtcChyZWcpLCBpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIFsmXSAoc2l6ZV90IHN0YWNrT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGZ1
bmN0b3IoQjM6OkFpcjo6QXJnOjphZGRyKEIzOjpBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciksIHN0YWNrT2Zmc2V0KSwgaSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlIHBhY2hwb2ludEZ1bmN0
b3Igc2V0cyB0aGUgZ2VuZXJhdG9yIGZvciB0aGUgY2FsbCBvcGVyYXRpb24uCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldHVwQ2FsbChCMzo6QWlyOjpDb2RlJiBj
b2RlLCBUeXBlIHJldHVyblR5cGUsIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQsIGNv
bnN0IFZlY3RvcjxCMzo6QWlyOjpUbXA+JiBhcmdzLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAg
IHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qgc3RhY2tPZmZzZXQg
PSBoZWFkZXJTaXplIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisgICAgICAgIGZvciAo
YXV0byB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50KHRtcC5pc0dQ
KCkgPyBUeXBlOjpJNjQgOiBUeXBlOjpGNjQsIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rvcih0bXAsIEIzOjpWYWx1ZVJlcDo6cmVnKHJlZykpOworICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgWyZdIChzaXplX3Qgc3RhY2tPZmZzZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0bXAsIEIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudChzdGFja09mZnNldCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisK
KyAgICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOworCisgICAg
ICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVn
aXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6
dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisKKyAgICAgICAgc3dpdGNoIChyZXR1cm5U
eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBj
b25zdCBWZWN0b3I8UmVnPiBtX2dwckFyZ3M7CisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9mcHJB
cmdzOworICAgIFZlY3RvcjxSZWc+IG1fc2NyYXRjaEdQUnM7CisgICAgY29uc3QgUmVnaXN0ZXJT
ZXQgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVy
U2F2ZVJlZ2lzdGVyczsKK307CisKK2lubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0KHVuc2ln
bmVkIGN1cnJlbnRPZmZzZXQpCiB7CiAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQgKyBzaXplb2Yo
UmVnaXN0ZXIpOwogfQogCiBjb25zdGV4cHIgdW5zaWduZWQganNjSGVhZGVyU2l6ZSA9IEV4ZWNT
dGF0ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKTsKLXR5cGVkZWYg
Q2FsbGluZ0NvbnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD4gSlNDQ2FsbGlu
Z0NvbnZlbnRpb247Ci0KLXR5cGVkZWYgSlNDQ2FsbGluZ0NvbnZlbnRpb24gV2FzbUNhbGxpbmdD
b252ZW50aW9uOwogCit1c2luZyBKU0NDYWxsaW5nQ29udmVudGlvbiA9IENhbGxpbmdDb252ZW50
aW9uPGpzY0hlYWRlclNpemUsIG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNhbGxpbmdDb252
ZW50aW9uID0gSlNDQ2FsbGluZ0NvbnZlbnRpb247CiBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlv
biYganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKIGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbiYg
d2FzbUNhbGxpbmdDb252ZW50aW9uKCk7CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uQWly
ID0gQ2FsbGluZ0NvbnZlbnRpb25BaXI8anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1
c2luZyBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIgPSBKU0NDYWxsaW5nQ29udmVudGlvbkFpcjsK
K2NvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigp
OworY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb25B
aXIoKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360531</attachid>
            <date>2019-01-29 17:51:54 -0800</date>
            <delta_ts>2019-01-30 17:02:25 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>167157</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQwNjk3KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNjMzLDkgKzYzMyw5IEBAIGNsYXNzIERl
ZmF1bHRCZW5jaG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIHByaW50KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVy
KHRoaXMuZmlyc3RJdGVyYXRpb24pLCAibXMiKTsKLSAgICAgICAgcHJpbnQoIiAgICBXb3JzdCBD
YXNlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy53b3JzdDQpLCAibXMiKTsKLSAgICAgICAgcHJp
bnQoIiAgICBBdmVyYWdlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSwgIm1zIik7
CisgICAgICAgIHByaW50KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuZmly
c3RJdGVyYXRpb24pKTsKKyAgICAgICAgcHJpbnQoIiAgICBXb3JzdCBDYXNlOiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy53b3JzdDQpKTsKKyAgICAgICAgcHJpbnQoIiAgICBBdmVyYWdlOiIsIHVp
RnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7CiAgICAgICAgIHByaW50KCIgICAgU2NvcmU6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRp
b24pIHsKICAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKQEAgLTcyNyw4ICs3MjcsOCBAQCBj
bGFzcyBXU0xCZW5jaG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsgewogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgcHJpbnQoIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51
bWJlcih0aGlzLnN0ZGxpYiksICJtcyIpOwotICAgICAgICBwcmludCgiICAgIFRlc3RzOiIsIHVp
RnJpZW5kbHlOdW1iZXIodGhpcy5tYWluUnVuKSwgIm1zIik7CisgICAgICAgIHByaW50KCIgICAg
U3RkbGliOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGRsaWIpKTsKKyAgICAgICAgcHJpbnQo
IiAgICBUZXN0czoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMubWFpblJ1bikpOwogICAgICAgICBw
cmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAgICAg
ICBpZiAoUkFNaWZpY2F0aW9uKSB7CiAgICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9v
dHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CkBAIC04
ODMsOCArODgzLDggQEAgY2xhc3MgV2FzbUJlbmNobWFyayBleHRlbmRzIEJlbmNobWFyayB7CiAg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNjb3JlSUQpLmlubmVySFRN
TCA9IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTdGFydHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5zdGFydHVwVGltZSksICJtcyIpOwotICAgICAgICBwcmludCgiICAgIFJ1biB0aW1lOiIs
IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5ydW5UaW1lKSwgIm1zIik7CisgICAgICAgIHByaW50KCIg
ICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3RhcnR1cFRpbWUpKTsKKyAgICAg
ICAgcHJpbnQoIiAgICBSdW4gdGltZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMucnVuVGltZSkp
OwogICAgICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7CiAgICAgICAgICAgICBwcmludCgiICAgIEN1
cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50
KSk7CiAgICAgICAgICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CkBAIC0xNTM4LDcgKzE1MzgsNyBAQCBsZXQgcnVu
U2VhTW9uc3RlciA9IHRydWU7CiBsZXQgcnVuQ29kZUxvYWQgPSB0cnVlOwogbGV0IHJ1bldhc20g
PSB0cnVlOwogCi1pZiAoZmFsc2UpIHsKK2lmICh0cnVlKSB7CiAgICAgcnVuT2N0YW5lID0gZmFs
c2U7CiAgICAgcnVuQVJFUyA9IGZhbHNlOwogICAgIHJ1bldTTCA9IGZhbHNlOwpAQCAtMTU1MCw3
ICsxNTUwLDcgQEAgaWYgKGZhbHNlKSB7CiAgICAgcnVuV29ya2VyVGVzdHMgPSBmYWxzZTsKICAg
ICBydW5TZWFNb25zdGVyID0gZmFsc2U7CiAgICAgcnVuQ29kZUxvYWQgPSBmYWxzZTsKLSAgICBy
dW5XYXNtID0gZmFsc2U7CisgICAgcnVuV2FzbSA9IHRydWU7CiB9CiAKIGlmICh0eXBlb2YgdGVz
dExpc3QgIT09ICJ1bmRlZmluZWQiKSB7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bTIvd2FzbS9IYXNoU2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi93YXNtL0hhc2hTZXQuanMJKHJldmlzaW9uIDI0MDY5NykKKysrIFBlcmZvcm1hbmNlVGVz
dHMvSmV0U3RyZWFtMi93YXNtL0hhc2hTZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwMDYsNiAr
MTAwNiw4IEBAIHZhciBfX19lcnJub19sb2NhdGlvbiA9IE1vZHVsZVsiX19fZXJybm8KIH0pOwog
dmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9uKCkgewogIGxldCBzdGFydCA9
IGJlbmNobWFya1RpbWUoKTsKKyAgICByZXBvcnRSdW5UaW1lKDEpOworICAgIHJldHVybiAwOwog
IGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7
CiAgcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7CiAgcmV0dXJuIHJldDsK
SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2djYy1sb29wcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9nY2MtbG9vcHMuanMJ
KHJldmlzaW9uIDI0MDY5NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL2dj
Yy1sb29wcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTIwNCw2ICs1MjA0LDggQEAgdmFyIF9sbHZt
X2Jzd2FwX2kzMiA9IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBNb2R1bGVb
Il9tYWluIl0gPSAoZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGltZSgpOwor
ICAgIHJlcG9ydFJ1blRpbWUoMSk7CisgICAgcmV0dXJuIDA7CiAgbGV0IHJldCA9IE1vZHVsZVsi
YXNtIl1bIl9tYWluIl0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICByZXBvcnRSdW5UaW1lKGJl
bmNobWFya1RpbWUoKSAtIHN0YXJ0KTsKICByZXR1cm4gcmV0OwpJbmRleDogUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3F1aWNrc29ydC5qcwkocmV2aXNpb24gMjQwNjk3KQor
KysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL3dhc20vcXVpY2tzb3J0LmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDI4LDYgKzEwMjgsMTAgQEAgdmFyIF9mcmVlID0gTW9kdWxlWyJfZnJlZSJd
ID0gKGZ1bmN0aW9uKAogfSk7CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAoZnVuY3Rp
b24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGltZSgpOworCisgICAgcmVwb3J0UnVuVGlt
ZSgxKTsKKyAgICByZXR1cm4gMDsKKwogIGxldCByZXN1bHQgPSBNb2R1bGVbImFzbSJdWyJfbWFp
biJdLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1l
KCkgLSBzdGFydCk7CiAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0
U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCShyZXZpc2lvbiAyNDA2OTcpCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9yaWNoYXJkcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
OTMwLDYgKzkzMCw4IEBAIHZhciBfZ2V0UXBrdGNvdW50ID0gTW9kdWxlWyJfZ2V0UXBrdGNvdW4K
IH0pOwogdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gKGZ1bmN0aW9uKCkgewogIGxldCBz
dGFydCA9IGJlbmNobWFya1RpbWUoKTsKKyAgICByZXBvcnRSdW5UaW1lKDEpOworICAgIHJldHVy
biAwOwogIGxldCByZXQgPSBNb2R1bGVbImFzbSJdWyJfbWFpbiJdLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7CiAgcmVwb3J0UnVuVGltZShiZW5jaG1hcmtUaW1lKCkgLSBzdGFydCk7CiAgcmV0dXJu
IHJldDsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3RzZi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS90c2YuanMJKHJldmlz
aW9uIDI0MDY5NykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3RzZi5qcwko
d29ya2luZyBjb3B5KQpAQCAtNDc0Nyw2ICs0NzQ3LDkgQEAgdmFyIF9sbHZtX2Jzd2FwX2kzMiA9
IE1vZHVsZVsiX2xsdm1fYnN3YQogfSk7CiB2YXIgX21haW4gPSBNb2R1bGVbIl9tYWluIl0gPSAo
ZnVuY3Rpb24oKSB7CiAgbGV0IHN0YXJ0ID0gYmVuY2htYXJrVGltZSgpOworICAgIHJlcG9ydFJ1
blRpbWUoMSk7CisgICAgcmV0dXJuIDA7CisKICBsZXQgcmV0ID0gTW9kdWxlWyJhc20iXVsiX21h
aW4iXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogIHJlcG9ydFJ1blRpbWUoYmVuY2htYXJrVGlt
ZSgpIC0gc3RhcnQpOwogIHJldHVybiByZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg3Nyw2
ICs4NzcsOCBAQAogCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3
OEY4RDFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI2NzhGOTExQTA0MTc3QzAw
NkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNjc4RjkwMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9s
Rmxvd1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTI2QUM0QjcxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNkFDNEI1MUU5NzdD
NUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTI4NDdBREIyMUZGQjg2NjAwNjFBOURCIC8qIFdhc21B
aXJJUkdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNw
cCAqLzsgfTsKKwkJNTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdB
REEyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovOyB9OwogCQk1MkIz
MTBGQjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBGQTE5NzRBRTYx
MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdD
IC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAv
KiBSdW50aW1lVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0zMzU4LDYgKzMzNjAsOCBAQAogCQk1MjZBQzRCNDFFOTc3QzVEMDAzNTAwRTEg
LyogV2FzbUNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2QUM0
QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2FzbUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1Mjc3NzNERDFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVudGltZVR5cGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklS
R2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAv
KiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUFpcklSR2VuZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMxMEZBMTk3NEFFNjEwMDgwODU3
QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMxMEZD
MTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJCMzEwRkUxOTc1QjQyNDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNh
Y2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVMb2NhdGlvbkNhY2hlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MzQsNiArNjQzOCw4IEBACiAJCQkJQUQyRkNCOEEx
REI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAv
KiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2
IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCisJCQkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURC
IC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi8sCisJCQkJNTI4NDdBREEyMUZGQjg2MzAwNjFB
OURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovLAogCQkJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2
MDQ5RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8sCiAJCQkJNTNDQTczMDgxRUE1MzNEODAwNzYwNDlE
IC8qIFdhc21CQlFQbGFuLmggKi8sCiAJCQkJNTNGOEQxRkYxRTgzODdENDAwRDIxMTE2IC8qIFdh
c21CQlFQbGFuSW5saW5lcy5oICovLApAQCAtODUyOSw2ICs4NTM1LDcgQEAKIAkJCQk0MzZFNTQ1
MzFDNDY4RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MzE5REEwNDFDMUJFNDBEMDAxRDI2MEIgLyogQjNMb3dlck1hY3Jv
c0FmdGVyT3B0aW1pemF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTI4NDdBREMyMUZGQjg2
OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
Qzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDNBQjI2QzYxQzFBNTM1OTAwRDgyQUU2IC8qIEIzTWF0aEV4dHJhcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTA1NDAsNiArMTA1NDcsNyBAQAogCQkJCTUzNkIzMTlBMUY3MzVFNzgw
MDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIz
MTVGMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MzZCMzE5QjFGNzM1RTc4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTItbW0ubW0gaW4g
U291cmNlcyAqLywKKwkJCQk1Mjg0N0FEQjIxRkZCODY2MDA2MUE5REIgLyogV2FzbUFpcklSR2Vu
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTU3MUY3MUM1OTkwMDM3RkMzMyAv
KiBVbmlmaWVkU291cmNlMi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzBBNjZCOTFGQTNFNzhC
MDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZC
MzE1ODFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTMuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNp
b24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNjYsOCArMzM2Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBUbXAgcmV0dXJuVmFsdWVGUFIgPSBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwogICAg
ICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIFZvaWQ6
Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIGZvciBhIHZvaWQgdmFsdWUgdG8g
YmUgdXNlZCBhcyBhIGNoaWxkLiBJZiB3ZSBkaWQgd2FudCB0byBoYXZlIGEKLSAgICAgICAgICAg
ICAgICAvLyB2b2lkIHJldHVybiwgd2UnZCBpbnRyb2R1Y2UgYSBkaWZmZXJlbnQgb3Bjb2RlLCBs
aWtlIFJldHVyblZvaWQuCisgICAgICAgICAgICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIGZvciBh
IHZvaWQgdmFsdWUgdG8gYmUgdXNlZCBhcyBhIGNoaWxkLiBXZSB1c2UgUmV0Vm9pZAorICAgICAg
ICAgICAgICAgIC8vIGZvciB2b2lkIHJldHVybnMuCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw2ICsyNDAs
OSBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAorICAgIGlmICghdmFsdWUpIC8vIE9PUFMKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKICAgICByZXR1cm4gYXJnLmNhblJlcHJlc2VudCh2YWx1ZSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAy
NDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVnaXN0ZXJT
ZXQgZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0JikgZmluYWw7CiAgICAgUmVnaXN0
ZXJTZXQgZXh0cmFDbG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogCi0gICAgLy8gTm90
ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2Rl
ZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkgc29tZQorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55CiAgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgogICAg
IHZvaWQgZm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3Ms
IHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5NywxMSBA
QCBDb2RlOjp+Q29kZSgpCiB7CiB9CiAKK3ZvaWQgQ29kZTo6ZW1pdERlZmF1bHRQcm9sb2d1ZShD
Q2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBkZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3Ioaml0LCAq
dGhpcyk7Cit9CisKIHZvaWQgQ29kZTo6c2V0UmVnc0luUHJpb3JpdHlPcmRlcihCYW5rIGJhbmss
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzKQogewogICAgIHJlZ3NJblByaW9yaXR5T3JkZXJJbXBs
KGJhbmspID0gcmVnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDYgKzMzNSw4IEBAIHB1YmxpYzoKICAgICBSZWdp
c3RlclNldCBwaW5uZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3Bpbm5lZFJlZ3M7IH0K
ICAgICAKICAgICBXZWFrUmFuZG9tJiB3ZWFrUmFuZG9tKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9t
OyB9CisKKyAgICB2b2lkIGVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJik7CiAgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyA6OkpTQzo6QjM6OlByb2NlZHVyZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMjQwNjk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBjbGFzcyBDb2RlOwogCiBjbGFzcyBUbXAgewogcHVibGljOgotICAgIFRt
cCgpCisgICAgY29uc3RleHByIFRtcCgpCiAgICAgICAgIDogbV92YWx1ZSgwKQogICAgIHsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0NjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJh
dGUuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRl
LmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYuaCIKKyNpbmNs
dWRlICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUg
IkIzUGF0Y2hwb2ludFNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIK
KyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRl
ICJXYXNtQ29udGV4dElubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgor
I2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5o
IgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtT01HUGxhbi5oIgorI2lu
Y2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCit1c2luZyBuYW1lc3BhY2UgQjM6OkFpcjsK
Kworc3RydWN0IENvbnN0cmFpbmVkVG1wIHsKKyAgICBDb25zdHJhaW5lZFRtcChUbXAgdG1wKQor
ICAgICAgICA6IENvbnN0cmFpbmVkVG1wKHRtcCwgdG1wLmlzUmVnKCkgPyBCMzo6VmFsdWVSZXA6
OnJlZyh0bXAucmVnKCkpIDogQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpCisgICAgeyB9CisK
KyAgICBDb25zdHJhaW5lZFRtcChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKQorICAgICAgICA6
IHRtcCh0bXApCisgICAgICAgICwgcmVwKHJlcCkKKyAgICB7CisgICAgfQorCisgICAgVG1wIHRt
cDsKKyAgICBCMzo6VmFsdWVSZXAgcmVwOworfTsKKworY2xhc3MgVHlwZWRUbXAgeworcHVibGlj
OgorICAgIGNvbnN0ZXhwciBUeXBlZFRtcCgpCisgICAgICAgIDogbV90bXAoKQorICAgICAgICAs
IG1fdHlwZShUeXBlOjpWb2lkKQorICAgIHsgfQorCisgICAgVHlwZWRUbXAoVG1wIHRtcCwgVHlw
ZSB0eXBlKQorICAgICAgICA6IG1fdG1wKHRtcCkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAg
ICB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUeXBlZFRtcCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV90bXAgPT0gb3RoZXIubV90bXAgJiYgbV90eXBlID09
IG90aGVyLm1fdHlwZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFR5cGVkVG1w
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISF0
bXAoKTsgfQorCisgICAgb3BlcmF0b3IgVG1wKCkgY29uc3QgeyByZXR1cm4gdG1wKCk7IH0KKyAg
ICBvcGVyYXRvciBBcmcoKSBjb25zdCB7IHJldHVybiBBcmcodG1wKCkpOyB9CisgICAgVG1wIHRt
cCgpIGNvbnN0IHsgcmV0dXJuIG1fdG1wOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CisKK3ByaXZhdGU6CisgICAgVG1wIG1fdG1wOworICAgIFR5cGUgbV90eXBl
OworfTsKKworY2xhc3MgQWlySVJHZW5lcmF0b3IgeworcHVibGljOgorICAgIHN0cnVjdCBDb250
cm9sRGF0YSB7CisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBUeXBlIHJl
dHVyblR5cGUsIFR5cGVkVG1wIHJlc3VsdFRtcCwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sq
IGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgICAg
ICA6IGJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0
aW9uKQorICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCisgICAgICAgICAgICAsIHJldHVy
blR5cGUocmV0dXJuVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG9y
aWdpbik7IC8vIE9PUFMKKyAgICAgICAgICAgIGlmIChyZXN1bHRUbXApIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocmV0dXJuVHlwZSAhPSBUeXBlOjpWb2lkKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHJlc3VsdFRtcCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocmV0dXJuVHlwZSA9PSBUeXBlOjpWb2lkKTsKKyAgICAgICAgfQorCisgICAg
ICAgIENvbnRyb2xEYXRhKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAodHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6SWY6CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJJZjogICAgICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEJsb2NrVHlwZTo6QmxvY2s6CisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCJCbG9jazogICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEJsb2NrVHlwZTo6TG9vcDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkxvb3A6ICAg
ICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBl
OjpUb3BMZXZlbDoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlRvcExldmVsOiAiKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmlu
dCgiQ29udGludWF0aW9uOiAiLCAqY29udGludWF0aW9uLCAiLCBTcGVjaWFsOiAiKTsKKyAgICAg
ICAgICAgIGlmIChzcGVjaWFsKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgqc3BlY2lhbCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJOb25lIik7Cisg
ICAgICAgIH0KKworICAgICAgICBCbG9ja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJsb2Nr
VHlwZTsgfQorCisgICAgICAgIFR5cGUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gcmV0dXJu
VHlwZTsgfQorCisgICAgICAgIGJvb2wgaGFzTm9uVm9pZFNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIHJlc3VsdC5zaXplKCk7IH0KKworICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0Zv
ckJyYW5jaCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlKCkgPT0gQmxvY2tUeXBl
OjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjaWFsOworICAgICAgICAgICAgcmV0
dXJuIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29udmVydElmVG9C
bG9jaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gQmxvY2tUeXBl
OjpJZik7CisgICAgICAgICAgICBibG9ja1R5cGUgPSBCbG9ja1R5cGU6OkJsb2NrOworICAgICAg
ICAgICAgc3BlY2lhbCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB1c2luZyBSZXN1
bHRMaXN0ID0gVmVjdG9yPFR5cGVkVG1wLCAxPjsKKworICAgICAgICBSZXN1bHRMaXN0IHJlc3Vs
dEZvckJyYW5jaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlKCkgPT0g
QmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRMaXN0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBmcmllbmQgY2xhc3MgQWlySVJHZW5lcmF0b3I7CisgICAgICAgIEJsb2NrVHlwZSBibG9j
a1R5cGU7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKKyAgICAgICAgQmFzaWNC
bG9jayogc3BlY2lhbDsKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHQ7CisgICAgICAgIFR5cGUg
cmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUeXBlZFRt
cDsKKyAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOworICAgIHVzaW5nIEV4cHJl
c3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPjsKKyAgICB1c2luZyBSZXN1bHRM
aXN0ID0gQ29udHJvbERhdGE6OlJlc3VsdExpc3Q7CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0g
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisKKyAgICBzdGF0
aWMgY29uc3QgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uOworCisgICAgdXNpbmcgRXJy
b3JUeXBlID0gU3RyaW5nOworICAgIHVzaW5nIFVuZXhwZWN0ZWRSZXN1bHQgPSBVbmV4cGVjdGVk
PEVycm9yVHlwZT47CisgICAgdXNpbmcgUmVzdWx0ID0gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+OworICAgIHVzaW5nIFBhcnRpYWxSZXN1bHQg
PSBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4u
LkFyZ3M+CisgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNw
YWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1v
ZHVsZSBmYWlsZWQgY29tcGlsaW5nOiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9
CisKKyNkZWZpbmUgV0FTTV9DT01QSUxFX0ZBSUxfSUYoY29uZGl0aW9uLCAuLi4pIGRvIHsgXAor
ICAgICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKKyAgICB9IHdo
aWxlICgwKQorCisgICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBC
Mzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYp
OworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNv
bnN0IFNpZ25hdHVyZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChU
eXBlLCB1aW50NjRfdCk7CisgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoQmFzaWNCbG9j
ayosIFR5cGUsIHVpbnQ2NF90KTsKKworICAgIC8vIExvY2FscworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2Nh
bCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gR2xvYmFs
cworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSk7CisKKyAgICAvLyBNZW1vcnkKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBC
YXNpYyBvcGVyYXRvcnMKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZTxPcFR5cGU+CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkT3AoRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUg
cmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Np
b25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworCisgICAgLy8gQ29udHJvbCBmbG93CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBDb250cm9sRGF0YSBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQmxvY2soVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRh
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb29wKFR5cGUgc2lnbmF0dXJlKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IFR5cGUgc2lnbmF0dXJlLCBDb250cm9sRGF0YSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lv
bkxpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9V
bnJlYWNoYWJsZShDb250cm9sRGF0YSYpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxp
c3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0
b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBj
b25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOworCisgICAgLy8gQ2FsbHMKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxl
ZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKKworICAgIFBhcnRpYWxSZXN1bHQg
YWRkU2hpZnQoVHlwZSwgQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhw
cmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxS
ZXN1bHQgYWRkSW50ZWdlclN1YihCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywg
RXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFs
UmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRG
bG9hdGluZ1BvaW50QmluT3AoVHlwZSwgQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBs
aHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICB2
b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3Qg
RXhwcmVzc2lvbkxpc3QqIGV4cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBzZXRQYXJzZXIoRnVu
Y3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7
IH07CisKKyAgICBzdGF0aWMgVmVjdG9yPFRtcD4gdG9UbXBWZWN0b3IoY29uc3QgVmVjdG9yPFR5
cGVkVG1wPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgVmVjdG9yPFRtcD4gcmVzdWx0OworICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiB2ZWN0b3IpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGl0ZW0udG1wKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworcHJp
dmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdmFsaWRhdGVJbnN0KEluc3QmIGluc3QpCisg
ICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgaWYgKCFp
bnN0LmlzVmFsaWRGb3JtKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oaW5zdCk7Cisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0YXRpYyBBcmcgZXh0cmFjdEFyZyhjb25zdCBUeXBlZFRtcCYgdG1wKSB7IHJldHVy
biB0bXAudG1wKCk7IH0KKyAgICBzdGF0aWMgQXJnIGV4dHJhY3RBcmcoY29uc3QgVG1wJiB0bXAp
IHsgcmV0dXJuIEFyZyh0bXApOyB9CisgICAgc3RhdGljIEFyZyBleHRyYWN0QXJnKGNvbnN0IEFy
ZyYgYXJnKSB7IHJldHVybiBhcmc7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICB2b2lkIGFwcGVuZChCYXNpY0Jsb2NrKiBibG9jaywgS2luZCBraW5kLCBBcmd1
bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICAvLyBPT1BTOiBBZGQgb3JpZ2lu
CisgICAgICAgIGF1dG8mIGluc3QgPSBibG9jay0+YXBwZW5kKGtpbmQsIG51bGxwdHIsIGV4dHJh
Y3RBcmcoYXJndW1lbnRzKS4uLik7CisgICAgICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQo
S2luZCBraW5kLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBhcHBl
bmQobV9jdXJyZW50QmxvY2ssIGtpbmQsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICB2b2lkIGFwcGVuZEVmZmVjdGZ1bChCMzo6QWlyOjpPcGNvZGUgb3AsIEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIEtpbmQga2luZCA9IG9wOworICAgICAgICBraW5k
LmVmZmVjdHMgPSB0cnVlOworICAgICAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIGtpbmQsIHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIFRtcCB0
bXAoQjM6OkJhbmsgYmFuaykgeyByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsgfQorCisgICAg
VHlwZWRUbXAgZzMyKCkgeyByZXR1cm4geyB0bXAoQjM6OkdQKSwgVHlwZTo6STMyIH07IH0KKyAg
ICBUeXBlZFRtcCBnNjQoKSB7IHJldHVybiB7IHRtcChCMzo6R1ApLCBUeXBlOjpJNjQgfTsgfQor
ICAgIFR5cGVkVG1wIGYzMigpIHsgcmV0dXJuIHsgdG1wKEIzOjpGUCksIFR5cGU6OkYzMiB9OyB9
CisgICAgVHlwZWRUbXAgZjY0KCkgeyByZXR1cm4geyB0bXAoQjM6OkZQKSwgVHlwZTo6RjY0IH07
IH0KKworICAgIFR5cGVkVG1wIHRtcEZvclR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgcmV0
dXJuIGczMigpOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVybiBn
NjQoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICByZXR1cm4gZjMyKCk7
CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0dXJuIGY2NCgpOworICAg
ICAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGFkZFBhdGNocG9pbnQoQjM6
OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb2MuYWRkPEIzOjpQYXRjaHBv
aW50VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIHN0ZDo6Zm9yd2Fy
ZDxBcmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4u
LkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBC
Mzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQor
ICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwg
VmVjdG9yPENvbnN0cmFpbmVkVG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4p
KTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxv
Y2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0KQorICAgIHsKKyAgICAg
ICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+
CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0
Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBp
bmxpbmVTaXplPiYmIGFyZ3MpCisgICAgeworICAgICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNp
YWwpCisgICAgICAgICAgICBtX3BhdGNocG9pbnRTcGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBh
dGNocG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6
UGF0Y2hwb2ludFNwZWNpYWw+KCkpKTsKKworICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNo
LCBBcmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOworICAgICAgICBJbnN0IHJlc3Vs
dE1vdjsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50
eXBlKCkgIT0gQjM6OlZvaWQpOworICAgICAgICAgICAgc3dpdGNoIChwYXRjaC0+cmVzdWx0Q29u
c3RyYWludC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3Rl
cjoKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChwYXRjaC0+cmVzdWx0Q29u
c3RyYWludC5yZWcoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdE1vdiA9IEluc3QocmVzdWx0
LmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAocGF0Y2gtPnJlc3VsdENv
bnN0cmFpbnQucmVnKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKHBh
dGNoLT50eXBlKCkgPT0gQjM6OlZvaWQpOworICAgICAgICAKKyAgICAgICAgZm9yIChDb25zdHJh
aW5lZFRtcCYgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8gT09QUzogVWdoLCB0aGlzIGlz
IHN1cGVyIGNyYXBweSB0byBqdXN0IHVzZSBudWxscHRyIGZvciBCMzo6VmFsdWUqIGhlcmUuCisg
ICAgICAgICAgICAvLyBJIHRoaW5rIHRoaXMgd2lsbCBqdXN0IHdvcmssIGJ1dCBvdXIgYWx0ZXJu
YXRpdmUgb3B0aW9ucyBpcyB0byBhYnN0cmFjdAorICAgICAgICAgICAgLy8gb3IgcmVpbnZlbnQg
cGFydCBvZiBQYXRjaHBvaW50U3BlY2lhbC4KKyAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlW
YWx1ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNHUCgpID8g
QjM6OkludDY0IDogQjM6OkRvdWJsZSwgMCk7CisgICAgICAgICAgICBwYXRjaC0+YXBwZW5kKGR1
bW15VmFsdWUsIHRtcC5yZXApOworICAgICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtpbmQoKSkg
eworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAg
ICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcC50bXApOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAg
ICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ugd2FudCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMy
L2k2MyBhbmQgZjMyL2Y2NAorICAgICAgICAgICAgICAgIHBhdGNoLT5lYXJseUNsb2JiZXJlZCgp
LmNsZWFyKHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2Nr
LCB0bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCB0bXAucmVwLnJl
ZygpKTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcCh0bXAucmVwLnJlZygp
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJl
cDo6U3RhY2tBcmd1bWVudDogeworICAgICAgICAgICAgICAgIC8vIE9PUFM6IEkgdGhpbmsgd2Ug
d2FudCB0eXBlIGhlcmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2MyBhbmQgZjMyL2Y2NAorICAgICAg
ICAgICAgICAgIGF1dG8gYXJnID0gQXJnOjpjYWxsQXJnKHRtcC5yZXAub2Zmc2V0RnJvbVNQKCkp
OworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1v
dmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCBhcmcpOworICAgICAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXRjaC0+
cmVzdWx0Q29uc3RyYWludC5pc1JlZygpKQorICAgICAgICAgICAgcGF0Y2gtPmxhdGVDbG9iYmVy
ZWQoKS5jbGVhcihwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHBhdGNoLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKGc2NCgpLnRtcCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gcGF0Y2gtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGlu
c3QuYXJncy5hcHBlbmQoZjY0KCkudG1wKCkpOworCisgICAgICAgIHZhbGlkYXRlSW5zdChpbnN0
KTsKKyAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgICAgICBp
ZiAocmVzdWx0TW92KSB7CisgICAgICAgICAgICB2YWxpZGF0ZUluc3QocmVzdWx0TW92KTsKKyAg
ICAgICAgICAgIGJhc2ljQmxvY2stPmFwcGVuZChXVEZNb3ZlKHJlc3VsdE1vdikpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5jaCwgdHlwZW5hbWUgR2Vu
ZXJhdG9yPgorICAgIHZvaWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYgZW1pdEJyYW5jaCwgY29u
c3QgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICAvLyBXZSBmYWlsIGFsb25n
IHRoZSAidHJ1dGh5IiBlZGdlIG9mICdicmFuY2gnCisKKyAgICAgICAgQmFzaWNCbG9jayogY29u
dGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGZhaWxl
ZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICAKKyAgICAgICAgZW1pdEJyYW5jaCgpOwor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhmYWlsZWQsIGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgYXV0byogZmFpbGVkUGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6
OlZvaWQpOworICAgICAgICBmYWlsZWRQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoZ2VuZXJhdG9y
KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZmFpbGVkLCBmYWlsZWRQYXRjaHBvaW50LCBUbXAo
KSk7CisgICAgICAgIGFwcGVuZChmYWlsZWQsIE9vcHMpOworCisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
LCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEZ1bmMgZnVuYywgVHlwZWRU
bXAgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBlbWl0Q0NhbGwobV9jdXJy
ZW50QmxvY2ssIGZ1bmMsIHJlc3VsdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAg
ICB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIC4uLkFyZ3M+CisgICAg
dm9pZCBlbWl0Q0NhbGwoQmFzaWNCbG9jayogYmxvY2ssIEZ1bmMgZnVuYywgVHlwZWRUbXAgcmVz
dWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgeworICAgICAgICBCMzo6VHlwZSByZXN1bHRUeXBl
ID0gQjM6OlZvaWQ7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
cmVzdWx0LnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAg
ICAgICAgcmVzdWx0VHlwZSA9IEIzOjpJbnQzMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgICAgIHJlc3VsdFR5cGUgPSBC
Mzo6SW50NjQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGU6
OkYzMjoKKyAgICAgICAgICAgICAgICByZXN1bHRUeXBlID0gQjM6OkZsb2F0OworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICAg
ICAgcmVzdWx0VHlwZSA9IEIzOjpEb3VibGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvIG1ha2VEdW1t
eVZhbHVlID0gWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmlzR1AoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6
OkludDY0LCAwKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkQ29uc3RhbnQoQjM6Ok9y
aWdpbigpLCBCMzo6RG91YmxlLCAwKTsKKyAgICAgICAgfTsKKworICAgICAgICBCMzo6VmFsdWUq
IGR1bW15RnVuYyA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnVuYykpOworICAgICAgICBCMzo6VmFsdWUqIG9yaWdp
biA9IG1fcHJvYy5hZGQ8QjM6OkNDYWxsVmFsdWU+KHJlc3VsdFR5cGUsIEIzOjpPcmlnaW4oKSwg
QjM6OkVmZmVjdHM6Om5vbmUoKSwgZHVtbXlGdW5jLCBtYWtlRHVtbXlWYWx1ZSh0aGVBcmdzKS4u
Lik7CisKKyAgICAgICAgSW5zdCBpbnN0KENDYWxsLCBvcmlnaW4pOworCisgICAgICAgIFRtcCBj
YWxsZWUgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tUHRyKHRhZ0NGdW5j
dGlvblB0cjx2b2lkKj4oZnVuYywgQjNDQ2FsbFB0clRhZykpLCBjYWxsZWUpOworICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKGNhbGxlZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0LnRtcCgpKTsKKworICAgICAgICBmb3IgKFRtcCB0
bXAgOiBWZWN0b3I8VG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MudG1wKCkuLi4p
KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOworCisgICAgICAgIGJsb2NrLT5h
cHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgfQorCisgICAgc3RhdGljIEIzOjpBaXI6Ok9wY29k
ZSBtb3ZlT3BGb3JWYWx1ZVR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgcmV0dXJuIE1vdmUz
MjsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAg
ICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICByZXR1cm4gTW92ZUZsb2F0OworICAg
ICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZW1pdFRocm93RXhjZXB0aW9uKENDYWxsSGVs
cGVycyYsIEV4Y2VwdGlvblR5cGUpOworCisgICAgdm9pZCBlbWl0VGllclVwQ2hlY2sodWludDMy
X3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4pOworCisgICAgRXhwcmVzc2lvblR5cGUgZW1p
dENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qg
b2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CisgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRP
cChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwor
ICAgIHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIs
IEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOworCisgICAgdm9pZCB1bmlm
eShjb25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNl
KTsKKyAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiBy
ZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgc3RhY2spOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEludFR5cGU+CisgICAgdm9pZCBlbWl0Q2hlY2tzRm9yTW9kT3JEaXYoYm9vbCBpc1Np
Z25lZERpdiwgRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQpOworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+CisgICAgdm9pZCBlbWl0TW9kT3JEaXYoYm9v
bCBpc0RpdiwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOworCisgICAgaW50MzJfdCBXQVJOX1VOVVNFRF9SRVRVUk4gZml4dXBQ
b2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90KTsKKworICAgIHZvaWQg
cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayosIFR5cGVkVG1wKTsKKyAgICBl
bnVtIGNsYXNzIFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHsgTm8sIFllcyB9OworICAgIHZvaWQg
cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQsIGNv
bnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgVHlwZWRUbXAgaW5zdGFuY2UsIEJhc2ljQmxvY2sqKTsK
KworICAgIEIzOjpPcmlnaW4gb3JpZ2luKCk7IC8vIE9PUFM6IFdlIG5lZWQgdG8gbWFrZSBhbiBB
aXI6Ok9yaWdpbiBzaW5jZSB3ZSdyZSBub3QgZ2VuZXJhdGluZyBmcm9tIEIzIGNvZGUuCisKKyAg
ICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9Owor
ICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgY29uc3QgTWVtb3J5TW9k
ZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OworICAgIGNvbnN0IENvbXBp
bGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSB9
OworICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07CisgICAg
Y29uc3QgVGllclVwQ291bnQqIG1fdGllclVwIHsgbnVsbHB0ciB9OworCisgICAgQjM6OlByb2Nl
ZHVyZSYgbV9wcm9jOworICAgIENvZGUmIG1fY29kZTsKKyAgICBCYXNpY0Jsb2NrKiBtX2N1cnJl
bnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9jayB7IG51bGxw
dHIgfTsKKyAgICBWZWN0b3I8VHlwZWRUbXA+IG1fbG9jYWxzOworICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNo
IGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxk
IGJlIHBhdGNoZWQgd2l0aC4KKyAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlkR1BSUmVnIH07Cisg
ICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAg
ICBib29sIG1fbWFrZXNDYWxscyB7IGZhbHNlIH07CisKKyAgICBUeXBlZFRtcCBtX2luc3RhbmNl
VmFsdWU7IC8vIEFsd2F5cyB1c2UgdGhlIGFjY2Vzc29yIGJlbG93IHRvIGVuc3VyZSB0aGUgaW5z
dGFuY2UgdmFsdWUgaXMgbWF0ZXJpYWxpemVkIHdoZW4gdXNlZC4KKyAgICBib29sIG1fdXNlc0lu
c3RhbmNlVmFsdWUgeyBmYWxzZSB9OworICAgIFR5cGVkVG1wIGluc3RhbmNlVmFsdWUoKQorICAg
IHsKKyAgICAgICAgbV91c2VzSW5zdGFuY2VWYWx1ZSA9IHRydWU7CisgICAgICAgIHJldHVybiBt
X2luc3RhbmNlVmFsdWU7CisgICAgfQorCisgICAgdWludDMyX3QgbV9tYXhOdW1KU0NhbGxBcmd1
bWVudHMgeyAwIH07CisKKyAgICBCMzo6UGF0Y2hwb2ludFNwZWNpYWwqIG1fcGF0Y2hwb2ludFNw
ZWNpYWwgeyBudWxscHRyIH07Cit9OworCitjb25zdCBUeXBlZFRtcCBBaXJJUkdlbmVyYXRvcjo6
ZW1wdHlFeHByZXNzaW9uID0gVHlwZWRUbXAgeyB9OworCisvLyBNZW1vcnkgYWNjZXNzZXMgaW4g
V2ViQXNzZW1ibHkgaGF2ZSB1bnNpZ25lZCAzMi1iaXQgb2Zmc2V0cywgd2hlcmVhcyB0aGV5IGhh
dmUgc2lnbmVkIDMyLWJpdCBvZmZzZXRzIGluIEIzLgoraW50MzJfdCBBaXJJUkdlbmVyYXRvcjo6
Zml4dXBQb2ludGVyUGx1c09mZnNldChFeHByZXNzaW9uVHlwZSYgcHRyLCB1aW50MzJfdCBvZmZz
ZXQpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpID4gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgeworICAg
ICAgICBhdXRvIHByZXZpb3VzUHRyID0gcHRyOworICAgICAgICBwdHIgPSBnNjQoKTsKKyAgICAg
ICAgYXV0byBjb25zdGFudCA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0ob2Zmc2V0KSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNvbnN0YW50LCBw
cmV2aW91c1B0ciwgcHRyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBv
ZmZzZXQ7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3Rh
bmNlKEJhc2ljQmxvY2sqIGJsb2NrLCBUeXBlZFRtcCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRj
aHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgaWYgKENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQorICAgICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2Fs
bEhlbHBlcnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0
Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBCZWNhdXNlIFdhc21Ub1dhc20gY2FsbCBjbG9iYmVycyB3YXNtQ29udGV4dElu
c3RhbmNlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCByZXN0b3JlIGl0LCB3ZSBuZWVkIHRvIHJlc3Rv
cmUgaXQgaW4gdGhlIGNhbGxlciBzaWRlLgorICAgIC8vIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1
c2luZyBBcmd1bWVudFJlZyB0byB0aGlzIChsb2dpY2FsbHkpIGltbXV0YWJsZSBwaW5uZWQgcmVn
aXN0ZXIuCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOwor
ICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVj
dHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5n
ZTo6dG9wKCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKSk7
CisgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBtX3dhc21Db250ZXh0SW5zdGFu
Y2VHUFI7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtKSB7CisgICAgICAg
IGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKyAgICB9
KTsKKyAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKK30KKworQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24q
IGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlKQorICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fY29t
cGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKKyAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5j
dGlvbkluZGV4KQorICAgICwgbV90aWVyVXAodGllclVwKQorICAgICwgbV9wcm9jKHByb2NlZHVy
ZSkKKyAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQorICAgICwgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKK3sKKyAgICBtX2N1cnJlbnRCbG9jayA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIG1fcm9vdEJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisK
KyAgICAvLyBGSVhNRSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwaW4gcmVnaXN0ZXJzIGhlcmUg
aWYgdGhlcmUncyBubyBtZW1vcnkuIEl0IG1ha2VzIHdhc20gLT4gd2FzbSB0aHVua3Mgc2ltcGxl
ciBmb3Igbm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NjIz
CisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKKworICAgIG1fbWVtb3J5QmFzZUdQUiA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CisgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CisK
KyAgICBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyOworICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICBt
X2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKKworICAgIGlmICht
b2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICBBU1NFUlQoIXBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgbV9tZW1vcnlTaXplR1BS
ID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9y
IChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJl
Z2lzdGVyKTsKKyAgICB9CisKKyAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICAgICBU
aHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRp
b24pOworCisgICAgaWYgKGluZm8ubWVtb3J5KSB7CisgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7
CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6CisgICAgICAgICAgICAv
LyBNb3N0IG1lbW9yeSBhY2Nlc3NlcyBpbiBzaWduYWxpbmcgbW9kZSBkb24ndCBkbyBhbiBleHBs
aWNpdAorICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrIGJlY2F1c2UgdGhleSBjYW4gcmVs
eSBvbiBmYXVsdCBoYW5kbGluZyB0byBkZXRlY3QKKyAgICAgICAgICAgIC8vIG91dC1vZi1ib3Vu
ZHMgYWNjZXNzZXMuIEZhdWx0U2lnbmFsSGFuZGxlciBub25ldGhlbGVzcyBuZWVkcyB0aGUKKyAg
ICAgICAgICAgIC8vIHRodW5rIHRvIGV4aXN0IHNvIHRoYXQgaXQgY2FuIGp1bXAgdG8gdGhhdCB0
aHVuay4KKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghVGh1bmtzOjpzaW5nbGV0b24oKS5zdHVi
KHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikpKQorICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1f
Y29kZS5zZXROdW1FbnRyeXBvaW50cygxKTsKKworICAgIEdQUlJlZyBjb250ZXh0SW5zdGFuY2Ug
PSBDb250ZXh0Ojp1c2VGYXN0VExTKCkgPyB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9s
b2d1ZVNjcmF0Y2goMSkgOiBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFI7CisKKyAgICBSZWY8QjM6
OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVk
VGFzazxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBCMzo6QWlyOjpDb2RlJiBjb2RlKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgY29kZS5lbWl0RGVmYXVs
dFByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQ
UiA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICAg
ICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW2NvbXBpbGF0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIoY2FsbGVlR1BSLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOworICAgICAgICAgICAgaml0LmVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
OworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQz
Ml90PiB3YXNtRnJhbWVTaXplID0gbV9jb2RlLmZyYW1lU2l6ZSgpOworICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgbWluaW11bVBhcmVudENoZWNrU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDEwMjQpOworICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgZXh0cmFGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCBzdGQ6Om1heDx1aW50MzJfdD4oCisgICAgICAgICAgICAgICAgLy8gVGhp
cyBhbGxvd3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hlY2tzIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUg
dGVybWluYWwgbm9kZXMgaW4gdGhlIGNhbGwKKyAgICAgICAgICAgICAgICAvLyB0cmVlLCAoZS5n
IHRoZXkgZG9uJ3QgbWFrZSBhbnkgY2FsbHMpIGFuZCBoYXZlIGEgc21hbGwgZW5vdWdoIGZyYW1l
IHNpemUuIFRoaXMgd29ya3MgYnkKKyAgICAgICAgICAgICAgICAvLyBoYXZpbmcgYW55IHN1Y2gg
dGVybWluYWwgbm9kZSBoYXZlIGl0cyBwYXJlbnQgY2FsbGVyIGluY2x1ZGUgc29tZSBleHRyYSBz
aXplIGluIGl0cworICAgICAgICAgICAgICAgIC8vIG93biBjaGVjayBmb3IgaXQuIFRoZSBnb2Fs
IGhlcmUgaXMgdHdvZm9sZDoKKyAgICAgICAgICAgICAgICAvLyAxLiBFbWl0IGxlc3MgY29kZS4K
KyAgICAgICAgICAgICAgICAvLyAyLiBUcnkgdG8gc3BlZWQgdGhpbmdzIHVwIGJ5IHNraXBwaW5n
IHN0YWNrIGNoZWNrcy4KKyAgICAgICAgICAgICAgICBtaW5pbXVtUGFyZW50Q2hlY2tTaXplLAor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBp
biB0aGUgV2FzbSAtPiBFbWJlZGRlciBjYWxsIElDIHN0dWIuIFNpbmNlIHRoZXNlIHdpbGwKKyAg
ICAgICAgICAgICAgICAvLyBzcGlsbCBhbGwgYXJndW1lbnRzIHRvIHRoZSBzdGFjaywgd2UgZW5z
dXJlIHRoYXQgYSBzdGFjayBjaGVjayBoZXJlIGNvdmVycyB0aGUKKyAgICAgICAgICAgICAgICAv
LyBzdGFjayB0aGF0IHN1Y2ggYSBzdHViIHdvdWxkIHVzZS4KKyAgICAgICAgICAgICAgICAoQ2hl
Y2tlZDx1aW50MzJfdD4obV9tYXhOdW1KU0NhbGxBcmd1bWVudHMpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIGpzY0NhbGxpbmdDb252ZW50aW9uKCkuaGVhZGVyU2l6ZUluQnl0ZXMoKSkudW5zYWZlR2V0
KCkKKyAgICAgICAgICAgICkpOworICAgICAgICAgICAgY29uc3QgaW50MzJfdCBjaGVja1NpemUg
PSBtX21ha2VzQ2FsbHMgPyAod2FzbUZyYW1lU2l6ZSArIGV4dHJhRnJhbWVTaXplKS51bnNhZmVH
ZXQoKSA6IHdhc21GcmFtZVNpemUudW5zYWZlR2V0KCk7CisgICAgICAgICAgICBib29sIG5lZWRV
bmRlcmZsb3dDaGVjayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGVja1NpemUpID4gT3B0aW9u
czo6cmVzZXJ2ZWRab25lU2l6ZSgpOworICAgICAgICAgICAgYm9vbCBuZWVkc092ZXJmbG93Q2hl
Y2sgPSBtX21ha2VzQ2FsbHMgfHwgd2FzbUZyYW1lU2l6ZSA+PSBtaW5pbXVtUGFyZW50Q2hlY2tT
aXplIHx8IG5lZWRVbmRlcmZsb3dDaGVjazsKKworICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3Mg
bGVhZiBmdW5jdGlvbnMgdG8gbm90IGRvIHN0YWNrIGNoZWNrcyBpZiB0aGVpciBmcmFtZSBzaXpl
IGlzIHdpdGhpbgorICAgICAgICAgICAgLy8gY2VydGFpbiBsaW1pdHMgc2luY2UgdGhlaXIgY2Fs
bGVyIHdvdWxkIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBjaGVjay4KKyAgICAgICAgICAgIGlmIChu
ZWVkc092ZXJmbG93Q2hlY2spIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKwor
ICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNo
ZWNrU2l6ZSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzY3JhdGNoKTsKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CisgICAgICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKG5lZWRVbmRlcmZsb3dDaGVjaykpCisgICAgICAgICAgICAgICAgICAg
IG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QWJvdmUsIHNjcmF0
Y2gsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgb3ZlcmZs
b3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgc2NyYXRjaCwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGNvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkU3RhY2tMaW1pdCgpKSkpOworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbb3Zl
cmZsb3ddIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhvdmVyZmxvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+
KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd1N0YWNrT3ZlcmZsb3dGcm9tV2FzbVRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV91c2VzSW5zdGFuY2VWYWx1ZSAmJiBDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWVkZWQsIGJ1dCB0aGUg
aW5zdGFuY2UgdmFsdWVzIHN0aWxsIG5lZWRzIHRvIGJlIGNvcnJlY3QuCisgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0Nh
bGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRl
eHRJbnN0YW5jZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFdl
IHNhaWQgd2UnZCByZXR1cm4gYSBwb2ludGVyLiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJl
Y2F1c2UgaXQgaXNuJ3QgdXNlZCwgYnV0IHRoZSBwYXRjaHBvaW50IGNvbnNlcnZhdGl2ZWx5IHNh
aWQgaXQgaGFkIGVmZmVjdHMgKHBvdGVudGlhbCBzdGFjayBjaGVjaykgd2hpY2ggcHJldmVudCBp
dCBmcm9tIGdldHRpbmcgcmVtb3ZlZC4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0p
OworCisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBXVEZNb3ZlKHByb2xv
Z3VlR2VuZXJhdG9yKSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKSB7CisgICAg
ICAgIG1faW5zdGFuY2VWYWx1ZSA9IGc2NCgpOworICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBu
aWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCisgICAgICAgIGFw
cGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNlKSwgbV9pbnN0YW5jZVZhbHVlKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0geyBUbXAoY29udGV4dEluc3RhbmNlKSwg
VHlwZTo6STY0IH07CisKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAgbV9sb2Nh
bHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUg
dHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgbV9sb2NhbHNbaV0gPSB0bXBG
b3JUeXBlKHR5cGUpOworICAgIH0KKworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLmxv
YWRBcmd1bWVudHMoc2lnbmF0dXJlLCBbJl0gKGNvbnN0IEFyZyYgYXJnLCB1bnNpZ25lZCBpKSB7
CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2Ug
VHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgYXJnLCBtX2xvY2Fsc1tpXSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAg
ICBhcHBlbmQoTW92ZSwgYXJnLCBtX2xvY2Fsc1tpXSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCBhcmcs
IG1fbG9jYWxzW2ldKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2
NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBhcmcsIG1fbG9jYWxzW2ldKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgZW1pdFRpZXJV
cENoZWNrKFRpZXJVcENvdW50OjpmdW5jdGlvbkVudHJ5RGVjcmVtZW50KCksIEIzOjpPcmlnaW4o
KSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0
YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25z
dCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBUeXBlZFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9j
ayogYmxvY2spCit7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmxvY2ssIGluc3Rh
bmNlKTsKKworICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdDo6WWVzKSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0
YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlz
LgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxJbnN0
YW5jZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFja0xpbWl0KCkpKSA9PSBzaXplb2YodWludDY0X3Qp
LCAiIik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5z
dGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIGF1dG8g
dGVtcCA9IGc2NCgpOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YWRkcihpbnN0
YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQo
KSksIHRlbXApOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YWRkcih0ZW1wKSwg
dGVtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgdGVtcCwgQXJnOjphZGRyKGluc3Rh
bmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAg
fQorCisgICAgaWYgKCEhbWVtb3J5KSB7CisgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5m
byogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgICAgICBSZWdp
c3RlclNldCBjbG9iYmVyczsKKyAgICAgICAgY2xvYmJlcnMuc2V0KHBpbm5lZFJlZ3MtPmJhc2VN
ZW1vcnlQb2ludGVyKTsKKyAgICAgICAgZm9yIChhdXRvIGluZm8gOiBwaW5uZWRSZWdzLT5zaXpl
UmVnaXN0ZXJzKQorICAgICAgICAgICAgY2xvYmJlcnMuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsK
KworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7Cisg
ICAgICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAg
ICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGVmZmVjdHMucmVhZHMgPSBC
Mzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVj
dHM7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlcnMpOworCisgICAgICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7CisgICAg
ICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7
CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAgICAgICAg
QVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFz
c3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lz
dGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0
LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0
KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwor
ICAgICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwg
VG1wKCksIGluc3RhbmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRU
aHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9uVHlwZSB0eXBlKQorewor
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih0eXBlKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgYXV0byBqdW1wVG9FeGNl
cHRpb25TdHViID0gaml0Lmp1bXAoKTsKKworICAgIGppdC5hZGRMaW5rVGFzayhbanVtcFRvRXhj
ZXB0aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRy
VGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICB9KTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9
IGNvdW50OworICAgIHRvdGFsQnl0ZXNDaGVja2VkICs9IG1fbG9jYWxzLnNpemUoKTsKKyAgICB1
aW50MzJfdCB0b3RhbEJ5dGVzOworICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCh0b3RhbEJ5dGVz
Q2hlY2tlZC5zYWZlR2V0KHRvdGFsQnl0ZXMpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cp
IHx8ICFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxCeXRlcyksICJjYW4ndCBhbGxv
Y2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFsQnl0ZXMsICIgbG9jYWxzIik7CisKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIGxvY2FsID0gdG1w
Rm9yVHlwZSh0eXBlKTsKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxvY2FsKTsK
KyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAg
ICBjYXNlIFR5cGU6Okk2NDogeworICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCBsb2NhbCwgbG9j
YWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUeXBlOjpG
MzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OiB7CisgICAgICAgICAgICBhdXRvIHRlbXAgPSBn
NjQoKTsKKyAgICAgICAgICAgIC8vIElFRUUgNzU0ICIwIiBpcyBqdXN0IGludDMyLzY0IHplcm8u
CisgICAgICAgICAgICBhcHBlbmQoWG9yNjQsIHRlbXAsIHRlbXApOworICAgICAgICAgICAgYXBw
ZW5kKHR5cGUgPT0gVHlwZTo6RjMyID8gTW92ZTMyVG9GbG9hdCA6IE1vdmU2NFRvRG91YmxlLCB0
ZW1wLCBsb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRD
b25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlwZQorewor
ICAgIHJldHVybiBhZGRDb25zdGFudChtX2N1cnJlbnRCbG9jaywgdHlwZSwgdmFsdWUpOworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChCYXNpY0Jsb2NrKiBibG9jaywgVHlw
ZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkgLT4gRXhwcmVzc2lvblR5cGUKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IHRtcEZvclR5cGUodHlwZSk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBU
eXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIGFwcGVuZChibG9jaywgTW92
ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDogeworICAgICAgICBhdXRvIHRtcCA9IGc2
NCgpOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKHZhbHVlKSwgdG1w
KTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCB0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxv
YXQgOiBNb3ZlNjRUb0RvdWJsZSwgdG1wLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9jYWxzLnNpemUoKSA9PSBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpKTsgLy8gV2UgaGFuZGxlIGFyZ3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFT
U0VSVChtX2xvY2Fsc1tpbmRleF0udG1wKCkpOworICAgIHJlc3VsdCA9IHRtcEZvclR5cGUobV9s
b2NhbHNbaW5kZXhdLnR5cGUoKSk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZShtX2xv
Y2Fsc1tpbmRleF0udHlwZSgpKSwgbV9sb2NhbHNbaW5kZXhdLnRtcCgpLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVucmVhY2hhYmxl
ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgdW5yZWFjaGFibGUtPnNldEdlbmVyYXRv
cihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpVbnJlYWNoYWJsZSk7CisgICAgfSk7CisgICAgdW5yZWFjaGFibGUtPmVmZmVjdHMu
dGVybWluYWwgPSB0cnVlOworICAgIGVtaXRQYXRjaHBvaW50KHVucmVhY2hhYmxlLCBUbXAoKSk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9y
eShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIGludDMyX3QgKCpncm93TWVtb3J5KSh2b2lkKiwgSW5zdGFuY2UqLCBp
bnQzMl90KSA9IFtdICh2b2lkKiBjYWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJf
dCBkZWx0YSkgLT4gaW50MzJfdCB7CisgICAgICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFt
ZShjYWxsRnJhbWUpOworCisgICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1
cm4gLTE7CisKKyAgICAgICAgYXV0byBncm93biA9IGluc3RhbmNlLT5tZW1vcnkoKS0+Z3JvdyhQ
YWdlQ291bnQoZGVsdGEpKTsKKyAgICAgICAgaWYgKCFncm93bikgeworICAgICAgICAgICAgc3dp
dGNoIChncm93bi5lcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxS
ZWFzb246OkludmFsaWREZWx0YToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJl
YXNvbjo6SW52YWxpZEdyb3dTaXplOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWls
UmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jv
d0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKKyAg
ICB9OworCisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdENDYWxsKGdyb3dNZW1vcnksIHJl
c3VsdCwgVHlwZWRUbXAgeyBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBUeXBlOjpJ
NjQgfSwgaW5zdGFuY2VWYWx1ZSgpLCBkZWx0YSk7CisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Ok5vLCBtX2luZm8ubWVtb3J5LCBpbnN0
YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHN0YXRpY19jYXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0
X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisKKyAgICByZXN1bHQgPSBnMzIo
KTsKKworICAgIGF1dG8gdGVtcDEgPSBnNjQoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6
aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSwgQjM6
OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwg
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgdGVtcDEpOworICAgIGNvbnN0
ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291
bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0
aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6Omlt
bSgxNiksIHJlc3VsdCk7CisgICAgYWRkU2hpZnQoVHlwZTo6STY0LCBVcnNoaWZ0NjQsIHRlbXAx
LCByZXN1bHQsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcmVzdWx0LCByZXN1bHQpOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XS50bXAoKSk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZh
bHVlVHlwZShtX2xvY2Fsc1tpbmRleF0udHlwZSgpKSwgdmFsdWUsIG1fbG9jYWxzW2luZGV4XS50
bXAoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xv
YmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgVHlwZSB0eXBlID0gbV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisKKyAg
ICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgYXV0byB0ZW1wID0gZzY0KCk7CisK
KyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0
T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihp
bnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSksIHRlbXApOworCisg
ICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdp
c3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZv
clR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlw
ZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3VsdCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gdGVtcDIgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6Ymln
SW1tKG9mZnNldCksIHRlbXAyKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwgdGVtcCwg
dGVtcCk7CisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6YWRk
cih0ZW1wKSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gdGVtcCA9IGc2NCgpOworCisgICAgUkVM
RUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFs
cygpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VW
YWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpLCB0ZW1wKTsKKworICAgIFR5cGUg
dHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOworCisgICAgaW50MzJfdCBvZmZzZXQg
PSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOworICAgIGlmIChB
cmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlw
ZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFy
Zzo6YWRkcih0ZW1wLCBvZmZzZXQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byB0ZW1wMiA9
IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIp
OworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBw
ZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1wKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFpcklSR2VuZXJhdG9yOjpFeHBy
ZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVy
YXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBhdXRvIHJlc3Vs
dCA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIsIHBvaW50ZXIsIHJlc3VsdCk7CisKKyAgICBz
d2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsK
KyAgICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11
c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJy
ZW50IG1lbW9yeSBzaXplLgorICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAg
ICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAgICAgIGF1
dG8gdGVtcCA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHNpemVPZk9wZXJhdGlvbikgKyBvZmZzZXQgLSAxKSwgdGVtcCk7Cisg
ICAgICAgIGFwcGVuZChBZGQ2NCwgcmVzdWx0LCB0ZW1wKTsKKworICAgICAgICBlbWl0Q2hlY2so
WyZdIHsKKyAgICAgICAgICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCB0ZW1wLCBUbXAobV9tZW1vcnlTaXplR1BSKSk7CisgICAg
ICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogewor
ICAgICAgICAvLyBXZSd2ZSB2aXJ0dWFsbHkgbWFwcGVkIDRHaUIrcmVkem9uZSBmb3IgdGhpcyBt
ZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29u
dGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50XSwKKyAgICAgICAgLy8gYW5kIGV2ZXJ5dGhp
bmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFu
eSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3Nl
bWJseSByZWdpc3RlcgorICAgICAgICAvLyBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93
ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlciArIG9mZnNldCBhY2Nlc3NlcyBwZXJmb3JtIHRoZSBh
ZGRpdGlvbiBpbiA2NC1iaXQgd2hpY2ggY2FuIHB1c2ggYW4gYWNjZXNzIGFib3ZlCisgICAgICAg
IC8vIHRoZSAzMi1iaXQgbGltaXQgKHRoZSBvZmZzZXQgaXMgdW5zaWduZWQgMzItYml0KS4gVGhl
IHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxsIG9mZnNldHMsIGFuZCB3ZSdsbCBleHBsaWNp
dGx5IGJvdW5kcyBjaGVjayBhbnkKKyAgICAgICAgLy8gcmVnaXN0ZXIgKyBsYXJnZSBvZmZzZXQg
YWNjZXNzLiBXZSBkb24ndCB0aGluayB0aGlzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyZXF1ZW50bHku
CisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIHRoYXQgcmVnaXN0ZXIgKyBs
YXJnZSBvZmZzZXQgZG9lc24ndCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNlIHRoYXQncyB0ZWNo
bmljYWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZyB0aGUKKyAgICAg
ICAgLy8gUFJPVF9OT05FIHJlZ2lvbiwgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBhIHNtYWxs
ZXIgaW1tZWRpYXRlIGJlY2F1c2UgaXQgY2FuIGNvZGVnZW5zIGJldHRlci4gV2Uga25vdyB0aGF0
IGFueXRoaW5nIGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAgLy8gdGhhbiB0aGUgZGVjbGFy
ZWQgJ21heGltdW0nIHdpbGwgdHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG51
bWJlci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVkICdtYXhpbXVtJyB0aGVuIHdlIHN0aWxsIGtu
b3cgdGhhdAorICAgICAgICAvLyBhbnkgYWNjZXNzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA0
R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBhZGQgdGhlIHJlZHpvbmUuCisgICAgICAgIGlmIChv
ZmZzZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpIHsKKyAgICAgICAgICAg
IHVpbnQ2NF90IG1heGltdW0gPSBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSA/IG1faW5mby5tZW1v
cnkubWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCk7CisgICAgICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbShzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZU9mT3BlcmF0aW9uKSAr
IG9mZnNldCAtIDEpLCB0ZW1wKTsKKyAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgcmVzdWx0LCB0
ZW1wKTsKKyAgICAgICAgICAgIGF1dG8gc2l6ZU1heCA9IGFkZENvbnN0YW50KFR5cGU6Okk2NCwg
bWF4aW11bSk7CisKKyAgICAgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgICAg
IGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwpLCB0ZW1wLCBzaXplTWF4KTsKKyAgICAgICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIH0KKworICAgIGFwcGVuZChBZGQ2NCwgVG1wKG1fbWVtb3J5QmFzZUdQ
UiksIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVpbnQzMl90IHNp
emVPZkxvYWRPcChMb2FkT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VToK
KyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2
NExvYWQ4VToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2Fk
MTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQxNlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgorICAgICAg
ICByZXR1cm4gMjsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkMzJTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAg
ICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STY0TG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6CisgICAg
ICAgIHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitpbmxpbmUgVHlwZWRUbXAgQWlySVJHZW5lcmF0b3I6OmVtaXRMb2FkT3AoTG9hZE9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3QgdW9mZnNldCkKK3sKKyAgICB1
aW50MzJfdCBvZmZzZXQgPSBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KHBvaW50ZXIsIHVvZmZzZXQp
OworCisgICAgVHlwZWRUbXAgaW1tVG1wOworICAgIFR5cGVkVG1wIG5ld1B0cjsKKyAgICBUeXBl
ZFRtcCByZXN1bHQ7CisKKyAgICBhdXRvIGxvYWRBcmcgPSBbJl0gKCkgeworICAgICAgICBpZiAo
QXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JCeXRlcyhzaXplT2ZMb2Fk
T3Aob3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9mZnNldCk7
CisgICAgICAgIGltbVRtcCA9IGc2NCgpOworICAgICAgICBuZXdQdHIgPSBnNjQoKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgIGFw
cGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQdHIpOworICAgICAgICByZXR1cm4gQXJn
OjphZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkkzMkxvYWQ4UzogeworICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAgICAg
YXBwZW5kRWZmZWN0ZnVsKExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4
UzogeworICAgICAgICByZXN1bHQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExv
YWQ4U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQo
U2lnbkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6IHsKKyAgICAgICAgcmVzdWx0ID0g
ZzMyKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOCwgbG9hZEFyZygpLCByZXN1bHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4
VTogeworICAgICAgICByZXN1bHQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExv
YWQ4LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzogeworICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAg
ICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwg
cmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkMTZTOiB7CisgICAgICAgIHJlc3VsdCA9IGc2NCgpOworICAgICAgICBhcHBlbmRFZmZl
Y3RmdWwoTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAg
ICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOiB7CisgICAgICAg
IHJlc3VsdCA9IGczMigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTG9hZDE2LCBsb2FkQXJn
KCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDE2VTogeworICAgICAgICAvLyBPT1BTOiBEbyBJIG5lZWQgYW5vdGhlciB6ZXh0
IGhlcmU/CisgICAgICAgIHJlc3VsdCA9IGc2NCgpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwo
TG9hZDE2LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAg
ICAgIGFwcGVuZEVmZmVjdGZ1bChNb3ZlMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKKyAgICAgICAgcmVz
dWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChNb3ZlMzIsIGxvYWRBcmcoKSwg
cmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkMzJTOiB7CisgICAgICAgIHJlc3VsdCA9IGc2NCgpOworICAgICAgICBhcHBlbmRFZmZl
Y3RmdWwoTW92ZTMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0
ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZzY0KCk7Cisg
ICAgICAgIGFwcGVuZEVmZmVjdGZ1bChNb3ZlLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDogeworICAgICAg
ICByZXN1bHQgPSBmMzIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmVGbG9hdCwgbG9h
ZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRP
cFR5cGU6OkY2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgICAgIGFwcGVu
ZEVmZmVjdGZ1bChNb3ZlRG91YmxlLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIEFTU0VSVChwb2ludGVyLnRtcCgpLmlzR1AoKSk7CisKKyAgICBpZiAoVU5MSUtFTFkoc3Vt
T3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpKSkgeworICAgICAg
ICAvLyBGSVhNRTogRXZlbiB0aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBp
dCdzIG5vdCBhIHZhbGlkYXRpb24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAg
ICAgIC8vIGFzIGEgcnVudGltZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBh
dXRvKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBwYXRjaC0+c2V0
R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0p
OworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCkpOworCisgICAgICAgIC8vIFdl
IHdvbid0IHJlYWNoIGhlcmUsIHNvIHdlIGp1c3QgcGljayBhIHJhbmRvbSByZWcuCisgICAgICAg
IHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CisgICAg
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6CisgICAgICAg
IGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgICAgICAgICAgcmVzdWx0ID0gZzMyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6
CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToK
KyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRP
cFR5cGU6Okk2NExvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGc2NCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGYzMigpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGY2NCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJl
cGFyZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0
b3JlT3BUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBl
OjpJMzJTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgICAgICBy
ZXR1cm4gMTsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgorICAgIGNhc2UgU3Rv
cmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgU3RvcmVP
cFR5cGU6OkkzMlN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2Ug
U3RvcmVPcFR5cGU6Okk2NFN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgor
ICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworCitpbmxpbmUgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVP
cFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1
aW50MzJfdCB1b2Zmc2V0KQoreworICAgIHVpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBs
dXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUeXBlZFRtcCBpbW1UbXA7CisgICAg
VHlwZWRUbXAgbmV3UHRyOworCisgICAgYXV0byBzdG9yZUFyZyA9IFsmXSAoKSB7CisgICAgICAg
IGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNpemVP
ZlN0b3JlT3Aob3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9m
ZnNldCk7CisgICAgICAgIGltbVRtcCA9IGc2NCgpOworICAgICAgICBuZXdQdHIgPSBnNjQoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAg
ICAgIGFwcGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQdHIpOworICAgICAgICByZXR1
cm4gQXJnOjphZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBj
YXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3Rv
cmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4LCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICAgICAgYXBwZW5kKFN0b3JlMTYsIHZhbHVlLCBz
dG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0
U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKKyAgICAgICAgYXBwZW5k
KE1vdmUzMiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCBzdG9y
ZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3Rv
cmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIGFw
cGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIEFTU0VSVChwb2ludGVyLnRtcCgpLmlzR1AoKSk7CisKKyAgICBpZiAoVU5MSUtFTFko
c3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3ApKSkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkgb3V0IG9mIGJvdW5k
cywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBpdAor
ICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0aGlzIG1heSBjaGFu
Z2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MzUKKyAgICAg
ICAgYXV0byogdGhyb3dFeGNlcHRpb24gPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAg
ICAgdGhyb3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1v
cnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQodGhyb3dFeGNl
cHRpb24sIFRtcCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlT3Aob3AsIGVtaXRD
aGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkp
LCB2YWx1ZSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBl
IG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobm9uWmVyby50eXBlKCkgPT0gemVyby50eXBl
KCkpOworICAgIHJlc3VsdCA9IHRtcEZvclR5cGUobm9uWmVyby50eXBlKCkpOworICAgIGFwcGVu
ZChtb3ZlT3BGb3JWYWx1ZVR5cGUobm9uWmVyby50eXBlKCkpLCBub25aZXJvLCByZXN1bHQpOwor
CisgICAgQmFzaWNCbG9jayogaXNaZXJvID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQoQnJh
bmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjb25kaXRpb24s
IGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNaZXJvLCBj
b250aW51YXRpb24pOworCisgICAgYXBwZW5kKGlzWmVybywgbW92ZU9wRm9yVmFsdWVUeXBlKHpl
cm8udHlwZSgpKSwgemVybywgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNaZXJvLCBKdW1wKTsKKyAg
ICBpc1plcm8tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJs
b2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdl
bmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKHVpbnQzMl90IGRlY3JlbWVudENvdW50LCBCMzo6T3Jp
Z2luIG9yaWdpbikKK3sKKyAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsgLy8gT09QUworCisgICAg
aWYgKCFtX3RpZXJVcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBjb3VudGRvd25QdHIg
PSBnNjQoKTsKKyAgICBhdXRvIG9sZENvdW50ZG93biA9IGc2NCgpOworICAgIGF1dG8gbmV3Q291
bnRkb3duID0gZzY0KCk7CisKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50NjRfdD4obV90aWVyVXApKSwgY291bnRkb3duUHRyKTsKKyAgICBhcHBlbmQo
TW92ZTMyLCBBcmc6OmFkZHIoY291bnRkb3duUHRyKSwgb2xkQ291bnRkb3duKTsKKworICAgIFJF
TEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEltbUZvcm0oZGVjcmVtZW50Q291bnQpKTsKKyAgICBh
cHBlbmQoTW92ZTMyLCBvbGRDb3VudGRvd24sIG5ld0NvdW50ZG93bik7CisgICAgYXBwZW5kKFN1
YjMyLCBBcmc6OmltbShkZWNyZW1lbnRDb3VudCksIG5ld0NvdW50ZG93bik7CisgICAgYXBwZW5k
KE1vdmUzMiwgbmV3Q291bnRkb3duLCBBcmc6OmFkZHIoY291bnRkb3duUHRyKSk7CisKKyAgICBh
dXRvKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIEIzOjpFZmZlY3RzIGVm
ZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVh
cFJhbmdlOjp0b3AoKTsKKyAgICBlZmZlY3RzLndyaXRlcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgp
OworICAgIHBhdGNoLT5lZmZlY3RzID0gZWZmZWN0czsKKworICAgIHBhdGNoLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRpZXJVcCA9IGpp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1z
WzFdLmdwcigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHRpZXJVcFJlc3VtZSA9
IGppdC5sYWJlbCgpOworCisgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7CisgICAgICAgICAgICB0aWVyVXAubGluaygmaml0KTsKKworICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgZXh0cmFQYWRkaW5nQnl0ZXMgPSAwOworICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbCA9IHsgfTsKKyAgICAgICAgICAgIHJlZ2lzdGVyc1Rv
U3BpbGwuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoaml0LCByZWdp
c3RlcnNUb1NwaWxsLCBleHRyYVBhZGRpbmdCeXRlcyk7CisKKyAgICAgICAgICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9mdW5jdGlvbkluZGV4KSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpy
ZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJl
Z2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlv
biwgZXh0cmFQYWRkaW5nQnl0ZXMpOworICAgICAgICAgICAgaml0Lmp1bXAodGllclVwUmVzdW1l
KTsKKworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8Tm9QdHJUYWc+KGNhbGwpLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRyaWdnZXJP
TUdUaWVyVXBUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSwgbmV3
Q291bnRkb3duLCBvbGRDb3VudGRvd24pOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERh
dGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlwZSBzaWduYXR1cmUpCit7CisgICAgQmFzaWNC
bG9jayogYm9keSA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVh
dGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3Vy
cmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkpOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBi
b2R5OworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6bG9vcERlY3JlbWVudCgpLCBv
cmlnaW4oKSk7CisKKyAgICByZXR1cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwg
dG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9k
eSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRk
VG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKEIzOjpP
cmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6VG9w
TGV2ZWwsIG1fY29kZS5hZGRCbG9jaygpKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xE
YXRhIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1
cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUp
LCBCbG9ja1R5cGU6OkJsb2NrLCBtX2NvZGUuYWRkQmxvY2soKSk7Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUs
IENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCYXNpY0Jsb2Nr
KiB0YWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0g
bV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgCisgICAgLy8gV2FzbSBib29scyBhcmUgaTMyLgorICAgIGFwcGVu
ZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIGNv
bmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0
YWtlbiwgbm90VGFrZW4pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKKyAgICByZXN1
bHQgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVy
ZSksIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlvbiwgbm90VGFrZW4pOworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEs
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAg
ICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5j
b250aW51YXRpb24pOworICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhKTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEm
IGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxv
Y2tUeXBlOjpJZik7CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CisgICAgZGF0
YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHJl
dHVyblZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXplKCkpIHsK
KyAgICAgICAgVG1wIHJldHVyblZhbHVlR1BSID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKKyAgICAgICAgc3dpdGNoIChkYXRhLnNpZ25hdHVyZSgpKSB7CisgICAgICAgIGNhc2Ug
VHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgcmV0dXJuVmFsdWVzWzBdLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0MzIsIHJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAg
ICAgIGFwcGVuZChNb3ZlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGFwcGVuZChSZXQ2NCwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwg
cmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0
RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCByZXR1cm5WYWx1ZXNb
MF0sIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0dXJu
VmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNl
CisgICAgICAgIGFwcGVuZChSZXRWb2lkKTsKKyAgICByZXR1cm4geyB9OworfQorCisvLyBOT1RF
OiBBbGwgYnJhbmNoZXMgaW4gV2FzbSBhcmUgb24gMzItYml0IGludHMKKworYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0
Rm9yQnJhbmNoKCkpOworCisgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9j
a0ZvckJyYW5jaCgpOworICAgIGlmIChjb25kaXRpb24pIHsKKyAgICAgICAgQmFzaWNCbG9jayog
Y29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIGFwcGVuZChCcmFuY2hU
ZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIGNvbmRpdGlvbiwg
Y29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0
LCBjb250aW51YXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsK
KyAgICB9IGVsc2UgeworICAgICAgICBhcHBlbmQoSnVtcCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlv
biwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZh
dWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsg
KytpKQorICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdl
dHNbaV0tPnJlc3VsdEZvckJyYW5jaCgpKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHBy
ZXNzaW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQucmVzdWx0Rm9yQnJhbmNoKCkpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJhc2lj
QmxvY2sqIHRhcmdldCA9IHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAg
ICBhdXRvIGNvbnN0YW50ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0lt
bShpKSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoQnJhbmNoMzIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBjb25zdGFudCwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0LCBjb250aW51YXRpb24pOworCisgICAg
ICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIGFwcGVuZChK
dW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkZWZhdWx0VGFyZ2V0LnRh
cmdldEJsb2NrRm9yQnJhbmNoKCkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3Qm
IGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBk
YXRhID0gZW50cnkuY29udHJvbERhdGE7CisKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHBy
ZXNzaW9uU3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJy
ZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworCisgICAgcmV0dXJu
IGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkpOworfQorCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CisgICAgbV9j
dXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVhdGlvbjsKKworICAgIGlmIChkYXRhLnR5cGUoKSA9
PSBCbG9ja1R5cGU6OklmKSB7CisgICAgICAgIGFwcGVuZChkYXRhLnNwZWNpYWwsIEp1bXApOwor
ICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1Y2Nlc3NvcnMobV9jdXJyZW50QmxvY2spOworICAg
IH0KKworICAgIGZvciAoY29uc3QgYXV0byYgcmVzdWx0IDogZGF0YS5yZXN1bHQpCisgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworCisgICAgLy8g
VG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8g
bWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KKyAgICBpZiAoZGF0YS50eXBlKCkgPT0g
QmxvY2tUeXBlOjpUb3BMZXZlbCkKKyAgICAgICAgcmV0dXJuIGFkZFJldHVybihkYXRhLCBlbnRy
eS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9tYWtlc0NhbGxzID0g
dHJ1ZTsKKworICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7Cisg
ICAgaWYgKHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCkKKyAgICAgICAgcmVzdWx0ID0gdG1wRm9y
VHlwZShyZXR1cm5UeXBlKTsKKworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiog
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKKwor
ICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4KSkgeworICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6
bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5z
aXplKCkpKTsKKworICAgICAgICBhdXRvIGN1cnJlbnRJbnN0YW5jZSA9IGc2NCgpOworICAgICAg
ICBhcHBlbmQoTW92ZSwgaW5zdGFuY2VWYWx1ZSgpLCBjdXJyZW50SW5zdGFuY2UpOworCisgICAg
ICAgIC8vIEZJWE1FIGltcG9ydHMgY2FuIGJlIGxpbmtlZCBoZXJlLCBpbnN0ZWFkIG9mIGdlbmVy
YXRpbmcgYSBwYXRjaHBvaW50LCBiZWNhdXNlIGFsbCBpbXBvcnQgc3R1YnMgYXJlIGdlbmVyYXRl
ZCBiZWZvcmUgQjMgY29tcGlsYXRpb24gc3RhcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCisgICAgICAgIGF1dG8gdGFyZ2V0SW5zdGFuY2UgPSBnNjQo
KTsKKyAgICAgICAgLy8gT09QUzogVHJ5IHRvIGlzZWwgdGhpcyBiZXR0ZXIKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YmlnSW1tKEluc3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGZ1
bmN0aW9uSW5kZXgpKSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGlu
c3RhbmNlVmFsdWUoKSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJn
OjphZGRyKHRhcmdldEluc3RhbmNlKSwgdGFyZ2V0SW5zdGFuY2UpOworCisgICAgICAgIEJhc2lj
QmxvY2sqIGlzV2FzbUJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGlzRW1iZWRkZXJCbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgICAgICBhcHBlbmQo
QnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0YXJn
ZXRJbnN0YW5jZSwgdGFyZ2V0SW5zdGFuY2UpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0
U3VjY2Vzc29ycyhpc1dhc21CbG9jaywgaXNFbWJlZGRlckJsb2NrKTsKKworICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1
cm5UeXBlKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5l
ZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAg
ICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcg
dG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJM
YXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nKSk7CisKKyAgICAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdz
OworICAgICAgICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29k
ZSwgcmV0dXJuVHlwZSwgcGF0Y2hwb2ludCwgdG9UbXBWZWN0b3IoYXJncyksIFsmXSAoVG1wIHRt
cCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQo
eyB0bXAsIHJlcCB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0
LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNt
RW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGVtaXRQYXRjaHBvaW50KGlzV2FzbUJs
b2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7CisgICAgICAgICAg
ICBhcHBlbmQoaXNXYXNtQmxvY2ssIEp1bXApOworICAgICAgICAgICAgaXNXYXNtQmxvY2stPnNl
dFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8ganVtcERlc3RpbmF0aW9uID0gZzY0KCk7CisgICAgICAgICAgICBhcHBlbmQo
aXNFbWJlZGRlckJsb2NrLCBNb3ZlLCBBcmc6OmJpZ0ltbShJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNt
VG9FbWJlZGRlclN0dWIoZnVuY3Rpb25JbmRleCkpLCBqdW1wRGVzdGluYXRpb24pOworICAgICAg
ICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgQWRkNjQsIGluc3RhbmNlVmFsdWUoKSwganVt
cERlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIE1vdmUs
IEFyZzo6YWRkcihqdW1wRGVzdGluYXRpb24pLCBqdW1wRGVzdGluYXRpb24pOworCisgICAgICAg
ICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBl
KSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CisgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdp
c3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgICAgICAg
ICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29t
ZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgorICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzIxODEKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
KSk7CisKKyAgICAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAg
ICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChqdW1wRGVzdGluYXRpb24pOworCisgICAgICAgICAg
ICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBl
LCBwYXRjaHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVS
ZXAgcmVwKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0p
OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbcmV0dXJuVHlwZV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgaml0LmNh
bGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRy
VGFnKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBlbWl0UGF0Y2hwb2ludChpc0Vt
YmVkZGVyQmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAg
ICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIEp1bXApOworICAgICAgICAgICAgaXNF
bWJlZGRlckJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKwor
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgLy8gVGhlIGNh
bGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAv
IG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KKyAgICAgICAgcmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1l
bW9yeSwgY3VycmVudEluc3RhbmNlLCBjb250aW51YXRpb24pOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUp
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKKworICAgICAgICBW
ZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgd2FzbUNhbGxpbmdDb252
ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2hwb2ludCwgdG9U
bXBWZWN0b3IoYXJncyksIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAg
ICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgICAgICB9KTsKKworICAg
ICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBm
dW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhd
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21F
bnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNo
cG9pbnQsIHJlc3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBFeHByZXNzaW9uVHlwZSBj
YWxsZWVJbmRleCA9IGFyZ3MudGFrZUxhc3QoKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwor
ICAgIC8vIE5vdGU6IGNhbGwgaW5kaXJlY3QgY2FuIGNhbGwgZWl0aGVyIFdlYkFzc2VtYmx5RnVu
Y3Rpb24gb3IgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJlY2F1c2UKKyAgICAvLyBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiBpcyBsaWtlIGNhbGxpbmcgaW50byB0aGUgZW1iZWRkZXIs
IHdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBhbGwgY2FsbCBpbmRpcmVjdHMKKyAgICAvLyBjYW4g
YmUgdG8gdGhlIGVtYmVkZGVyIGZvciBvdXIgc3RhY2sgY2hlY2sgY2FsY3VsYXRpb24uCisgICAg
bV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50
cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CisKKyAgICBhdXRvIGN1cnJl
bnRJbnN0YW5jZSA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlLCBpbnN0YW5jZVZhbHVlKCksIGN1
cnJlbnRJbnN0YW5jZSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyID0gZzY0KCk7CisgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyID0gZzY0KCk7
CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCA9IGc2NCgp
OworICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5z
dGFuY2U6Om9mZnNldE9mVGFibGUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCksIEIz
OjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3Jt
KFRhYmxlOjpvZmZzZXRPZkluc3RhbmNlcygpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSwg
QjM6OldpZHRoNjQpKTsKKworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGluc3RhbmNl
VmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mVGFibGUoKSksIGNhbGxhYmxlRnVuY3Rpb25CdWZm
ZXJMZW5ndGgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSwgY2FsbGFibGVGdW5j
dGlvbkJ1ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5j
dGlvbkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpLCBpbnN0YW5jZXNC
dWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBjYWxsYWJsZUZ1bmN0aW9u
QnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICBhcHBlbmQoTW92ZTMyLCBjYWxsZWVJbmRleCwg
Y2FsbGVlSW5kZXgpOworCisgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBsb29raW5nIGZv
ciBpcyB2YWxpZC4KKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgYXBwZW5kKEJyYW5jaDMy
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNhbGxlZUluZGV4
LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0
aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc0Nh
bGxJbmRpcmVjdCk7CisgICAgfSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0g
ZzY0KCk7CisgICAgeworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRl
eCA9IGc2NCgpOworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGlu
ZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
aW1tKHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxlZVNpZ25hdHVy
ZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2FsbGVlU2lnbmF0
dXJlSW5kZXgpOworICAgICAgICBhcHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIs
IGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29kZSk7IC8vIFBv
aW50ZXIgdG8gY2FsbGVlIGNvZGUuCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24n
dC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFs
aXplZC4KKyAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBj
YW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4
IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1l
cyBpNjQiKTsKKyAgICAgICAgLy8gT09QUzogVGhpcyBzZWVtcyBkdW1iIHRvIGRvIHR3byBjaGVj
a3MganVzdCBmb3IgYSBuaWNlciBlcnJvciBoZXJlLi4uCisKKyAgICAgICAgYXBwZW5kKE1vdmUs
IEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOwor
CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChTaWdu
YXR1cmU6OmludmFsaWRJbmRleCA9PSAwLCAiIik7CisgICAgICAgICAgICBhcHBlbmQoQnJhbmNo
VGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjYWxsZWVTaWduYXR1
cmVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRh
YmxlRW50cnkpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAg
ICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBnNjQoKTsKKyAg
ICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIGFw
cGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGNh
bGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgfSwg
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlv
blR5cGU6OkJhZFNpZ25hdHVyZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIERvIGEg
Y29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgYXV0byBuZXdDb250ZXh0
SW5zdGFuY2UgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW5kZXgoaW5zdGFu
Y2VzQnVmZmVyLCBjYWxsZWVJbmRleCwgOCwgMCksIG5ld0NvbnRleHRJbnN0YW5jZSk7CisKKyAg
ICAgICAgQmFzaWNCbG9jayogZG9Db250ZXh0U3dpdGNoID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisg
ICAgICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBkb0NvbnRleHRTd2l0Y2gpOwor
CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAv
LyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdpdGgg
Qm91bmRzQ2hlY2tpbmcgbWVtb3J5LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhh
dmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MjE4MQorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAg
ICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAg
ICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3Rl
ckluZm86OmdldCgpOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRS
ZWdzLnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5l
ZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dElu
c3RhbmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
U3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFz
ZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NF
UlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVn
aXN0ZXIKKyAgICAgICAgICAgIC8vICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyOTUyCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09
IDEpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdD
b250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zm
c2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdD
b250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNp
emVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lk
Ki4KKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZG9Db250ZXh0U3dpdGNo
LCBwYXRjaHBvaW50LCBUbXAoKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkp
OworICAgICAgICBhcHBlbmQoZG9Db250ZXh0U3dpdGNoLCBKdW1wKTsKKyAgICAgICAgZG9Db250
ZXh0U3dpdGNoLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YWRkcihjYWxsZWVDb2RlKSwgY2FsbGVlQ29kZSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBz
aWduYXR1cmUucmV0dXJuVHlwZSgpOworICAgIGlmIChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQp
CisgICAgICAgIHJlc3VsdCA9IHRtcEZvclR5cGUocmV0dXJuVHlwZSk7CisKKyAgICBhdXRvKiBw
YXRjaCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgIHBhdGNoLT5l
ZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgcGF0Y2gtPmVmZmVjdHMucmVhZHNQaW5u
ZWQgPSB0cnVlOworICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5l
ZCByZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAg
Ly8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhp
bmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcgc28KKyAgICAvLyBiZWNhdXNlIHRoZSB3YXNtLT53
YXNtIHRodW5rIHVuY29uZGl0aW9uYWxseSBvdmVycmlkZXMgdGhlIHNpemUgcmVnaXN0ZXJzLgor
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNt
LT53YXNtIHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVn
aXN0ZXJzIGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzIxODEKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgIFZlY3RvcjxDb25z
dHJhaW5lZFRtcD4gZW1pdEFyZ3M7CisgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUpOwor
ICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5
cGUsIHBhdGNoLCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAg
cmVwKSB7CisgICAgICAgIGVtaXRBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgIH0pOwor
ICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmNhbGwo
cGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFn
KTsKKyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwg
cmVzdWx0LCBXVEZNb3ZlKGVtaXRBcmdzKSk7CisKKyAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZl
IGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2
ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRl
KFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGN1cnJlbnRJbnN0
YW5jZSwgbV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJ
UkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVz
c2lvblR5cGUmIHNvdXJjZSkKK3sKKyAgICAvLyBPT1BTOiBXZSBraW5kYSB3YW50IHR5cGVzIGhl
cmUgdG8gZGlzdGluZ3Vpc2ggaTMyL2k2NC9mMzIvZjY0IQorICAgIEFTU0VSVChkc3QudHlwZSgp
ID09IHNvdXJjZS50eXBlKCkpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUoZHN0LnR5
cGUoKSksIHNvdXJjZSwgZHN0KTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnlWYWx1
ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1
bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPD0gcmVzdWx0U3Rh
Y2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsg
KytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAtIDEgLSBpXSwgcmVzdWx0
U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsKK30KKworLy9zdGF0aWMgdm9pZCBk
dW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEFpcklS
R2VuZXJhdG9yOjpFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKQorLy97CisvLyAgICBk
YXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOworLy8gICAgZm9yIChjb25zdCBhdXRv
JiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQorLy8gICAgICAgIGRhdGFMb2coY29tbWEs
ICpleHByZXNzaW9uKTsKKy8vfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBl
eHByZXNzaW9uU3RhY2spCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRyb2xTdGFjayk7CisgICAg
VU5VU0VEX1BBUkFNKGV4cHJlc3Npb25TdGFjayk7CisKKyAgICAvLyBPT1BTIQorICAgIC8qCisg
ICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIEdyYXBoOiIpOworICAgIGRhdGFMb2cobV9jb2RlKTsK
KyAgICBkYXRhTG9nTG4oIldpdGggY3VycmVudCBibG9jazoiLCAqbV9jdXJyZW50QmxvY2spOwor
ICAgIGRhdGFMb2dMbigiQ29udHJvbCBzdGFjazoiKTsKKyAgICBBU1NFUlQoY29udHJvbFN0YWNr
LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IGNvbnRyb2xTdGFjay5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgZGF0YUxvZygiICAiLCBjb250cm9sU3RhY2tbaV0uY29udHJvbERhdGEsICI6
ICIpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIiwgIiIpOworICAgICAgICBkdW1w
RXhwcmVzc2lvblN0YWNrKGNvbW1hLCAqZXhwcmVzc2lvblN0YWNrKTsKKyAgICAgICAgZXhwcmVz
c2lvblN0YWNrID0gJmNvbnRyb2xTdGFja1tpXS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAg
ICAgICAgZGF0YUxvZ0xuKCk7CisgICAgfQorICAgIGRhdGFMb2dMbigpOworICAgICovCit9CisK
K2F1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KK3sKKyAgICByZXR1
cm4gQjM6Ok9yaWdpbigpOworICAgIC8vT3Bjb2RlT3JpZ2luIG9yaWdpbihtX3BhcnNlci0+Y3Vy
cmVudE9wY29kZSgpLCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpOwor
ICAgIC8vQVNTRVJUKGlzVmFsaWRPcFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4ob3JpZ2luLm9w
Y29kZSgpKSkpOworICAgIC8vcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdpbik7Cit9
CisKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQs
IGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0
aHJvd1dhc21FeGNlcHRpb24pCit7CisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PEludGVybmFsRnVuY3Rpb24+KCk7CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJF
bnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CisgICAgY29t
cGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gc3RkOjptYWtlX3VuaXF1ZTxDQ2Fs
bEhlbHBlcnM+KCk7CisKKyAgICBCMzo6UHJvY2VkdXJlIHByb2NlZHVyZTsKKyAgICBDb2RlJiBj
b2RlID0gcHJvY2VkdXJlLmNvZGUoKTsKKworICAgIHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVy
KFtdIChQcmludFN0cmVhbSYgb3V0LCBCMzo6T3JpZ2luIG9yaWdpbikgeworICAgICAgICBpZiAo
b3JpZ2luLmRhdGEoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9j
YXN0PE9wY29kZU9yaWdpbj4ob3JpZ2luKSk7CisgICAgfSk7CisgICAgCisgICAgLy8gVGhpcyBt
ZWFucyB3ZSBjYW5ub3QgdXNlIGVpdGhlciBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVzZWRS
ZWdpc3RlcnMoKSBvcgorICAgIC8vIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dW5hdmFpbGFi
bGVSZWdpc3RlcnMoKS4gSW4gZXhjaGFuZ2UgZm9yIHRoaXMgY29uY2Vzc2lvbiwgd2UKKyAgICAv
LyBkb24ndCBzdHJpY3RseSBuZWVkIHRvIHJ1biBBaXI6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKSwg
d2hpY2ggc2F2ZXMgYSBiaXQgb2YgQ1BVIHRpbWUgYXQKKyAgICAvLyBvcHRMZXZlbD0xLgorICAg
IC8vIE9PUFM6IERvIHdlIG5lZWQgdGhpcz8gU2hvdWxkIHdlIGp1c3Qgc2V0IGl0IGRpcmVjdGx5
IG9uIENvZGU/CisgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhmYWxzZSk7Cisg
ICAgCisgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxh
dGlvbk1vZGU6OkJCUU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUU9wdGlt
aXphdGlvbkxldmVsKCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXph
dGlvbkxldmVsKCkpOworCisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJv
Y2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21w
aWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uLCBz
aWduYXR1cmUpOworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJH
ZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8p
OworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOworCisKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAgICAgICAgIGJsb2Nr
LT5zdWNjZXNzb3JCbG9jayhpKS0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOworICAgIH0KKworICAg
IC8vQjM6OkFpcjo6dmFsaWRhdGUoY29kZSk7CisgICAgLy8gT09QUzogVmFsaWRhdGUgJ2NvZGUn
IGhlcmUhCisgICAgCisgICAgeworICAgICAgICBCMzo6QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlv
bihjb2RlKTsKKyAgICAgICAgQjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNt
RW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAg
ICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxl
ZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgordm9pZCBBaXJJUkdl
bmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KGJvb2wgaXNTaWduZWREaXYsIEV4cHJlc3Np
b25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KQoreworICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKEludFR5cGUpID09IDQgfHwgc2l6ZW9mKEludFR5cGUpID09IDgsICIiKTsKKworICAg
IGVtaXRDaGVjayhbJl0geworICAgICAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBC
cmFuY2hUZXN0MzIgOiBCcmFuY2hUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
WmVybyksIHJpZ2h0LCByaWdodCk7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRo
cm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgIH0p
OworCisgICAgaWYgKGlzU2lnbmVkRGl2KSB7CisgICAgICAgIEFTU0VSVChzdGQ6OmlzX3NpZ25l
ZDxJbnRUeXBlPjo6dmFsdWUpOworICAgICAgICBJbnRUeXBlIG1pbiA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8SW50VHlwZT46Om1pbigpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAg
ICAgICAgLy8gT09QUzogVHJ5IHRvIGVtaXQgbmljZSBjb21wYXJlIHcvIGltbXMuCisgICAgICAg
ICAgICBhdXRvIG1pblRtcCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gZzMyKCkgOiBnNjQoKTsK
KyAgICAgICAgICAgIGF1dG8gbmVnT25lID0gc2l6ZW9mKEludFR5cGUpID09IDQgPyBnMzIoKSA6
IGc2NCgpOworCisgICAgICAgICAgICBCMzo6QWlyOjpPcGNvZGUgb3AgPSBzaXplb2YoSW50VHlw
ZSkgPT0gNCA/IENvbXBhcmUzMiA6IENvbXBhcmU2NDsKKyAgICAgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmJpZ0ltbShzdGF0aWNfY2FzdDx1aW50NjRfdD4obWluKSksIG1pblRtcCk7CisgICAg
ICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBs
ZWZ0LCBtaW5UbXAsIG1pblRtcCk7CisKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6Omlt
bSgtMSksIG5lZ09uZSk7CisgICAgICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdodCwgbmVnT25lLCBuZWdPbmUpOworCisgICAgICAgICAg
ICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpJbnRlZ2Vy
T3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bnRUeXBlPgordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdE1vZE9yRGl2KGJvb2wgaXNEaXYsIEV4
cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09IDQgfHwgc2l6ZW9m
KEludFR5cGUpID09IDgsICIiKTsKKworICAgIHJlc3VsdCA9IHNpemVvZihJbnRUeXBlKSA9PSA0
ID8gZzMyKCkgOiBnNjQoKTsKKworICAgIGJvb2wgaXNTaWduZWQgPSBzdGQ6OmlzX3NpZ25lZDxJ
bnRUeXBlPjo6dmFsdWU7CisKKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIEIzOjpBaXI6
Ok9wY29kZSBkaXY7CisgICAgICAgIHN3aXRjaCAoc2l6ZW9mKEludFR5cGUpKSB7CisgICAgICAg
IGNhc2UgNDoKKyAgICAgICAgICAgIGRpdiA9IGlzU2lnbmVkID8gRGl2MzIgOiBVRGl2MzI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgZGl2ID0gaXNT
aWduZWQgPyBEaXY2NCA6IFVEaXY2NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgYXBwZW5kKGRpdiwgbGhzLCByaHMsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKCFp
c0RpdikgeworICAgICAgICAgICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8gTXVsMzIg
OiBNdWw2NCwgcmVzdWx0LCByaHMsIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQoc2l6ZW9m
KEludFR5cGUpID09IDQgPyBTdWIzMiA6IFN1YjY0LCBsaHMsIHJlc3VsdCwgcmVzdWx0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBDUFUoWDg2KSB8fCBDUFUo
WDg2XzY0KQorCisgICAgVG1wIGVheChYODZSZWdpc3RlcnM6OmVheCk7CisgICAgVG1wIGVkeChY
ODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICBpZiAoaXNTaWduZWQpIHsKKyAgICAgICAgQjM6OkFp
cjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAgICAgIEIzOjpBaXI6Ok9wY29kZSBk
aXY7CisgICAgICAgIHN3aXRjaCAoc2l6ZW9mKEludFR5cGUpKSB7CisgICAgICAgIGNhc2UgNDoK
KyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBYODZDb252ZXJ0VG9Eb3VibGVXb3Jk
MzI7CisgICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIDg6CisgICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVy
dFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAgIGRpdiA9IFg4NkRpdjY0OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgaW1wbGVtZW50ICJyZXMgPSBE
aXY8Q2hpbGw+L01vZDxDaGlsbD4obnVtLCBkZW4pIiBhcyBmb2xsb3dzOgorICAgICAgICAvLwor
ICAgICAgICAvLyAgICAgaWYgKGRlbiArIDEgPD1fdW5zaWduZWQgMSkgeworICAgICAgICAvLyAg
ICAgICAgIGlmICghZGVuKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJlcyA9IDA7CisgICAg
ICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAg
ICAgIC8vICAgICAgICAgaWYgKG51bSA9PSAtMjE0NzQ4MzY0OCkgeworICAgICAgICAvLyAgICAg
ICAgICAgICByZXMgPSBpc0RpdiA/IG51bSA6IDA7CisgICAgICAgIC8vICAgICAgICAgICAgIGdv
dG8gZG9uZTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAgICAgIC8vICAgICB9CisgICAgICAg
IC8vICAgICByZXMgPSBudW0gKC8gb3IgJSkgZGV2OworICAgICAgICAvLyBkb25lOgorCisgICAg
ICAgIEJhc2ljQmxvY2sqIGRlbklzR29vZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBC
YXNpY0Jsb2NrKiBkZW5NYXlCZUJhZCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNp
Y0Jsb2NrKiBkZW5Ob3RaZXJvID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgICAgIGF1dG8gdGVt
cCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gZzMyKCkgOiBnNjQoKTsKKyAgICAgICAgYXV0byBv
bmUgPSBhZGRDb25zdGFudChzaXplb2YoSW50VHlwZSkgPT0gNCA/IFR5cGU6OkkzMiA6IFR5cGU6
Okk2NCwgMSk7CisKKyAgICAgICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQWRkMzIg
OiBBZGQ2NCwgcmhzLCBvbmUsIHRlbXApOworICAgICAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUp
ID09IDQgPyBCcmFuY2gzMiA6IEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlKSwgdGVtcCwgb25lKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3Nv
cnMoZGVuSXNHb29kLCBkZW5NYXlCZUJhZCk7CisKKyAgICAgICAgYXBwZW5kKGRlbk1heUJlQmFk
LCBYb3I2NCwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoZGVuTWF5QmVCYWQsIHNp
emVvZihJbnRUeXBlKSA9PSA0ID8gQnJhbmNoVGVzdDMyIDogQnJhbmNoVGVzdDY0LCBBcmc6OnJl
c0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCByaHMsIHJocyk7CisgICAgICAgIGRlbk1heUJl
QmFkLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZGVuTm90WmVybyk7CisKKyAgICAgICAg
YXV0byBtaW4gPSBhZGRDb25zdGFudChkZW5Ob3RaZXJvLCBzaXplb2YoSW50VHlwZSkgPT0gNCA/
IFR5cGU6OkkzMiA6IFR5cGU6Okk2NCwgc3RkOjpudW1lcmljX2xpbWl0czxJbnRUeXBlPjo6bWlu
KCkpOworICAgICAgICBpZiAoaXNEaXYpCisgICAgICAgICAgICBhcHBlbmQoZGVuTm90WmVybywg
c2l6ZW9mKEludFR5cGUpID09IDQgPyBNb3ZlMzIgOiBNb3ZlLCBtaW4sIHJlc3VsdCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gUmVzdWx0IGlzIHplcm8sIGFzIHNldCBhYm92ZS4u
LgorICAgICAgICB9CisgICAgICAgIGFwcGVuZChkZW5Ob3RaZXJvLCBzaXplb2YoSW50VHlwZSkg
PT0gNCA/IEJyYW5jaDMyIDogQnJhbmNoNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwpLCBsaHMsIG1pbik7CisgICAgICAgIGRlbk5vdFplcm8tPnNldFN1Y2Nlc3NvcnMoY29u
dGludWF0aW9uLCBkZW5Jc0dvb2QpOworCisgICAgICAgIGF1dG8gZGl2UmVzdWx0ID0gaXNEaXYg
PyBlYXggOiBlZHg7CisgICAgICAgIGFwcGVuZChkZW5Jc0dvb2QsIE1vdmUsIGxocywgZWF4KTsK
KyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwgY29udmVydFRvRG91YmxlV29yZCwgZWF4LCBlZHgp
OworICAgICAgICBhcHBlbmQoZGVuSXNHb29kLCBkaXYsIGVheCwgZWR4LCByaHMpOworICAgICAg
ICBhcHBlbmQoZGVuSXNHb29kLCBzaXplb2YoSW50VHlwZSkgPT0gNCA/IE1vdmUzMiA6IE1vdmUs
IGRpdlJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwgSnVtcCk7Cisg
ICAgICAgIGRlbklzR29vZC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgICAg
IG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQjM6OkFpcjo6T3Bjb2RlIGRpdiA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gWDg2VURp
djMyIDogWDg2VURpdjY0OworCisgICAgVG1wIGRpdlJlc3VsdCA9IGlzRGl2ID8gZWF4IDogZWR4
OworCisgICAgYXBwZW5kKE1vdmUsIGxocywgZWF4KTsKKyAgICBhcHBlbmQoWG9yNjQsIGVkeCwg
ZWR4KTsKKyAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgcmhzKTsKKyAgICBhcHBlbmQoc2l6ZW9m
KEludFR5cGUpID09IDQgPyBNb3ZlMzIgOiBNb3ZlLCBkaXZSZXN1bHQsIHJlc3VsdCk7CisjZWxz
ZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjxpbnQzMl90
Pih0cnVlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PGludDMyX3Q+KHRydWUsIGxl
ZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUg
bGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50MzJfdD4oZmFsc2Us
IGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJp
Z2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwg
RXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8dWludDMyX3Q+KGZhbHNlLCBsZWZ0
LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PHVpbnQzMl90Pih0cnVlLCBsZWZ0LCByaWdodCwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJl
c3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQzMl90PihmYWxzZSwgbGVmdCwgcmln
aHQpOworICAgIGVtaXRNb2RPckRpdjx1aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0LCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lv
blR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50NjRfdD4odHJ1ZSwgbGVmdCwgcmlnaHQpOwor
ICAgIGVtaXRNb2RPckRpdjxpbnQ2NF90Pih0cnVlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1p
dENoZWNrc0Zvck1vZE9yRGl2PGludDY0X3Q+KGZhbHNlLCBsZWZ0LCByaWdodCk7CisgICAgZW1p
dE1vZE9yRGl2PGludDY0X3Q+KGZhbHNlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNr
c0Zvck1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RP
ckRpdjx1aW50NjRfdD4odHJ1ZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JN
b2RPckRpdjx1aW50NjRfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8
dWludDY0X3Q+KGZhbHNlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0
ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMy
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5jb3VudFRy
YWlsaW5nWmVyb3MzMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7
CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVz
dWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBv
aW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczY0KHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQ
b3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKKyAgICAg
ICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGppdC5jb3VudFBv
cHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgIH0p
OworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50MzJfdCAoKnBvcGNvdW50
KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1aW50MzJfdCB7IHJldHVybiBfX2J1
aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0
LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnNjQo
KTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Nv
dW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0
czo6bm9uZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uNjQocGFyYW1zWzFdLmdwcigpLCBwYXJh
bXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgor
CisgICAgdWludDY0X3QgKCpwb3Bjb3VudCkoaW50NjRfdCkgPSBbXSAoaW50NjRfdCB2YWx1ZSkg
LT4gdWludDY0X3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwodmFsdWUpOyB9OworICAg
IGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0PihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsK
KyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBpZiAo
aXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsK
KyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisjaWYg
Q1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJsZShwYXJhbXNbMV0u
Z3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAg
ICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBd
LmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGVtaXRQ
YXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZl
cnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6
RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOwor
ICAgIGlmIChpc1g4NigpKQorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnMgPSAxOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRmxvYXQocGFy
YW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vs
c2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sxXS5ncHIoKSwgcGFy
YW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3VsdCA9IGYzMigpOworICAg
IGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIz
OjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0
LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5m
cHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgZW1pdFBhdGNocG9pbnQo
cGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJl
c3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7Cisg
ICAgcmVzdWx0ID0gZjMyKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0
LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0RvdWJsZShwYXJhbXNbMV0uZnBy
KCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
VHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpG
bG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91
bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAg
IH0pOworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0
byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0
YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7
CisgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKSkpKTsKKworICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMy
KCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAg
YXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAg
IGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAg
ICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRo
cm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAg
fSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOwor
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91
YmxlVG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7Cisg
ICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0
LCBhcmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4
ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNf
Y2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAg
YXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkp
OworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChD
b21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRl
clRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChP
cjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVu
ZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRl
bXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0
aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDMy
KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQg
PSBnMzIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKworCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25z
dGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91Ymxl
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgKiAtMi4wKSk7CisgICAgYXV0
byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEu
MCkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7Cisg
ICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOwor
ICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7Cisg
ICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIp
OworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRl
RG91YmxlVG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0p
OworICAgIHJlc3VsdCA9IGczMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJl
c3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBt
YXggPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIHN0YXRp
Y19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIGF1dG8gbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6
RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOwor
CisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAxKTsKKyAgICBhcHBl
bmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBhcHBl
bmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICBh
cHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8p
LCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4
Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOwor
CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9V
aW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJl
c3VsdCA9IGczMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJn
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRD
b25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgYXV0byBt
aW4gPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKwor
ICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAgYXBw
ZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW5PclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBh
cmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRo
YW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMy
LCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIGFwcGVuZChC
cmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAy
LCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9u
KGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBh
dXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQ2NChw
YXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisKKyAgICByZXN1bHQg
PSBnNjQoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRkQ29uc3Rh
bnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpICogLTIuMCkpOworICAgIGF1dG8g
bWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjAp
KTsKKyAgICAKKyAgICBhdXRvIHRlbXAxID0gZzMyKCk7CisgICAgYXV0byB0ZW1wMiA9IGczMigp
OworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAxKTsK
KyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7
CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsK
KyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5l
bWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsK
KyAgICB9KTsKKworICAgIFR5cGVkVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYo
KSkgeworICAgICAgICAvLyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRv
IGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFz
dCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJzIGFy
ZSB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2Ug
Y2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAor
ICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJp
dENvbnN0YW50ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgp
IC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorCisgICAg
VmVjdG9yPENvbnN0cmFpbmVkVG1wPiBhcmdzOworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZl
Y3RzOjpub25lKCk7CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNYODYoKSkgewor
ICAgICAgICBhcmdzLmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAgICAgICBwYXRjaHBvaW50
LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlk
RlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAg
ICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2go
MCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQor
ICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0pOworCisgICAgcmVzdWx0ID0g
ZzY0KCk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJl
c3VsdCwgV1RGTW92ZShhcmdzKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGF1dG8gbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCkpKSk7CisgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1pbigpKSkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIg
PSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOwor
ICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOwor
ICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7Cisg
ICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQp
OworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRl
RmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsK
KyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1
bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4
ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19j
YXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiBzdGF0aWNf
Y2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAgICBhdXRvIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkYz
MiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKyAg
ICAKKyAgICBhdXRvIHRlbXAxID0gZzMyKCk7CisgICAgYXV0byB0ZW1wMiA9IGczMigpOworICAg
IGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFw
cGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFw
cGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAg
IGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
byksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93
RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7
CisKKyAgICBUeXBlZFRtcCBzaWduQml0Q29uc3RhbnQ7CisgICAgaWYgKGlzWDg2KCkpIHsKKyAg
ICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVjdGlvbiB0byBjb252ZXJ0
IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2UgYXQgbGVhc3QgdHJ5IHRv
IGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAgICAgICAvLyB0aGUgbnVtYmVycyB3b3VsZCBiZSBw
b3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2UgY2Fubm90IG1hdGVy
aWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAorICAgICAgICAvLyBz
byB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJpdENvbnN0YW50ID0g
YWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0
PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpKTsKKyAgICB9CisKKyAgICBhdXRvKiBwYXRjaHBv
aW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gYXJnczsK
KyAgICBhcmdzLmFwcGVuZChhcmcpOworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIGFyZ3Mu
YXBwZW5kKHNpZ25CaXRDb25zdGFudCk7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRj
aFJlZ2lzdGVycyA9IDE7CisgICAgfQorICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICBGUFJSZWcgc2NyYXRjaCA9IEludmFsaWRGUFJSZWc7CisgICAg
ICAgIEZQUlJlZyBjb25zdGFudCA9IEludmFsaWRGUFJSZWc7CisgICAgICAgIGlmIChpc1g4Nigp
KSB7CisgICAgICAgICAgICBzY3JhdGNoID0gcGFyYW1zLmZwU2NyYXRjaCgwKTsKKyAgICAgICAg
ICAgIGNvbnN0YW50ID0gcGFyYW1zWzJdLmZwcigpOworICAgICAgICB9CisgICAgICAgIGppdC50
cnVuY2F0ZUZsb2F0VG9VaW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHNj
cmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9KTsKKworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGVt
aXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUo
YXJncykpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
U2hpZnQoVHlwZSB0eXBlLCBCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIHZhbHVl
LCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIEFTU0VSVCh0eXBlID09IFR5cGU6Okk2NCB8fCB0eXBlID09IFR5cGU6
OkkzMik7CisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAgIGlmIChpc1ZhbGlk
Rm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5k
KG9wLCB2YWx1ZSwgc2hpZnQsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
ICAgIAorICAgIFRtcCBlY3ggPSBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpOworICAgIGFwcGVuZChN
b3ZlLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoTW92ZSwgc2hpZnQsIGVjeCk7CisgICAg
YXBwZW5kKG9wLCBlY3gsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkSW50ZWdlclN1YihCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25U
eXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKG9wID09IFN1YjMyIHx8IG9wID09IFN1YjY0KTsK
KworICAgIHJlc3VsdCA9IG9wID09IFN1YjMyID8gZzMyKCkgOiBnNjQoKTsKKworICAgIGlmIChp
c1ZhbGlkRm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAg
YXBwZW5kKG9wLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAvLyBTdWIgYSwgYgorICAgIC8v
IG1lYW5zCisgICAgLy8gYiA9IGIgU3ViIGEKKyAgICBhcHBlbmQoTW92ZSwgbGhzLCByZXN1bHQp
OworICAgIGFwcGVuZChvcCwgcmhzLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlIG9w
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IEFic0Zsb2F0IHx8IG9wID09IEFi
c0RvdWJsZSk7CisKKyAgICByZXN1bHQgPSBvcCA9PSBBYnNGbG9hdCA/IGYzMigpIDogZjY0KCk7
CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAg
ICAgYXBwZW5kKG9wLCB2YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKworICAgIGlmIChvcCA9PSBBYnNGbG9h
dCkgeworICAgICAgICBhdXRvIGNvbnN0YW50ID0gZzMyKCk7CisgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmltbShzdGF0aWNfY2FzdDx1aW50MzJfdD4ofigxdWxsIDw8IDMxKSkpLCBjb25zdGFu
dCk7CisgICAgICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0KTsKKyAg
ICAgICAgYXBwZW5kKEFuZEZsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBhdXRvIGNvbnN0YW50ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJp
Z0ltbSh+KDF1bGwgPDwgNjMpKSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoTW92ZTY0VG9E
b3VibGUsIGNvbnN0YW50LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoQW5kRG91YmxlLCB2YWx1
ZSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGUgdHlwZSwgQjM6OkFpcjo6T3Bjb2RlIG9w
LCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVCh0eXBlID09IFR5cGU6OkYz
MiB8fCB0eXBlID09IFR5cGU6OkY2NCk7CisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsK
KworICAgIGlmIChpc1ZhbGlkRm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkp
IHsKKyAgICAgICAgYXBwZW5kKG9wLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKworICAgIC8vIE9w
IGEsIGIKKyAgICAvLyBtZWFucworICAgIC8vIGIgPSBiIE9wIGEKKyAgICBhcHBlbmQobW92ZU9w
Rm9yVmFsdWVUeXBlKHR5cGUpLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKG9wLCByaHMsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkNlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsK
KyAgICBhcHBlbmQoQ2VpbEZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJNdWw+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBh
cHBlbmQoTXVsMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlN1Yj4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRJbnRlZ2VyU3ViKFN1YjMy
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0TGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVD
b25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEZW1vdGVGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBm
MzIoKTsKKyAgICBhcHBlbmQoQ29udmVydERvdWJsZVRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMk1pbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGYzMigpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogZ3JlYXRlclRoYW5PckVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQo
bV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1
Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIE9yRmxv
YXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAg
IGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RF
cXVhbCwgTW92ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJh
bmNoRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4p
LCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24s
IGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBN
b3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwg
SnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlv
bik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOwor
ICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjRMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGcz
MigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyTWF4PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBs
ZXNzVGhhbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFu
Y2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFy
ZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5v
dEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vz
c29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3Vi
bGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAg
IG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAg
YXBwZW5kKGxlc3NUaGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxl
c3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24p
OworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
TXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5n
UG9pbnRCaW5PcChUeXBlOjpGNjQsIE11bERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRpdj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50
QmluT3AoVHlwZTo6RjMyLCBEaXZGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkNsej4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczMyLCBh
cmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUg
Zm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICByZXN1bHQgPSBm
MzIoKTsKKyAgICBhdXRvIHRlbXAxID0gZzMyKCk7CisgICAgYXV0byBzaWduID0gZzMyKCk7Cisg
ICAgYXV0byB2YWx1ZSA9IGczMigpOworCisgICAgLy8gT09QUzogQ2FuIGZpdCBpbiBJbW0vQml0
SW1tIGluc3RlYWQgb2YgQmlnSW1tPworICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcxLCB0
ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4ODAwMDAwMDApLCBzaWduKTsK
KyAgICBhcHBlbmQoQW5kMzIsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVuZChNb3Zl
RG91YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgw
eDdmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEsIHZhbHVlLCB2YWx1
ZSk7CisKKyAgICBhcHBlbmQoT3IzMiwgc2lnbiwgdmFsdWUsIHZhbHVlKTsKKyAgICBhcHBlbmQo
TW92ZTMyVG9GbG9hdCwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFVJ
MzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhdXRvIHRlbXAgPSBnNjQoKTsK
KyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0
VG9Eb3VibGUsIHRlbXAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlJlaW50ZXJwcmV0STMyPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChBbmQ2NCwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJs
ZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3FydD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYz
MigpOworICAgIGFwcGVuZChTcXJ0RmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NEdlPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7Cisg
ICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0R3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMy
KCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpH
cmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0VT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVu
ZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcXo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
MzIoKTsKKyAgICBhcHBlbmQoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8pLCBhcmcwLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjREaXY+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGU6
OkY2NCwgRGl2RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKEFkZEZsb2F0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChPcjY0LCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMkxlUz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zNjQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYz
MigpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVGbG9hdCwgQXJnOjpUbXAsIEFyZzo6VG1w
KSkKKyAgICAgICAgYXBwZW5kKE5lZ2F0ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGVsc2Ug
eworICAgICAgICBhdXRvIGNvbnN0YW50ID0gYWRkQ29uc3RhbnQoVHlwZTo6STMyLCBiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMC4wKSkpOworICAgICAgICBhdXRv
IHRlbXAgPSBnMzIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAsIHRlbXAp
OworICAgICAgICBhcHBlbmQoWG9yMzIsIGNvbnN0YW50LCB0ZW1wKTsKKyAgICAgICAgYXBwZW5k
KE1vdmUzMlRvRmxvYXQsIHRlbXAsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBbmQ+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBh
cHBlbmQoQW5kMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0VT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVu
ZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6Okk2NCwgUm90YXRlUmlnaHQ2NCwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NEFicz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50
QWJzKEFic0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJFcT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGczMigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIC8vIE9PUFM6IFdlIGNhbiBoYXZlIGJl
dHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4
ODYKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhdXRvIHRlbXAxID0gZzY0KCk7CisgICAgYXV0
byBzaWduID0gZzY0KCk7CisgICAgYXV0byB2YWx1ZSA9IGc2NCgpOworCisgICAgYXBwZW5kKE1v
dmVEb3VibGVUbzY0LCBhcmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1t
KDB4ODAwMDAwMDAwMDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQ2NCwgdGVtcDEsIHNp
Z24sIHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7Cisg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmZmZmZmZmZmZiksIHZhbHVlKTsK
KyAgICBhcHBlbmQoQW5kNjQsIHRlbXAxLCB2YWx1ZSwgdmFsdWUpOworCisgICAgYXBwZW5kKE9y
NjQsIHNpZ24sIHZhbHVlLCB2YWx1ZSk7CisgICAgYXBwZW5kKE1vdmU2NFRvRG91YmxlLCB2YWx1
ZSwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGYzMigpOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0LCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6Okk2NCwgUm90YXRlTGVmdDY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyTHQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
Q29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoQ29u
dmVydEludDMyVG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEVxPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5k
KENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1
YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMZT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJl
RmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVx
dWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR2U+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFy
ZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclU+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBV
cnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGYzMigpOworICAgIGF1dG8gdGVtcCA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIs
IGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0LCB0ZW1wLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6OkkzMiwgUnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENlaWw+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoQ2VpbERvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBMc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEZsb29y
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXBwZW5kKEZsb29yRG91YmxlLCBh
cmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJYb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoWG9yMzIsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9h
dGluZ1BvaW50QWJzKEFic0Zsb2F0LCBhcmcwLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWluPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjY0KCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc0Vx
dWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwgPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwgPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRk
QmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7Cisg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisg
ICAgYXBwZW5kKGlzRXF1YWwsIE9yRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFw
cGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVh
dGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVEb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAgICBub3RFcXVhbC0+
c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVhbCk7CisKKyAgICBh
cHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBNb3ZlRG91YmxlLCBhcmcxLCByZXN1bHQpOworICAg
IGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIEp1bXApOworICAgIGdyZWF0ZXJUaGFuT3JFcXVh
bC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBj
b250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKE11bEZsb2F0LCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTdWI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWI2NCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlJlaW50ZXJwcmV0RjMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5k
KE1vdmVGbG9hdFRvMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkFkZD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChB
ZGQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3ViPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChUeXBl
OjpGNjQsIFN1YkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk9yPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKE9yMzIsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVy
dFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoQ29udmVydElu
dDY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFhvcj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChYb3I2
NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VVPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2
NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoTXVsNjQsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMlN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGYzMigpOworICAgIGlmIChpc1ZhbGlkRm9ybShTdWJGbG9hdCwgQXJnOjpU
bXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChTdWJGbG9hdCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNYODYo
KSk7CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgICAgIGFw
cGVuZChTdWJGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFByb21v
dGVGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoQ29udmVydEZs
b2F0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFkZD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChBZGRE
b3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlUz4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21w
YXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kVUkzMj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMk5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZzMyKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoYXJnMCAmJiBhcmcxKTsKKyAgICBhcHBlbmQo
Q29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UmVpbnRlcnByZXRJNjQ+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGFyZzAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkYzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29yPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKEZsb29yRmxvYXQsIGFyZzAsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRTSTMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZjMyKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVu
ZChUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlaW50ZXJwcmV0RjY0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0
dXJuIGFkZFNoaWZ0KFR5cGU6Okk2NCwgUnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJV
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6
Okk2NCwgVXJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3FydD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChTcXJ0RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
YWRkU2hpZnQoVHlwZTo6STY0LCBMc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkd0PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5k
KENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVh
dGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMldyYXBJNjQ+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6OkkzMiwgUm90YXRlTGVmdDMyLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyUm90cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRT
aGlmdChUeXBlOjpJMzIsIFJvdGF0ZVJpZ2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyR3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NE5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGlmIChpc1ZhbGlkRm9y
bShOZWdhdGVEb3VibGUsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChOZWdh
dGVEb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3Rh
bnQgPSBhZGRDb25zdGFudChUeXBlOjpJNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGlj
X2Nhc3Q8ZG91YmxlPigtMC4wKSkpOworICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKFhv
cjY0LCBjb25zdGFudCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdGVt
cCwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVh
bCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKwor
ICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlz
RXF1YWwsIEFuZERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVh
bCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisg
ICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVu
ZChub3RFcXVhbCwgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3Nv
cnMobGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVE
b3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBs
ZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50Qmxv
Y2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NEFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGc2NCgpOworICAgIGFwcGVuZChBZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUIz
SVJHZW5lcmF0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9u
ID0gbnVsbHB0cik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxNSw3ICszMTUsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dElu
CiAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOwogICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBlZmZlY3RzOwogICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lz
dGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUikpOwotICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9p
bnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOyAvLyBP
T1BTOiBQcm9iYWJseSBzaG91bGQgYmUgdXNpbmcgYXJnIQogICAgIEdQUlJlZyB3YXNtQ29udGV4
dEluc3RhbmNlR1BSID0gbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOwogICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtKSB7CiAgICAgICAgIGppdC5tb3ZlKHBhcmFtWzBdLmdwcigpLCB3
YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKQEAgLTQ1OSw5ICs0NTksOSBAQCB2b2lkIEIzSVJHZW5l
cmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsCiAKICAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNr
TGltaXQgPT0gUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgewogICAgICAgICAvLyBUaGUg
SW5zdGFuY2UgY2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRz
IGNhbm9uaWNhbCBsb2NhdGlvbiBpcy4KLSAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0
YWNrTGltaXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0
PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkp
OwotICAgICAgICBWYWx1ZSogYWN0dWFsU3RhY2tMaW1pdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
IHBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tM
aW1pdCwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAgICAgICAgVmFsdWUqIHBvaW50ZXJUb0FjdHVhbFN0
YWNrTGltaXQgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+
KEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSkpOworICAgICAg
ICBWYWx1ZSogYWN0dWFsU3RhY2tMaW1pdCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIHBvaW50ZXJUb0FjdHVhbFN0
YWNrTGltaXQpOworICAgICAgICBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IFN0b3JlLCBvcmlnaW4oKSwgYWN0dWFsU3RhY2tMaW1pdCwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZl
Q2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsgLy8g
T09QUzogc2hvdWxkIGJlIGJsb2NrIQogICAgIH0KIAogICAgIGlmICghIW1lbW9yeSkgewpAQCAt
MTYwOSw2ICsxNjA5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2
NAogICAgIGlmIChpc1g4NigpKQogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdp
c3RlcnMgPSAxOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywg
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0
ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwogI2lmIENQVShYODZfNjQpCkBAIC0xNjI5LDYgKzE2MzAsNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29uCiAgICAgaWYgKGlzWDg2KCkp
CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKSk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNo
UmVnaXN0ZXJzKCkpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAj
aWYgQ1BVKFg4Nl82NCkKQEAgLTE4MzgsNyArMTg0MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRUcnUKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVn
aXN0ZXJzID0gMTsKICAgICB9CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
Ci0gICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOyAvLyBPT1BTOiBUaGlzIGxvb2tzIHN1cGVyIHdyb25nIGdpdmVuIHdlIGRvbid0IHNheSB3
ZSBjbG9iYmVyIHRoaXMhCiAgICAgICAgIEZQUlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsK
ICAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsKICAgICAgICAgaWYgKGlz
WDg2KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
QjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCisjaW5jbHVk
ZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNs
dWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCkBA
IC0yNzEsNyArMjcyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aQogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKICAgICAgICAgVGllclVwQ291bnQqIHRp
ZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1
bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKLSAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1
bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhd
LCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwg
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5k
ZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICBhdXRvIHBhcnNlQW5k
Q29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0aW9uQ29udGV4dHNb
ZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUo
KSwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAJKHJldmlzaW9uIDI0
MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDM2IEBAIGNvbnN0IFdhc21DYWxsaW5n
Q29udmVudGlvbiYgd2FzbUNhbGxpbmcKICAgICByZXR1cm4gc3RhdGljV2FzbUNhbGxpbmdDb252
ZW50aW9uOwogfQogCitjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbkFpciYganNjQ2FsbGluZ0Nv
bnZlbnRpb25BaXIoKQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SlNDQ2FsbGlu
Z0NvbnZlbnRpb25BaXI+IHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpj
YWxsX29uY2Uoc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb25GbGFnLCBbXSAoKSB7CisgICAgICAg
IHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVjdChWZWN0b3I8UmVnPigpLCBWZWN0
b3I8UmVnPigpLCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9KTsK
KworICAgIHJldHVybiBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbjsKK30KKworY29uc3QgV2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKQoreworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8V2FzbUNhbGxpbmdDb252ZW50aW9uQWlyPiBzdGF0
aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRp
Y1dhc21DYWxsaW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV2Fz
bUNhbGxpbmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBWZWN0b3I8UmVnPiBncHJB
cmd1bWVudFJlZ2lzdGVycyhHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRS
ZWdpc3RlcnM7ICsraSkKKyAgICAgICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BS
SW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIFZlY3RvcjxSZWc+IGZwckFy
Z3VtZW50UmVnaXN0ZXJzKEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJl
Z2lzdGVyczsgKytpKQorICAgICAgICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJ
bmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisKKyAgICAgICAgc3RhdGljV2FzbUNhbGxpbmdD
b252ZW50aW9uLmNvbnN0cnVjdChXVEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92
ZShmcHJBcmd1bWVudFJlZ2lzdGVycyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkFpckNvZGUuaCIK
ICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJC
M0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKQEAgLTQ0LDI3
ICs0NSwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi10eXBlZGVm
IHVuc2lnbmVkICgqTmV4dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUg
dHlwZSk7Cit0eXBlZGVmIHVuc2lnbmVkICgqTmV4dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9m
ZnNldCk7CiAKIHRlbXBsYXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRl
T2Zmc2V0PgogY2xhc3MgQ2FsbGluZ0NvbnZlbnRpb24gewogcHVibGljOgogICAgIENhbGxpbmdD
b252ZW50aW9uKFZlY3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBS
ZWdpc3RlclNldCYmIGNhbGxlZVNhdmVSZWdpc3RlcnMpCi0gICAgICAgIDogbV9ncHJBcmdzKGdw
ckFyZ3MpCi0gICAgICAgICwgbV9mcHJBcmdzKGZwckFyZ3MpCi0gICAgICAgICwgbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzKGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKFdU
Rk1vdmUoZ3ByQXJncykpCisgICAgICAgICwgbV9mcHJBcmdzKFdURk1vdmUoZnByQXJncykpCisg
ICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUoY2FsbGVlU2F2ZVJlZ2lzdGVy
cykpCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBCMzo6VmFsdWVSZXAgbWFyc2hhbGxB
cmd1bWVudEltcGwoVmVjdG9yPFJlZz4gcmVnQXJncywgQjM6OlR5cGUgdHlwZSwgc2l6ZV90JiBj
b3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKKyAgICBCMzo6VmFsdWVSZXAgbWFyc2hh
bGxBcmd1bWVudEltcGwoY29uc3QgVmVjdG9yPFJlZz4mIHJlZ0FyZ3MsIHNpemVfdCYgY291bnQs
IHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY291bnQgPCBy
ZWdBcmdzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBCMzo6VmFsdWVSZXA6OnJlZyhyZWdB
cmdzW2NvdW50KytdKTsKIAogICAgICAgICBjb3VudCsrOwogICAgICAgICBCMzo6VmFsdWVSZXAg
cmVzdWx0ID0gQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KTsKLSAgICAg
ICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQsIHR5cGUpOworICAgICAg
ICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09mZnNldCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCkBAIC03MywxMCArNzQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgQjM6OkludDMyOgogICAgICAgICBjYXNlIEIz
OjpJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFy
Z3MsIHR5cGUsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgcmV0
dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENvdW50LCBzdGFj
a09mZnNldCk7CiAgICAgICAgIGNhc2UgQjM6OkZsb2F0OgogICAgICAgICBjYXNlIEIzOjpEb3Vi
bGU6Ci0gICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCB0
eXBlLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBt
YXJzaGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZz
ZXQpOwogICAgICAgICBjYXNlIEIzOjpWb2lkOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTE4OSwxOSArMTkwLDE0NCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQg
bV9jYWxsZXJTYXZlUmVnaXN0ZXJzOwogfTsKIAotaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZz
ZXQodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUpCit0ZW1wbGF0ZTx1bnNpZ25lZCBo
ZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0ZU9mZnNldD4KK2NsYXNzIENhbGxpbmdDb252ZW50
aW9uQWlyIHsKK3B1YmxpYzoKKyAgICBDYWxsaW5nQ29udmVudGlvbkFpcihWZWN0b3I8UmVnPiYm
IGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnByQXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVTYXZl
UmVnaXN0ZXJzKQorICAgICAgICA6IG1fZ3ByQXJncyhXVEZNb3ZlKGdwckFyZ3MpKQorICAgICAg
ICAsIG1fZnByQXJncyhXVEZNb3ZlKGZwckFyZ3MpKQorICAgICAgICAsIG1fY2FsbGVlU2F2ZVJl
Z2lzdGVycyhXVEZNb3ZlKGNhbGxlZVNhdmVSZWdpc3RlcnMpKQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJTZXQgc2NyYXRjaCA9IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAgIHNjcmF0
Y2guZXhjbHVkZShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAg
ICBzY3JhdGNoLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMo
KSk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMo
KSk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fZ3ByQXJncykKKyAgICAgICAgICAgIHNjcmF0
Y2guY2xlYXIocmVnKTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzKQorICAgICAgICAgICAgc2NyYXRjaC5jbGVhcihyZWcpOworICAgICAgICBmb3IgKFJlZyBy
ZWcgOiBzY3JhdGNoKQorICAgICAgICAgICAgbV9zY3JhdGNoR1BScy5hcHBlbmQocmVnKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9zY3JhdGNoR1BScy5zaXplKCkgPj0gMik7CisgICAgfQor
CisgICAgR1BSUmVnIHByb2xvZ3VlU2NyYXRjaChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9z
Y3JhdGNoR1BSc1tpXS5ncHIoKTsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBSZWdGdW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAgdm9pZCBtYXJzaGFsbEFyZ3VtZW50
SW1wbChjb25zdCBWZWN0b3I8UmVnPiYgcmVnQXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBz
dGFja09mZnNldCwgY29uc3QgUmVnRnVuYyYgcmVnRnVuYywgY29uc3QgU3RhY2tGdW5jJiBzdGFj
a0Z1bmMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkg
eworICAgICAgICAgICAgcmVnRnVuYyhyZWdBcmdzW2NvdW50KytdKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvdW50Kys7CisgICAgICAgIHN0YWNrRnVuYyhz
dGFja09mZnNldCk7CisgICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zm
c2V0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVnRnVuYywgdHlwZW5hbWUg
U3RhY2tGdW5jPgorICAgIHZvaWQgbWFyc2hhbGxBcmd1bWVudChUeXBlIHR5cGUsIHNpemVfdCYg
Z3BBcmd1bWVudENvdW50LCBzaXplX3QmIGZwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBzdGFja09m
ZnNldCwgY29uc3QgUmVnRnVuYyYgcmVnRnVuYywgY29uc3QgU3RhY2tGdW5jJiBzdGFja0Z1bmMp
IGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBl
OjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgbWFyc2hhbGxBcmd1
bWVudEltcGwobV9ncHJBcmdzLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LCByZWdGdW5j
LCBzdGFja0Z1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMy
OgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnRJ
bXBsKG1fZnByQXJncywgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgcmVnRnVuYywgc3Rh
Y2tGdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworcHVi
bGljOgorICAgIHN0YXRpYyB1bnNpZ25lZCBoZWFkZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhl
YWRlclNpemU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBs
b2FkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7
CisgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qgc3Rh
Y2tPZmZzZXQgPSBoZWFkZXJTaXplOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBtYXJzaGFsbEFy
Z3VtZW50KHNpZ25hdHVyZS5hcmd1bWVudChpKSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50
Q291bnQsIHN0YWNrT2Zmc2V0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAg
ICAgICAgICAgICAgICAgICBmdW5jdG9yKEIzOjpBaXI6OlRtcChyZWcpLCBpKTsKKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIFsmXSAoc2l6ZV90IHN0YWNrT2Zmc2V0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoQjM6OkFpcjo6QXJnOjphZGRyKEIzOjpBaXI6OlRt
cChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIHN0YWNrT2Zmc2V0KSwgaSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJdCdzIGV4cGVjdGVkIHRo
YXQgdGhlIHBhY2hwb2ludEZ1bmN0b3Igc2V0cyB0aGUgZ2VuZXJhdG9yIGZvciB0aGUgY2FsbCBv
cGVyYXRpb24uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldHVw
Q2FsbChCMzo6QWlyOjpDb2RlJiBjb2RlLCBUeXBlIHJldHVyblR5cGUsIEIzOjpQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQsIGNvbnN0IFZlY3RvcjxCMzo6QWlyOjpUbXA+JiBhcmdzLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1l
bnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAg
ICBzaXplX3Qgc3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpOworCisgICAgICAgIGZvciAoYXV0byB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICBtYXJz
aGFsbEFyZ3VtZW50KHRtcC5pc0dQKCkgPyBUeXBlOjpJNjQgOiBUeXBlOjpGNjQsIGdwQXJndW1l
bnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwKKyAgICAgICAgICAgICAgICBb
Jl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0bXAsIEIzOjpWYWx1
ZVJlcDo6cmVnKHJlZykpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgWyZd
IChzaXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0bXAs
IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09mZnNldCkpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
SW5CeXRlcyhXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBz
dGFja09mZnNldCkpOworCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3Rl
clNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9i
YmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisKKyAg
ICAgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBU
eXBlOjpGNjQ6CisgICAgICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6
OlZhbHVlUmVwOjpyZWcoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJl
ZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8UmVnPiBtX2dwckFyZ3M7CisgICAgY29u
c3QgVmVjdG9yPFJlZz4gbV9mcHJBcmdzOworICAgIFZlY3RvcjxSZWc+IG1fc2NyYXRjaEdQUnM7
CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIGNvbnN0
IFJlZ2lzdGVyU2V0IG1fY2FsbGVyU2F2ZVJlZ2lzdGVyczsKK307CisKK2lubGluZSB1bnNpZ25l
ZCBuZXh0SlNDT2Zmc2V0KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQpCiB7CiAgICAgcmV0dXJuIGN1
cnJlbnRPZmZzZXQgKyBzaXplb2YoUmVnaXN0ZXIpOwogfQogCiBjb25zdGV4cHIgdW5zaWduZWQg
anNjSGVhZGVyU2l6ZSA9IEV4ZWNTdGF0ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9m
KFJlZ2lzdGVyKTsKLXR5cGVkZWYgQ2FsbGluZ0NvbnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4
dEpTQ09mZnNldD4gSlNDQ2FsbGluZ0NvbnZlbnRpb247Ci0KLXR5cGVkZWYgSlNDQ2FsbGluZ0Nv
bnZlbnRpb24gV2FzbUNhbGxpbmdDb252ZW50aW9uOwogCit1c2luZyBKU0NDYWxsaW5nQ29udmVu
dGlvbiA9IENhbGxpbmdDb252ZW50aW9uPGpzY0hlYWRlclNpemUsIG5leHRKU0NPZmZzZXQ+Owor
dXNpbmcgV2FzbUNhbGxpbmdDb252ZW50aW9uID0gSlNDQ2FsbGluZ0NvbnZlbnRpb247CiBjb25z
dCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKIGNvbnN0IFdh
c21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7CiAKK3VzaW5nIEpT
Q0NhbGxpbmdDb252ZW50aW9uQWlyID0gQ2FsbGluZ0NvbnZlbnRpb25BaXI8anNjSGVhZGVyU2l6
ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIgPSBKU0ND
YWxsaW5nQ29udmVudGlvbkFpcjsKK2NvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyJiBqc2ND
YWxsaW5nQ29udmVudGlvbkFpcigpOworY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyJiB3
YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360648</attachid>
            <date>2019-01-30 17:02:25 -0800</date>
            <delta_ts>2019-01-30 17:07:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>179236</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwNzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3MSBA
QAorMjAxOS0wMS0zMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbV2ViQXNzZW1ibHldIENoYW5nZSBCQlEgdG8gZ2VuZXJhdGUgQWlyIElSCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE4MDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3NjUxNzE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBXYXNtIGNvbXBpbGVyIGZvciB0
aGUgQkJRIHRpZXIuIEluc3RlYWQKKyAgICAgICAgb2YgY29tcGlsaW5nIHVzaW5nICBCMy0wMSwg
d2Ugbm93IGdlbmVyYXRlIEFpciBjb2RlIGRpcmVjdGx5LgorICAgICAgICBUaGUgZ29hbCBvZiBk
b2luZyB0aGlzIHdhcyB0byBzcGVlZCB1cCBjb21waWxlIHRpbWVzIGZvciBXYXNtCisgICAgICAg
IHByb2dyYW1zLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBwcm92aWRlcyB1cyB3aXRo
IGEgMjAtMzAlIGNvbXBpbGUgdGltZSBzcGVlZHVwLiBIb3dldmVyLCBJCisgICAgICAgIGhhdmUg
aWRlYXMgb24gaG93IHRvIGltcHJvdmUgY29tcGlsZSB0aW1lcyBldmVuIGZ1cnRoZXIuIEZvciBl
eGFtcGxlLAorICAgICAgICB3ZSBzaG91bGQgcHJvYmFibHkgaW1wbGVtZW50IGEgZmFzdGVyIHJ1
bm5pbmcgcmVnaXN0ZXIgYWxsb2NhdG9yOgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDM2CisgICAgICAgIAorICAgICAgICBXZSBjYW4gYWxzbyBp
bXByb3ZlIG9uIHRoZSBjb2RlIHdlIGdlbmVyYXRlLgorICAgICAgICBXZSBzaG91bGQgZW1pdCBi
ZXR0ZXIgY29kZSBmb3IgU3dpdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MDUzCisgICAgICAgIEFuZCB3ZSBzaG91bGQgZG8gYmV0dGVyIGluc3RydWN0aW9u
IHNlbGVjdGlvbiBpbiB2YXJpb3VzCisgICAgICAgIGFyZWFzOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwu
aDoKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUpOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6
CisgICAgICAgICogYjMvYWlyL0FpclRtcC5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OlRtcCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6Q29uc3RyYWlu
ZWRUbXA6OkNvbnN0cmFpbmVkVG1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6OlR5
cGVkVG1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlZFRtcDo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OlR5cGVkVG1wOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VHlwZWRUbXA6Om9wZXJhdG9yIFRtcCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVkVG1wOjpvcGVyYXRvciBBcmcgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUeXBlZFRtcDo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6OnR5
cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERh
dGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNv
bnRyb2xEYXRhOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpzaWduYXR1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6Omhhc05vblZvaWRTaWduYXR1cmUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnRh
cmdldEJsb2NrRm9yQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjpjb252ZXJ0SWZUb0Jsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpyZXN1bHRGb3JCcmFuY2ggY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmZhaWwgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6c2V0UGFyc2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OnRvVG1wVmVjdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OnJlbGVhc2VUbXApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
dmFsaWRhdGVJbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmV4dHJh
Y3RBcmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YXBwZW5kKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFwcGVuZEVmZmVjdGZ1bCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6ZzMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6Omc2NCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpmMzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZjY0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OnRtcEZvclR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjplbWl0UGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
ZW1pdENDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6Om1vdmVPcEZv
clZhbHVlVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjppbnN0YW5j
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRl
clBsdXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6cmVzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6ZW1pdFRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpnZXRMb2Nh
bCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206
OnNpemVPZkxvYWRPcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0
TG9hZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmxvYWQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpzaXplT2ZTdG9yZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFNl
bGVjdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hl
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUb3BMZXZlbCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRFbHNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVs
c2VUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZFJldHVybik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2gp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
dW5pZnlWYWx1ZXNXaXRoQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpvcmlnaW4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRNb2RPckRpdik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
RGl2Uz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRSZW1TPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NERpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0UmVtVT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0Pik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0
Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NE5lYXJlc3Q+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyTmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2
ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJUcnVuY1VGMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRTaGlmdCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3ViKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEJpbk9wKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJNdWw+KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3Vi
Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NExlPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkRlbW90ZUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJNaW4+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0TmU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0THQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWF4Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE11bD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6Pik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvcHlzaWduPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRV
STMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMlJlaW50ZXJwcmV0STMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NEFuZD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0Pik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEdlPik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFU+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXF6Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NERpdj4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBZGQ+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
T3I+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyTGVVPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkxlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjROZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDbHo+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyTmVnPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkFuZD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90cj4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBYnM+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRTPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvcHlzaWduPik6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNv
bnZlcnRTSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFJvdGw+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyTHQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTGU+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR2U+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUkzMj4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJT
aHJTPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkdlVT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjRDZWlsPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkdlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJTaGw+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0Rmxvb3I+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFN1Yj4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZWludGVycHJl
dEYzMj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJBZGQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0U3ViPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMk9yPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEx0VT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRMdFM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJNjQ+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlVT4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRNdWw+KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3ViPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFByb21v
dGVGMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0QWRkPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEdlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk5lPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFJlaW50ZXJwcmV0STY0Pik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkVxPik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29yPik6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNv
bnZlcnRTSTMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkVxej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRSZWludGVycHJldEY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJTPik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3FydD4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2
ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJSb3RsPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlJvdHI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyR3RVPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFNJMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RTPik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVVPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlUz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRBZGQ+KToKKyAg
ICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiB3YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgICog
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpqc2ND
YWxsaW5nQ29udmVudGlvbkFpcik6CisgICAgICAgIChKU0M6Oldhc206Ondhc21DYWxsaW5nQ29u
dmVudGlvbkFpcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OkNhbGxpbmdDb252ZW50aW9uKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnRJ
bXBsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNo
YWxsQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlv
bkFpcjo6Q2FsbGluZ0NvbnZlbnRpb25BaXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5n
Q29udmVudGlvbkFpcjo6cHJvbG9ndWVTY3JhdGNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q2FsbGluZ0NvbnZlbnRpb25BaXI6Om1hcnNoYWxsQXJndW1lbnRJbXBsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb25BaXI6Om1hcnNoYWxsQXJndW1lbnQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlvbkFpcjo6aGVhZGVy
U2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlvbkFpcjo6
bG9hZEFyZ3VtZW50cyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50
aW9uQWlyOjpzZXR1cENhbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpuZXh0SlNDT2Zm
c2V0KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRl
OjplbXB0eUV4cHJlc3Npb24pOgorCiAyMDE5LTAxLTMwICBUYWRldSBaYWdhbGxvICA8dHphZ2Fs
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENhY2hlZEJ5dGVjb2RlJ3MgbW92ZSBjb25zdHJ1Y3Rv
ciBzaG91bGQgbm90IGNhbGwgYGZyZWVEYXRhSWZPd25lZGAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcxLDYgKzk3MSw3IEBAIHRvb2xzL0pTRG9s
bGFyVk0uY3BwCiB0b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNwZWN0
b3IuY3BwCiAKK3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAogd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKIHdhc20vV2FzbUJCUVBsYW4uY3BwCiB3YXNtL1dhc21CaW5kaW5nLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDggQEAKIAkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxv
Y2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3OEY5MDFB
MDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFDNEI3MUU5NzdDNUQwMDM1MDBF
MSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyODQ3QURC
MjFGRkI4NjYwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURC
IC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi87IH07CisJCTUyODQ3QURDMjFGRkI4NjkwMDYx
QTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJH
ZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzExMDAxOTc1QjQ2NzAw
ODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRp
bWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM1OCw2ICszMzYwLDggQEAKIAkJ
NTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJs
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Db2RlQmxvY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3NzczREQxQUFGODNBQzAwQkRFN0U4IC8q
IFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1
bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI4NDdBRDkyMUZG
Qjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMxMEZFMTk3NUI0MjQw
MDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBl
TG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDM0LDYg
KzY0MzgsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLywKIAkJCQk1
M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuY3BwICovLAogCQkJ
CTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5oICovLAorCQkJ
CTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuY3BwICovLAor
CQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLywK
IAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICovLAogCQkJ
CTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5oICovLAogCQkJCTUzRjhE
MUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklubGluZXMuaCAqLywKQEAgLTg1Mjks
NiArODUzNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8qIEIzTGVnYWxpemVN
ZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxRTFCRjI4NkVBMDAxM0M4
OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDMxOURBMDQxQzFCRTQw
RDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2MUMxQTUzNTkwMEQ4MkFFNiAvKiBC
M01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTQwLDYgKzEwNTQ3LDcg
QEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTEtbW0ubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNv
dXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUIxRjczNUU3ODAwMzdGQzMzIC8q
IFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTI4NDdBREIyMUZGQjg2
NjAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5OTAwMzdGQzMzIC8qIFVuaWZpZWRT
b3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzY2LDggKzMzNjYs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVyblZhbHVlRlBSID0gVG1wKEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3Nz
aWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gSWYgd2UgZGlkIHdh
bnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9pZCByZXR1cm4sIHdlJ2QgaW50cm9k
dWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5Wb2lkLgorICAgICAgICAgICAgICAg
IC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBjaGls
ZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAvLyBmb3Igdm9pZCByZXR1cm5zLgog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMyOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDI0MDY5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw3ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICBSZWdpc3RlclNldCBleHRyYUVh
cmx5Q2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKICAgICBSZWdpc3RlclNldCBleHRy
YUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0JikgZmluYWw7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhp
cyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBs
KCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3Zl
cnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1h
bnkKICAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCiAgICAgdm9pZCBmb3JF
YWNoQXJnSW1wbCgKICAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQg
bnVtSWdub3JlZEFpckFyZ3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q29kZS5jcHAJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDExIEBAIENvZGU6On5D
b2RlKCkKIHsKIH0KIAordm9pZCBDb2RlOjplbWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVy
cyYgaml0KQoreworICAgIGRlZmF1bHRQcm9sb2d1ZUdlbmVyYXRvcihqaXQsICp0aGlzKTsKK30K
Kwogdm9pZCBDb2RlOjpzZXRSZWdzSW5Qcmlvcml0eU9yZGVyKEJhbmsgYmFuaywgY29uc3QgVmVj
dG9yPFJlZz4mIHJlZ3MpCiB7CiAgICAgcmVnc0luUHJpb3JpdHlPcmRlckltcGwoYmFuaykgPSBy
ZWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9u
IDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzUsNiArMzM1LDggQEAgcHVibGljOgogICAgIFJlZ2lzdGVyU2V0IHBp
bm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVkUmVnczsgfQogICAgIAogICAg
IFdlYWtSYW5kb20mIHdlYWtSYW5kb20oKSB7IHJldHVybiBtX3dlYWtSYW5kb207IH0KKworICAg
IHZvaWQgZW1pdERlZmF1bHRQcm9sb2d1ZShDQ2FsbEhlbHBlcnMmKTsKICAgICAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIDo6SlNDOjpCMzo6UHJvY2VkdXJlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIGNsYXNzIENvZGU7CiAKIGNsYXNzIFRtcCB7CiBwdWJsaWM6Ci0gICAgVG1wKCkKKyAgICBj
b25zdGV4cHIgVG1wKCkKICAgICAgICAgOiBtX3ZhbHVlKDApCiAgICAgewogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDI0MDY5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3Ry
ZWFtaW4KICAgICB2KGJvb2wsIGNyYXNoSWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxz
ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFz
dCBtZW1vcnkgZm9yIHdhc20uIikgXAogICAgIHYodW5zaWduZWQsIG1heE51bVdlYkFzc2VtYmx5
RmFzdE1lbW9yaWVzLCA0LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUZhc3RU
TFNGb3JXYXNtQ29udGV4dCwgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBzdG9yZSBj
b250ZXh0IGluIGZhc3QgVExTLiBJZiBmYWxzZSwgd2Ugd2lsbCBwaW4gaXQgdG8gYSByZWdpc3Rl
ci4iKSBcCisgICAgdihib29sLCB3YXNtQkJRVXNlc0FpciwgdHJ1ZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSwgZW5hYmxlV2ViQXNz
ZW1ibHlTdHJlYW1pbmdBcGksIE5vcm1hbCwgIkFsbG93IHRvIHJ1biBXZWJBc3NlbWJseSdzIFN0
cmVhbWluZyBBUEkiKSBcCiAgICAgdihib29sLCB1c2VDYWxsSUNzRm9yV2ViQXNzZW1ibHlUb0pT
Q2FsbHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgdXNlIENhbGxMaW5rSW5mbyB0
byBpbmxpbmUgY2FjaGUgV2FzbSB0byBKUyBjYWxscy4iKSBcCiAgICAgdihib29sLCB1c2VFYWdl
cldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZywgZmFsc2UsIE5vcm1hbCwgIlVubmFtZWQgV2ViQXNz
ZW1ibHkgbW9kdWxlcyBhcmUgaWRlbnRpZmllZCBpbiBiYWNrdHJhY2VzIHRocm91Z2ggdGhlaXIg
aGFzaCwgaWYgYXZhaWxhYmxlLiIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzQ4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtQWlySVJHZW5lcmF0
b3IuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIK
KyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisj
aW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2VJZi5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ2hl
Y2tTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRj
aHBvaW50U3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
CisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2Fz
bUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKKyNpbmNs
dWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAi
V2FzbU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAi
V2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCisjaW5jbHVk
ZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKK3VzaW5nIG5hbWVzcGFjZSBCMzo6QWlyOworCitzdHJ1Y3QgQ29uc3Ry
YWluZWRUbXAgeworICAgIENvbnN0cmFpbmVkVG1wKFRtcCB0bXApCisgICAgICAgIDogQ29uc3Ry
YWluZWRUbXAodG1wLCB0bXAuaXNSZWcoKSA/IEIzOjpWYWx1ZVJlcDo6cmVnKHRtcC5yZWcoKSkg
OiBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcikKKyAgICB7IH0KKworICAgIENvbnN0cmFpbmVk
VG1wKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApCisgICAgICAgIDogdG1wKHRtcCkKKyAgICAg
ICAgLCByZXAocmVwKQorICAgIHsKKyAgICB9CisKKyAgICBUbXAgdG1wOworICAgIEIzOjpWYWx1
ZVJlcCByZXA7Cit9OworCitjbGFzcyBUeXBlZFRtcCB7CitwdWJsaWM6CisgICAgY29uc3RleHBy
IFR5cGVkVG1wKCkKKyAgICAgICAgOiBtX3RtcCgpCisgICAgICAgICwgbV90eXBlKFR5cGU6OlZv
aWQpCisgICAgeyB9CisKKyAgICBUeXBlZFRtcChUbXAgdG1wLCBUeXBlIHR5cGUpCisgICAgICAg
IDogbV90bXAodG1wKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgIHsgfQorCisgICAgVHlw
ZWRUbXAoY29uc3QgVHlwZWRUbXAmKSA9IGRlZmF1bHQ7CisgICAgVHlwZWRUbXAoVHlwZWRUbXAm
JikgPSBkZWZhdWx0OworICAgIFR5cGVkVG1wJiBvcGVyYXRvcj0oVHlwZWRUbXAmJikgPSBkZWZh
dWx0OworICAgIFR5cGVkVG1wJiBvcGVyYXRvcj0oY29uc3QgVHlwZWRUbXAmKSA9IGRlZmF1bHQ7
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZWRUbXAmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdG1wID09IG90aGVyLm1fdG1wICYmIG1fdHlwZSA9PSBvdGhl
ci5tX3R5cGU7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUeXBlZFRtcCYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
fQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhdG1wKCk7
IH0KKworICAgIG9wZXJhdG9yIFRtcCgpIGNvbnN0IHsgcmV0dXJuIHRtcCgpOyB9CisgICAgb3Bl
cmF0b3IgQXJnKCkgY29uc3QgeyByZXR1cm4gQXJnKHRtcCgpKTsgfQorICAgIFRtcCB0bXAoKSBj
b25zdCB7IHJldHVybiBtX3RtcDsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQorCitwcml2YXRlOgorCisgICAgVG1wIG1fdG1wOworICAgIFR5cGUgbV90eXBlOwor
fTsKKworY2xhc3MgQWlySVJHZW5lcmF0b3IgeworcHVibGljOgorICAgIHN0cnVjdCBDb250cm9s
RGF0YSB7CisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBUeXBlIHJldHVy
blR5cGUsIFR5cGVkVG1wIHJlc3VsdFRtcCwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgICAgICA6
IGJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9u
KQorICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCisgICAgICAgICAgICAsIHJldHVyblR5
cGUocmV0dXJuVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG9yaWdp
bik7IC8vIEZJWE1FOiBVc2Ugb3JpZ2luLgorICAgICAgICAgICAgaWYgKHJlc3VsdFRtcCkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpOworICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1wKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlID09IFR5cGU6OlZvaWQpOworICAgICAg
ICB9CisKKyAgICAgICAgQ29udHJvbERhdGEoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpJZjoK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAgICAiKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpCbG9jazoKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiTG9vcDogICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBCbG9ja1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAgICAgIG91dC5wcmludCgiVG9wTGV2
ZWw6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250aW51YXRpb24sICIsIFNwZWNpYWw6
ICIpOworICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50
KCpzcGVjaWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Ik5vbmUiKTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gYmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlwZSBzaWduYXR1cmUoKSBjb25zdCB7IHJl
dHVybiByZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkU2lnbmF0dXJlKCkg
Y29uc3QgeyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIHRh
cmdldEJsb2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9
PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWw7CisgICAg
ICAgICAgICByZXR1cm4gY29udGludWF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBj
b252ZXJ0SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUoKSA9
PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2NrVHlwZSA9IEJsb2NrVHlwZTo6Qmxv
Y2s7CisgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IHVzaW5nIFJlc3VsdExpc3QgPSBWZWN0b3I8VHlwZWRUbXAsIDE+OworCisgICAgICAgIFJlc3Vs
dExpc3QgcmVzdWx0Rm9yQnJhbmNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3Vs
dExpc3QoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdlbmVyYXRvcjsKKyAgICAgICAgQmxv
Y2tUeXBlIGJsb2NrVHlwZTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uOworICAg
ICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdDsKKyAg
ICAgICAgVHlwZSByZXR1cm5UeXBlOworICAgIH07CisKKyAgICB1c2luZyBFeHByZXNzaW9uVHlw
ZSA9IFR5cGVkVG1wOworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CisgICAg
dXNpbmcgRXhwcmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OworICAgIHVz
aW5nIFJlc3VsdExpc3QgPSBDb250cm9sRGF0YTo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBDb250
cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsK
KworICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiB7
IH07IH07CisKKyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBl
Y3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47Cisg
ICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBORVZFUl9JTkxJTkUgVW5leHBlY3Rl
ZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CisgICAg
eworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21t
ZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFr
ZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0
cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2RlZmluZSBXQVNNX0NPTVBJTEVfRkFJTF9JRihj
b25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsg
ICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyAgICBBaXJJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25N
b2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2Vw
dGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOworICAgIEV4cHJl
c3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KTsKKyAgICBFeHByZXNzaW9uVHlw
ZSBhZGRDb25zdGFudChCYXNpY0Jsb2NrKiwgVHlwZSwgdWludDY0X3QpOworCisgICAgLy8gTG9j
YWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSk7CisKKyAgICAvLyBHbG9iYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRHbG9iYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAgIC8vIE1lbW9yeQorICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9hZE9wVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzdG9yZShTdG9yZU9wVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNl
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkR3Jvd01lbW9yeShF
eHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKKworICAgIC8vIEJhc2ljIG9wZXJhdG9ycworICAgIHRlbXBsYXRlPE9wVHlw
ZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIHRlbXBsYXRlPE9wVHlwZT4K
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRPcChFeHByZXNzaW9uVHlw
ZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU2VsZWN0KEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVy
bywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAvLyBDb250cm9sIGZsb3cKKyAgICBD
b250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUp
OworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCbG9jayhUeXBlIHNpZ25h
dHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvb3AoVHlwZSBz
aWduYXR1cmUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZElmKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xEYXRhJiByZXN1
bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJv
bERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CisKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERh
dGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9s
RGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3Rh
Y2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRy
b2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
Jik7CisKKyAgICAvLyBDYWxscworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgp
OworCisgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChUeXBlLCBCMzo6QWlyOjpPcGNvZGUsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRlZ2VyU3ViKEIzOjpBaXI6Ok9wY29k
ZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQb2ludEFicyhCMzo6QWly
OjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRCaW5PcChUeXBlLCBCMzo6QWlyOjpP
cGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKKworICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5
PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsK
KyAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4qIHBhcnNl
cikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKKworICAgIHN0YXRpYyBWZWN0b3I8VG1wPiB0b1Rt
cFZlY3Rvcihjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBW
ZWN0b3I8VG1wPiByZXN1bHQ7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IHZlY3Rv
cikKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS50bXAoKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCByZWxlYXNlVG1wKFRtcCB0bXApCisgICAgewor
ICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHRtcC5p
c1JlZygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG1wLmlzR1AoKSkKKyAg
ICAgICAgICAgIG1fZnJlZUdQVGVtcHMuYXBwZW5kKHRtcCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fZnJlZUZQVGVtcHMuYXBwZW5kKHRtcCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB2YWxpZGF0ZUluc3QoSW5zdCYgaW5zdCkKKyAgICB7CisgICAg
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBpZiAoIWluc3QuaXNWYWxp
ZEZvcm0oKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbihpbnN0KTsKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIEFyZyBleHRyYWN0QXJnKGNvbnN0IFR5cGVkVG1wJiB0bXApIHsgcmV0dXJuIHRtcC50bXAo
KTsgfQorICAgIHN0YXRpYyBBcmcgZXh0cmFjdEFyZyhjb25zdCBUbXAmIHRtcCkgeyByZXR1cm4g
QXJnKHRtcCk7IH0KKyAgICBzdGF0aWMgQXJnIGV4dHJhY3RBcmcoY29uc3QgQXJnJiBhcmcpIHsg
cmV0dXJuIGFyZzsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHZvaWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJsb2NrLCBLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBGaW5zIGEgd2F5IHRvIHVzZSBv
cmlnaW4gaGVyZS4KKyAgICAgICAgYXV0byYgaW5zdCA9IGJsb2NrLT5hcHBlbmQoa2luZCwgbnVs
bHB0ciwgZXh0cmFjdEFyZyhhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgdmFsaWRhdGVJbnN0KGlu
c3QpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2
b2lkIGFwcGVuZChLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7Cisg
ICAgICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywga2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50
cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIHZvaWQgYXBwZW5kRWZmZWN0ZnVsKEIzOjpBaXI6Ok9wY29kZSBvcCwgQXJn
dW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgS2luZCBraW5kID0gb3A7Cisg
ICAgICAgIGtpbmQuZWZmZWN0cyA9IHRydWU7CisgICAgICAgIGFwcGVuZChtX2N1cnJlbnRCbG9j
aywga2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQor
CisgICAgVG1wIG5ld1RtcChCMzo6QmFuayBiYW5rKQorICAgIHsKKyAgICAgICAgaWYgKGJhbmsg
PT0gQjM6OkZQICYmIG1fZnJlZUZQVGVtcHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1f
ZnJlZUZQVGVtcHMudGFrZUxhc3QoKTsKKyAgICAgICAgaWYgKGJhbmsgPT0gQjM6OkdQICYmIG1f
ZnJlZUdQVGVtcHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fZnJlZUdQVGVtcHMudGFr
ZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIG1fY29kZS5uZXdUbXAoYmFuayk7CisgICAgfQorCisg
ICAgVHlwZWRUbXAgZzMyKCkgeyByZXR1cm4geyBuZXdUbXAoQjM6OkdQKSwgVHlwZTo6STMyIH07
IH0KKyAgICBUeXBlZFRtcCBnNjQoKSB7IHJldHVybiB7IG5ld1RtcChCMzo6R1ApLCBUeXBlOjpJ
NjQgfTsgfQorICAgIFR5cGVkVG1wIGYzMigpIHsgcmV0dXJuIHsgbmV3VG1wKEIzOjpGUCksIFR5
cGU6OkYzMiB9OyB9CisgICAgVHlwZWRUbXAgZjY0KCkgeyByZXR1cm4geyBuZXdUbXAoQjM6OkZQ
KSwgVHlwZTo6RjY0IH07IH0KKworICAgIFR5cGVkVG1wIHRtcEZvclR5cGUoVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgor
ICAgICAgICAgICAgcmV0dXJuIGczMigpOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAg
ICAgICAgIHJldHVybiBnNjQoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAg
ICByZXR1cm4gZjMyKCk7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0
dXJuIGY2NCgpOworICAgICAgICBjYXNlIFR5cGU6OlZvaWQ6CisgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGFk
ZFBhdGNocG9pbnQoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb2Mu
YWRkPEIzOjpQYXRjaHBvaW50VmFsdWU+KHR5cGUsIEIzOjpPcmlnaW4oKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChC
Mzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQor
ICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1
bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPih0aGVBcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2Nr
KiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJn
cy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywg
cGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBzaXplb2YuLi4oQXJncyk+Ojpm
cm9tKHRoZUFyZ3MuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2lj
QmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0
KQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3Vs
dCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wPigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8c2l6
ZV90IGlubGluZVNpemU+CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNp
Y0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENv
bnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFyZ3MpCisgICAgeworICAgICAgICBpZiAoIW1f
cGF0Y2hwb2ludFNwZWNpYWwpCisgICAgICAgICAgICBtX3BhdGNocG9pbnRTcGVjaWFsID0gc3Rh
dGljX2Nhc3Q8QjM6OlBhdGNocG9pbnRTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjpt
YWtlX3VuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNpYWw+KCkpKTsKKworICAgICAgICBJbnN0IGlu
c3QoUGF0Y2gsIHBhdGNoLCBBcmc6OnNwZWNpYWwobV9wYXRjaHBvaW50U3BlY2lhbCkpOworICAg
ICAgICBJbnN0IHJlc3VsdE1vdjsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAg
QVNTRVJUKHBhdGNoLT50eXBlKCkgIT0gQjM6OlZvaWQpOworICAgICAgICAgICAgc3dpdGNoIChw
YXRjaC0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZh
bHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChw
YXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdE1v
diA9IEluc3QocmVzdWx0LmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAo
cGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkpLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAg
ICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgQVNTRVJUKHBhdGNoLT50eXBlKCkgPT0gQjM6OlZvaWQpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChDb25zdHJhaW5lZFRtcCYgdG1wIDogYXJncykgeworICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgbGVzcyB0aGFuIGlkZWFsIHRvIGNyZWF0ZSBkdW1teSB2YWx1ZXMganVzdCB0
byBzYXRpc2Z5IEFpcidzCisgICAgICAgICAgICAvLyB2YWxpZGF0aW9uLiBXZSBzaG91bGQgYWJz
dHJjYXQgUGF0Y2ggZW5vdWdoIHNvIFZhbHVlUmVwJ3MgZG9uJ3QgbmVlZCB0byBiZQorICAgICAg
ICAgICAgLy8gYmFja2VkIGJ5IFZhbHVlcy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQwNDAKKyAgICAgICAgICAgIEIzOjpWYWx1ZSog
ZHVtbXlWYWx1ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNH
UCgpID8gQjM6OkludDY0IDogQjM6OkRvdWJsZSwgMCk7CisgICAgICAgICAgICBwYXRjaC0+YXBw
ZW5kKGR1bW15VmFsdWUsIHRtcC5yZXApOworICAgICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtp
bmQoKSkgeworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAg
ICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcC50bXApOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAg
ICAgICAgICAgIHBhdGNoLT5lYXJseUNsb2JiZXJlZCgpLmNsZWFyKHRtcC5yZXAucmVnKCkpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUg
OiBNb3ZlRG91YmxlLCB0bXAudG1wLCB0bXAucmVwLnJlZygpKTsKKyAgICAgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKFRtcCh0bXAucmVwLnJlZygpKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDogeworICAg
ICAgICAgICAgICAgIGF1dG8gYXJnID0gQXJnOjpjYWxsQXJnKHRtcC5yZXAub2Zmc2V0RnJvbVNQ
KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/
IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCBhcmcpOworICAgICAgICAgICAgICAgIGluc3Qu
YXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXRj
aC0+cmVzdWx0Q29uc3RyYWludC5pc1JlZygpKQorICAgICAgICAgICAgcGF0Y2gtPmxhdGVDbG9i
YmVyZWQoKS5jbGVhcihwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHBhdGNoLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAg
ICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGc2NCgpLnRtcCgpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gcGF0Y2gtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAg
IGluc3QuYXJncy5hcHBlbmQoZjY0KCkudG1wKCkpOworCisgICAgICAgIHZhbGlkYXRlSW5zdChp
bnN0KTsKKyAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgICAg
ICBpZiAocmVzdWx0TW92KSB7CisgICAgICAgICAgICB2YWxpZGF0ZUluc3QocmVzdWx0TW92KTsK
KyAgICAgICAgICAgIGJhc2ljQmxvY2stPmFwcGVuZChXVEZNb3ZlKHJlc3VsdE1vdikpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJyYW5jaCwgdHlwZW5hbWUg
R2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdENoZWNrKGNvbnN0IEJyYW5jaCYgbWFrZUJyYW5jaCwg
Y29uc3QgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICAvLyBXZSBmYWlsIGFs
b25nIHRoZSB0cnV0aHkgZWRnZSBvZiAnYnJhbmNoJy4KKyAgICAgICAgSW5zdCBicmFuY2ggPSBt
YWtlQnJhbmNoKCk7CisKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgYSBoYXNobWFwIG9mIHRoZXNl
LgorICAgICAgICBCMzo6Q2hlY2tTcGVjaWFsOjpLZXkga2V5KGJyYW5jaCk7CisgICAgICAgIEIz
OjpDaGVja1NwZWNpYWwqIHNwZWNpYWwgPSBzdGF0aWNfY2FzdDxCMzo6Q2hlY2tTcGVjaWFsKj4o
bV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q2hlY2tTcGVjaWFsPihrZXkp
KSk7CisKKyAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgZHVtbXkgdmFsdWVz
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQw
NDAKKyAgICAgICAgQjM6OlZhbHVlKiBkdW1teVByZWRpY2F0ZSA9IG1fcHJvYy5hZGRDb25zdGFu
dChCMzo6T3JpZ2luKCksIEIzOjpJbnQzMiwgNDIpOworICAgICAgICBCMzo6Q2hlY2tWYWx1ZSog
Y2hlY2tWYWx1ZSA9IG1fcHJvYy5hZGQ8QjM6OkNoZWNrVmFsdWU+KEIzOjpDaGVjaywgQjM6Ok9y
aWdpbigpLCBkdW1teVByZWRpY2F0ZSk7CisgICAgICAgIGNoZWNrVmFsdWUtPnNldEdlbmVyYXRv
cihnZW5lcmF0b3IpOworCisgICAgICAgIEluc3QgaW5zdChQYXRjaCwgY2hlY2tWYWx1ZSwgQXJn
OjpzcGVjaWFsKHNwZWNpYWwpKTsKKyAgICAgICAgaW5zdC5hcmdzLmFwcGVuZFZlY3RvcihicmFu
Y2guYXJncyk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lIC4uLkFyZ3M+
CisgICAgdm9pZCBlbWl0Q0NhbGwoRnVuYyBmdW5jLCBUeXBlZFRtcCByZXN1bHQsIEFyZ3MuLi4g
YXJncykKKyAgICB7CisgICAgICAgIGVtaXRDQ2FsbChtX2N1cnJlbnRCbG9jaywgZnVuYywgcmVz
dWx0LCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRDQ2FsbChCYXNp
Y0Jsb2NrKiBibG9jaywgRnVuYyBmdW5jLCBUeXBlZFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJn
cykKKyAgICB7CisgICAgICAgIEIzOjpUeXBlIHJlc3VsdFR5cGUgPSBCMzo6Vm9pZDsKKyAgICAg
ICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgc3dpdGNoIChyZXN1bHQudHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgICAgICByZXN1bHRUeXBlID0g
QjM6OkludDMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
OjpJNjQ6CisgICAgICAgICAgICAgICAgcmVzdWx0VHlwZSA9IEIzOjpJbnQ2NDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAg
ICAgIHJlc3VsdFR5cGUgPSBCMzo6RmxvYXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgICAgICByZXN1bHRUeXBlID0gQjM6
OkRvdWJsZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gbWFrZUR1bW15VmFsdWUgPSBbJl0gKFRtcCB0
bXApIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGxlc3MgdGhhbiBpZGVhbCB0byBj
cmVhdGUgZHVtbXkgdmFsdWVzIGp1c3QgdG8gc2F0aXNmeSBBaXIncworICAgICAgICAgICAgLy8g
dmFsaWRhdGlvbi4gV2Ugc2hvdWxkIGFic3RyY2F0IENDYWxsIGVub3VnaCBzbyB3ZSdyZSBub3Qg
cmVsaWFudCBvbiBhcmd1bWVudHMKKyAgICAgICAgICAgIC8vIHRvIHRoZSBCMzo6Q0NhbGxWYWx1
ZS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQwNDAKKyAgICAgICAgICAgIGlmICh0bXAuaXNHUCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtX3Byb2MuYWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6SW50NjQsIDApOworICAg
ICAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpEb3Vi
bGUsIDApOworICAgICAgICB9OworCisgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlGdW5jID0gbV9w
cm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkludDY0LCBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihmdW5jKSk7CisgICAgICAgIEIzOjpWYWx1ZSogb3JpZ2luID0gbV9wcm9jLmFkZDxC
Mzo6Q0NhbGxWYWx1ZT4ocmVzdWx0VHlwZSwgQjM6Ok9yaWdpbigpLCBCMzo6RWZmZWN0czo6bm9u
ZSgpLCBkdW1teUZ1bmMsIG1ha2VEdW1teVZhbHVlKHRoZUFyZ3MpLi4uKTsKKworICAgICAgICBJ
bnN0IGluc3QoQ0NhbGwsIG9yaWdpbik7CisKKyAgICAgICAgVG1wIGNhbGxlZSA9IGc2NCgpOwor
ICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihm
dW5jLCBCM0NDYWxsUHRyVGFnKSksIGNhbGxlZSk7CisgICAgICAgIGluc3QuYXJncy5hcHBlbmQo
Y2FsbGVlKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChyZXN1bHQudG1wKCkpOworCisgICAgICAgIGZvciAoVG1wIHRtcCA6IFZlY3RvcjxUbXAs
IHNpemVvZi4uLihBcmdzKT46OmZyb20odGhlQXJncy50bXAoKS4uLikpCisgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKHRtcCk7CisKKyAgICAgICAgYmxvY2stPmFwcGVuZChXVEZNb3ZlKGlu
c3QpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQjM6OkFpcjo6T3Bjb2RlIG1vdmVPcEZvclZhbHVl
VHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICByZXR1cm4gTW92ZTMyOworICAgICAgICBjYXNl
IFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlOworICAgICAgICBjYXNlIFR5cGU6
OkYzMjoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlRmxvYXQ7CisgICAgICAgIGNhc2UgVHlwZTo6
RjY0OgorICAgICAgICAgICAgcmV0dXJuIE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9u
VHlwZSk7CisKKyAgICB2b2lkIGVtaXRUaWVyVXBDaGVjayh1aW50MzJfdCBkZWNyZW1lbnRDb3Vu
dCwgQjM6Ok9yaWdpbik7CisKKyAgICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJl
UG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90
IHNpemVPZk9wKTsKKyAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4
cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3Rv
cmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisKKyAgICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Np
b25UeXBlJiBkc3QsIGNvbnN0IEV4cHJlc3Npb25UeXBlJiBzb3VyY2UpOworICAgIHZvaWQgdW5p
ZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBjb25z
dCBSZXN1bHRMaXN0JiBzdGFjayk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4K
KyAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRpdihib29sIGlzU2lnbmVkRGl2LCBFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW50VHlwZT4KKyAgICB2b2lkIGVtaXRNb2RPckRpdihib29sIGlzRGl2LCBFeHByZXNz
aW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CisKKyAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JFVFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0
KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOworCisgICAgdm9pZCByZXN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZShCYXNpY0Jsb2NrKiwgVHlwZWRUbXApOworICAgIGVudW0gY2xhc3MgUmVzdG9y
ZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVzIH07CisgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3Jt
YXRpb24mLCBUeXBlZFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayopOworCisgICAgQjM6Ok9yaWdp
biBvcmlnaW4oKTsKKworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJz
ZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAg
ICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07
CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsg
VUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBDb3VudCogbV90aWVyVXAgeyBudWxscHRyIH07
CisKKyAgICBCMzo6UHJvY2VkdXJlJiBtX3Byb2M7CisgICAgQ29kZSYgbV9jb2RlOworICAgIEJh
c2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1f
cm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxUeXBlZFRtcD4gbV9sb2NhbHM7Cisg
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2Ug
YWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIEdQUlJlZyBtX21lbW9yeUJh
c2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IElu
dmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52
YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbV9tYWtlc0NhbGxzIHsgZmFsc2UgfTsKKworICAgIFZl
Y3RvcjxUbXAsIDg+IG1fZnJlZUZQVGVtcHM7CisgICAgVmVjdG9yPFRtcCwgOD4gbV9mcmVlR1BU
ZW1wczsKKworICAgIFR5cGVkVG1wIG1faW5zdGFuY2VWYWx1ZTsgLy8gQWx3YXlzIHVzZSB0aGUg
YWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBpcyBtYXRlcmlhbGl6
ZWQgd2hlbiB1c2VkLgorICAgIGJvb2wgbV91c2VzSW5zdGFuY2VWYWx1ZSB7IGZhbHNlIH07Cisg
ICAgVHlwZWRUbXAgaW5zdGFuY2VWYWx1ZSgpCisgICAgeworICAgICAgICBtX3VzZXNJbnN0YW5j
ZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1faW5zdGFuY2VWYWx1ZTsKKyAgICB9CisK
KyAgICB1aW50MzJfdCBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyB7IDAgfTsKKworICAgIEIzOjpQ
YXRjaHBvaW50U3BlY2lhbCogbV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxwdHIgfTsKK307CisK
Ky8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2lnbmVkIDMyLWJpdCBv
ZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNldHMgaW4gQjMuCitp
bnQzMl90IEFpcklSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25U
eXBlJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNQdHIgPSBwdHI7CisgICAg
ICAgIHB0ciA9IGc2NCgpOworICAgICAgICBhdXRvIGNvbnN0YW50ID0gZzY0KCk7CisgICAgICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCBjb25zdGFudCk7CisgICAgICAgIGFw
cGVuZChBZGQ2NCwgY29uc3RhbnQsIHByZXZpb3VzUHRyLCBwdHIpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6
cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ssIFR5cGVkVG1wIGlu
c3RhbmNlKQoreworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAgYXV0
byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBpZiAoQ0Nh
bGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lz
dGVyKCkpCisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNy
b1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlm
IGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29udGV4dEluc3RhbmNl
TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVdhc21D
b250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVt
aXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEJlY2F1c2UgV2FzbVRvV2FzbSBjYWxs
IGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRvZXMgbm90IHJlc3Rv
cmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuCisgICAgLy8g
VGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50UmVnIHRvIHRoaXMgKGxvZ2ljYWxs
eSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRk
UGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZl
Y3RzOjpub25lKCk7CisgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgIGVmZmVj
dHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
ID0gZWZmZWN0czsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChtX3dh
c21Db250ZXh0SW5zdGFuY2VHUFIpKTsKKyAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQ
UiA9IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW0pIHsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3ByKCksIHdhc21Db250
ZXh0SW5zdGFuY2VHUFIpOworICAgIH0pOworICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRj
aHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOworfQorCitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5l
cmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgQ29t
cGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGll
clVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCisgICAgOiBtX2luZm8oaW5mbykKKyAgICAsIG1f
bW9kZShtb2RlKQorICAgICwgbV9jb21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQorICAg
ICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCisgICAgLCBtX3RpZXJVcCh0aWVyVXAp
CisgICAgLCBtX3Byb2MocHJvY2VkdXJlKQorICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCisg
ICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQor
eworICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgbV9yb290Qmxv
Y2sgPSBtX2N1cnJlbnRCbG9jazsKKworICAgIC8vIEZJWE1FIHdlIGRvbid0IHJlYWxseSBuZWVk
IHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0aGVyZSdzIG5vIG1lbW9yeS4gSXQgbWFrZXMgd2Fz
bSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZvciBub3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKKyAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBp
bm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworCisgICAgbV9tZW1vcnlCYXNl
R1BSID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICBtX2NvZGUucGluUmVnaXN0
ZXIobV9tZW1vcnlCYXNlR1BSKTsKKworICAgIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBp
bm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CisgICAgaWYgKCFDb250ZXh0Ojp1
c2VGYXN0VExTKCkpCisgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX3dhc21Db250ZXh0SW5z
dGFuY2VHUFIpOworCisgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Cisg
ICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOwor
ICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6
ZVJlZ2lzdGVyOworICAgICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJl
Z0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCisgICAgICAgICAgICBtX2NvZGUucGlu
UmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOworICAgIH0KKworICAgIGlmICh0aHJvd1dh
c21FeGNlcHRpb24pCisgICAgICAgIFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhj
ZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisKKyAgICBpZiAoaW5mby5tZW1vcnkpIHsKKyAg
ICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OlNp
Z25hbGluZzoKKyAgICAgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2VzIGluIHNpZ25hbGlu
ZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAvLyBleGNlcHRpb24gY2hl
Y2sgYmVjYXVzZSB0aGV5IGNhbiByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRvIGRldGVjdAorICAg
ICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWduYWxIYW5kbGVyIG5v
bmV0aGVsZXNzIG5lZWRzIHRoZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8gZXhpc3Qgc28gdGhh
dCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFU
aHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJh
dG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRzKDEpOworCisgICAg
R1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IHdhc21DYWxs
aW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgxKSA6IG1fd2FzbUNvbnRleHRJbnN0
YW5jZUdQUjsKKworICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gcHJvbG9ndWVH
ZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVu
Y3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKKyAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0KTsKKworICAgICAgICB7CisgICAg
ICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJv
bG9ndWVTY3JhdGNoKDApOworICAgICAgICAgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBqaXQubW92
ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVl
R1BSKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY29tcGlsYXRpb24sIG1vdmVMb2Nh
dGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBjb21waWxh
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRy
eVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaml0
LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVT
aXplKCk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtUGFyZW50Q2hlY2tTaXpl
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgMTAyNCk7
CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYUZyYW1lU2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0ZDo6bWF4PHVpbnQzMl90PigK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBjaGVja3Mg
Zm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSB0ZXJtaW5hbCBub2RlcyBpbiB0aGUgY2FsbAorICAgICAg
ICAgICAgICAgIC8vIHRyZWUsIChlLmcgdGhleSBkb24ndCBtYWtlIGFueSBjYWxscykgYW5kIGhh
dmUgYSBzbWFsbCBlbm91Z2ggZnJhbWUgc2l6ZS4gVGhpcyB3b3JrcyBieQorICAgICAgICAgICAg
ICAgIC8vIGhhdmluZyBhbnkgc3VjaCB0ZXJtaW5hbCBub2RlIGhhdmUgaXRzIHBhcmVudCBjYWxs
ZXIgaW5jbHVkZSBzb21lIGV4dHJhIHNpemUgaW4gaXRzCisgICAgICAgICAgICAgICAgLy8gb3du
IGNoZWNrIGZvciBpdC4gVGhlIGdvYWwgaGVyZSBpcyB0d29mb2xkOgorICAgICAgICAgICAgICAg
IC8vIDEuIEVtaXQgbGVzcyBjb2RlLgorICAgICAgICAgICAgICAgIC8vIDIuIFRyeSB0byBzcGVl
ZCB0aGluZ3MgdXAgYnkgc2tpcHBpbmcgc3RhY2sgY2hlY2tzLgorICAgICAgICAgICAgICAgIG1p
bmltdW1QYXJlbnRDaGVja1NpemUsCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMg
dG8gZWxpZGUgc3RhY2sgY2hlY2tzIGluIHRoZSBXYXNtIC0+IEVtYmVkZGVyIGNhbGwgSUMgc3R1
Yi4gU2luY2UgdGhlc2Ugd2lsbAorICAgICAgICAgICAgICAgIC8vIHNwaWxsIGFsbCBhcmd1bWVu
dHMgdG8gdGhlIHN0YWNrLCB3ZSBlbnN1cmUgdGhhdCBhIHN0YWNrIGNoZWNrIGhlcmUgY292ZXJz
IHRoZQorICAgICAgICAgICAgICAgIC8vIHN0YWNrIHRoYXQgc3VjaCBhIHN0dWIgd291bGQgdXNl
LgorICAgICAgICAgICAgICAgIChDaGVja2VkPHVpbnQzMl90PihtX21heE51bUpTQ2FsbEFyZ3Vt
ZW50cykgKiBzaXplb2YoUmVnaXN0ZXIpICsganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5oZWFkZXJT
aXplSW5CeXRlcygpKS51bnNhZmVHZXQoKQorICAgICAgICAgICAgKSk7CisgICAgICAgICAgICBj
b25zdCBpbnQzMl90IGNoZWNrU2l6ZSA9IG1fbWFrZXNDYWxscyA/ICh3YXNtRnJhbWVTaXplICsg
ZXh0cmFGcmFtZVNpemUpLnVuc2FmZUdldCgpIDogd2FzbUZyYW1lU2l6ZS51bnNhZmVHZXQoKTsK
KyAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisgICAgICAgICAg
ICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXNDYWxscyB8fCB3YXNtRnJhbWVTaXpl
ID49IG1pbmltdW1QYXJlbnRDaGVja1NpemUgfHwgbmVlZFVuZGVyZmxvd0NoZWNrOworCisgICAg
ICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3QgZG8gc3RhY2sgY2hl
Y2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCisgICAgICAgICAgICAvLyBjZXJ0YWlu
IGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGNo
ZWNrLgorICAgICAgICAgICAgaWYgKG5lZWRzT3ZlcmZsb3dDaGVjaykgeworICAgICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigp
LnByb2xvZ3VlU2NyYXRjaCgwKTsKKworICAgICAgICAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VG
YXN0VExTKCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5j
ZShjb250ZXh0SW5zdGFuY2UpOworCisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBv
dmVyZmxvdzsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobmVlZFVuZGVyZmxvd0NoZWNr
KSkKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBl
cnM6OkJlbG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7CisgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93LCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3Rh
Y2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5jZVZhbHVlICYmIENv
bnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGNo
ZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwgbmVlZHMgdG8gYmUg
Y29ycmVjdC4KKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJ
ZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0pOworCisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50cnlwb2ludCgwLCBX
VEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRM
UygpKSB7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGc2NCgpOworICAgICAgICAvLyBGSVhN
RTogV291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRoaXMgaWYgd2UgdXNlIGluc3RhbmNlIHZhbHVl
LgorICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNvbnRleHRJbnN0YW5jZSksIG1faW5zdGFuY2VW
YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IHsgVG1wKGNvbnRl
eHRJbnN0YW5jZSksIFR5cGU6Okk2NCB9OworCisgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkp
OworICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewor
ICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgIG1fbG9j
YWxzW2ldID0gdG1wRm9yVHlwZSh0eXBlKTsKKyAgICB9CisKKyAgICB3YXNtQ2FsbGluZ0NvbnZl
bnRpb25BaXIoKS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZSwgWyZdIChjb25zdCBBcmcmIGFyZywg
dW5zaWduZWQgaSkgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewor
ICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIGFyZywg
bV9sb2NhbHNbaV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6STY0
OgorICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGFyZywgbV9sb2NhbHNbaV0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgYXBwZW5kKE1v
dmVGbG9hdCwgYXJnLCBtX2xvY2Fsc1tpXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgYXJnLCBtX2xv
Y2Fsc1tpXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9KTsKKwor
ICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRyeURlY3JlbWVudCgp
LCBCMzo6T3JpZ2luKCkpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNz
ZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVHlwZWRUbXAgaW5zdGFu
Y2UsIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNl
KGJsb2NrLCBpbnN0YW5jZSk7CisKKyAgICBpZiAocmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgPT0g
UmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgeworICAgICAgICAvLyBUaGUgSW5zdGFuY2Ug
Y2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUgaXRzIGNhbm9uaWNh
bCBsb2NhdGlvbiBpcy4KKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3Rh
dGljX2Nhc3Q8SW5zdGFuY2UqPihudWxscHRyKS0+Y2FjaGVkU3RhY2tMaW1pdCgpKSkgPT0gc2l6
ZW9mKHVpbnQ2NF90KSwgIiIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxp
ZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSwg
QjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZv
cm0oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOwor
ICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCBB
cmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZQb2ludGVyVG9BY3R1
YWxTdGFja0xpbWl0KCkpLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCBBcmc6
OmFkZHIodGVtcCksIHRlbXApOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIHRlbXAsIEFy
Zzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGlt
aXQoKSkpOworICAgIH0KKworICAgIGlmICghIW1lbW9yeSkgeworICAgICAgICBjb25zdCBQaW5u
ZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CisgICAgICAgIGNsb2JiZXJzLnNldChwaW5u
ZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgIGZvciAoYXV0byBpbmZvIDogcGlu
bmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZvLnNp
emVSZWdpc3Rlcik7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQo
QjM6OlZvaWQpOworICAgICAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5v
bmUoKTsKKyAgICAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICBlZmZl
Y3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBlZmZlY3RzOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJzKTsK
KworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJlZ3NdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQ
b2ludGVyOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLT5z
aXplUmVnaXN0ZXJzOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsK
KyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xs
b3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVl
bnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRP
ZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3Nb
aV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6
ZVJlZ2lzdGVyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ss
IHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lkIEFpcklSR2Vu
ZXJhdG9yOjplbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEV4Y2VwdGlvblR5
cGUgdHlwZSkKK3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGF1
dG8ganVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBqaXQuYWRkTGlua1Rh
c2soW2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93RXhjZXB0aW9u
RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxC
eXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCArPSBtX2xvY2Fscy5z
aXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NPTVBJTEVfRkFJTF9J
RigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBDaGVja2VkU3RhdGU6
OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMp
LCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGxvY2FscyIpOwor
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0
byBsb2NhbCA9IHRtcEZvclR5cGUodHlwZSk7CisgICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFw
cGVuZChsb2NhbCk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6
OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6IHsKKyAgICAgICAgICAgIGFwcGVuZChYb3I2
NCwgbG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDogeworICAgICAgICAgICAg
YXV0byB0ZW1wID0gZzY0KCk7CisgICAgICAgICAgICAvLyBJRUVFIDc1NCAiMCIgaXMganVzdCBp
bnQzMi82NCB6ZXJvLgorICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCB0ZW1wLCB0ZW1wKTsKKyAg
ICAgICAgICAgIGFwcGVuZCh0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQgOiBNb3Zl
NjRUb0RvdWJsZSwgdGVtcCwgbG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkgLT4gRXhwcmVz
c2lvblR5cGUKK3sKKyAgICByZXR1cm4gYWRkQ29uc3RhbnQobV9jdXJyZW50QmxvY2ssIHR5cGUs
IHZhbHVlKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoQmFzaWNCbG9j
ayogYmxvY2ssIFR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpIC0+IEV4cHJlc3Npb25UeXBlCit7
CisgICAgYXV0byByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICBhcHBl
bmQoYmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKHZhbHVlKSwgcmVzdWx0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6IHsKKyAgICAgICAg
YXV0byB0bXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3ZlLCBBcmc6OmJpZ0lt
bSh2YWx1ZSksIHRtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgdHlwZSA9PSBUeXBlOjpGMzIg
PyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9Eb3VibGUsIHRtcCwgcmVzdWx0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2Fscy5zaXplKCkgPT0gc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7IC8vIFdlIGhhbmRsZSBhcmd1bWVudHMgaW4gdGhlIHBy
b2xvZ3VlCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0TG9j
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdLnRtcCgpKTsKKyAgICByZXN1bHQgPSB0
bXBGb3JUeXBlKG1fbG9jYWxzW2luZGV4XS50eXBlKCkpOworICAgIGFwcGVuZChtb3ZlT3BGb3JW
YWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnR5cGUoKSksIG1fbG9jYWxzW2luZGV4XS50bXAoKSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRV
bnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVl
KiB1bnJlYWNoYWJsZSA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgIHVucmVhY2hhYmxl
LT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9u
KGppdCwgRXhjZXB0aW9uVHlwZTo6VW5yZWFjaGFibGUpOworICAgIH0pOworICAgIHVucmVhY2hh
YmxlLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBlbWl0UGF0Y2hwb2ludCh1bnJlYWNo
YWJsZSwgVG1wKCkpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkodm9pZCos
IEluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5z
dGFuY2UsIGludDMyX3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBpbnN0YW5jZS0+c3Rv
cmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgICAgICBpZiAoZGVsdGEgPCAwKQorICAg
ICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVt
b3J5KCktPmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICghZ3Jvd24pIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBNZW1v
cnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAgICBjYXNlIE1lbW9y
eTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAgICAgIGNhc2UgTWVt
b3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAgICAgICAgICAgY2Fz
ZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdyb3duLnZhbHVlKCkucGFn
ZUNvdW50KCk7CisgICAgfTsKKworICAgIHJlc3VsdCA9IGczMigpOworICAgIGVtaXRDQ2FsbChn
cm93TWVtb3J5LCByZXN1bHQsIFR5cGVkVG1wIHsgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKSwgVHlwZTo6STY0IH0sIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOworICAgIHJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpObywgbV9pbmZv
Lm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRyKS0+c2l6ZSgpKSkgPT0g
c2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOworCisgICAg
YXV0byB0ZW1wMSA9IGc2NCgpOworICAgIGF1dG8gdGVtcDIgPSBnNjQoKTsKKworICAgIFJFTEVB
U0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGlu
c3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgdGVt
cDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7CisgICAgc3RhdGlj
X2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMg
bXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOworICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmltbSgxNiksIHRlbXAyKTsKKyAgICBhZGRTaGlmdChUeXBlOjpJMzIsIFVy
c2hpZnQ2NCwgdGVtcDEsIHRlbXAyLCByZXN1bHQpOworICAgIGFwcGVuZChNb3ZlMzIsIHJlc3Vs
dCwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0udG1wKCkpOworICAgIGFwcGVu
ZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnR5cGUoKSksIHZhbHVlLCBtX2xv
Y2Fsc1tpbmRleF0udG1wKCkpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4
XS50eXBlOworCisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAgIGF1dG8gdGVt
cCA9IGc2NCgpOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5z
dGFuY2U6Om9mZnNldE9mR2xvYmFscygpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkp
LCB0ZW1wKTsKKworICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXgg
KiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0
LCBCMzo6d2lkdGhGb3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3Zl
T3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpLCByZXN1bHQpOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIHRlbXAyID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCB0ZW1wMik7CisgICAgICAgIGFwcGVuZChBZGQ2NCwg
dGVtcDIsIHRlbXAsIHRlbXApOworICAgICAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKHR5
cGUpLCBBcmc6OmFkZHIodGVtcCksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvIHRlbXAgPSBnNjQo
KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpv
ZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjph
ZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpKSwgdGVtcCk7
CisKKyAgICBUeXBlIHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKworICAgIGlu
dDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIp
KTsKKyAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBl
KHRvQjNUeXBlKHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlw
ZSksIHZhbHVlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxzZSB7CisgICAgICAg
IGF1dG8gdGVtcDIgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9m
ZnNldCksIHRlbXAyKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwgdGVtcCwgdGVtcCk7
CisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIHZhbHVlLCBBcmc6OmFk
ZHIodGVtcCkpOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2lubGluZSBBaXJJUkdl
bmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBh
cmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMy
X3Qgc2l6ZU9mT3BlcmF0aW9uKQoreworICAgIEFTU0VSVChtX21lbW9yeUJhc2VHUFIpOworCisg
ICAgYXV0byByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBwb2ludGVyLCByZXN1
bHQpOworCisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nOiB7CisgICAgICAgIC8vIFdlJ3JlIG5vdCB1c2luZyBzaWduYWwgaGFuZGxpbmcg
YXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9yZSBjaGVjayB0aGF0IG5vIG1lbW9yeSBhY2Nlc3MgZXhj
ZWVkcyB0aGUgY3VycmVudCBtZW1vcnkgc2l6ZS4KKyAgICAgICAgQVNTRVJUKG1fbWVtb3J5U2l6
ZUdQUik7CisgICAgICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZzZXQgPiBvZmZzZXQp
OworICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YmlnSW1tKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzaXplT2ZPcGVyYXRpb24pICsgb2Zmc2V0IC0g
MSksIHRlbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIHJlc3VsdCwgdGVtcCk7CisKKyAgICAg
ICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2g2NCwgbnVs
bHB0ciwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCB0ZW1wLCBU
bXAobV9tZW1vcnlTaXplR1BSKSk7CisgICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9y
eUFjY2Vzcyk7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IE1lbW9yeU1vZGU6OlNpZ25hbGluZzogeworICAgICAgICAvLyBXZSd2ZSB2aXJ0dWFsbHkgbWFw
cGVkIDRHaUIrcmVkem9uZSBmb3IgdGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVzZXItYWxsb2NhdGVk
IHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29udGlndW91c2x5IGluIHJhbmdlIFswLCBjdXJyZW50
XSwKKyAgICAgICAgLy8gYW5kIGV2ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVkIFBST1RfTk9ORS4g
V2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBleHBsaWNpdCBib3VuZHMgY2hlY2sgaW4gdGhl
IDRHaUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3NlbWJseSByZWdpc3RlcgorICAgICAgICAvLyBtZW1v
cnkgYWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93ZXZlciBXZWJBc3NlbWJseSByZWdpc3RlciArIG9m
ZnNldCBhY2Nlc3NlcyBwZXJmb3JtIHRoZSBhZGRpdGlvbiBpbiA2NC1iaXQgd2hpY2ggY2FuIHB1
c2ggYW4gYWNjZXNzIGFib3ZlCisgICAgICAgIC8vIHRoZSAzMi1iaXQgbGltaXQgKHRoZSBvZmZz
ZXQgaXMgdW5zaWduZWQgMzItYml0KS4gVGhlIHJlZHpvbmUgd2lsbCBjYXRjaCBtb3N0IHNtYWxs
IG9mZnNldHMsIGFuZCB3ZSdsbCBleHBsaWNpdGx5IGJvdW5kcyBjaGVjayBhbnkKKyAgICAgICAg
Ly8gcmVnaXN0ZXIgKyBsYXJnZSBvZmZzZXQgYWNjZXNzLiBXZSBkb24ndCB0aGluayB0aGlzIHdp
bGwgYmUgZ2VuZXJhdGVkIGZyZXF1ZW50bHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNv
dWxkIGNoZWNrIHRoYXQgcmVnaXN0ZXIgKyBsYXJnZSBvZmZzZXQgZG9lc24ndCBleGNlZWQgNEdp
QityZWR6b25lIHNpbmNlIHRoYXQncyB0ZWNobmljYWxseSB0aGUgbGltaXQgd2UgbmVlZCB0byBh
dm9pZCBvdmVyZmxvd2luZyB0aGUKKyAgICAgICAgLy8gUFJPVF9OT05FIHJlZ2lvbiwgYnV0IGl0
J3MgYmV0dGVyIGlmIHdlIHVzZSBhIHNtYWxsZXIgaW1tZWRpYXRlIGJlY2F1c2UgaXQgY2FuIGNv
ZGVnZW5zIGJldHRlci4gV2Uga25vdyB0aGF0IGFueXRoaW5nIGVxdWFsIHRvIG9yIGdyZWF0ZXIK
KyAgICAgICAgLy8gdGhhbiB0aGUgZGVjbGFyZWQgJ21heGltdW0nIHdpbGwgdHJhcCwgc28gd2Ug
Y2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG51bWJlci4gSWYgdGhlcmUgd2FzIG5vIGRlY2xhcmVk
ICdtYXhpbXVtJyB0aGVuIHdlIHN0aWxsIGtub3cgdGhhdAorICAgICAgICAvLyBhbnkgYWNjZXNz
IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA0R2lCIHdpbGwgdHJhcCwgbm8gbmVlZCB0byBhZGQg
dGhlIHJlZHpvbmUuCisgICAgICAgIGlmIChvZmZzZXQgPj0gTWVtb3J5OjpmYXN0TWFwcGVkUmVk
em9uZUJ5dGVzKCkpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG1heGltdW0gPSBtX2luZm8ubWVt
b3J5Lm1heGltdW0oKSA/IG1faW5mby5tZW1vcnkubWF4aW11bSgpLmJ5dGVzKCkgOiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgICAgICBhdXRvIHRlbXAgPSBn
NjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShzdGF0aWNfY2FzdDx1
aW50NjRfdD4oc2l6ZU9mT3BlcmF0aW9uKSArIG9mZnNldCAtIDEpLCB0ZW1wKTsKKyAgICAgICAg
ICAgIGFwcGVuZChBZGQ2NCwgcmVzdWx0LCB0ZW1wKTsKKyAgICAgICAgICAgIGF1dG8gc2l6ZU1h
eCA9IGFkZENvbnN0YW50KFR5cGU6Okk2NCwgbWF4aW11bSk7CisKKyAgICAgICAgICAgIGVtaXRD
aGVjayhbJl0geworICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDY0LCBudWxscHRy
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIHRlbXAsIHNpemVN
YXgpOworICAgICAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQorCisgICAgYXBwZW5kKEFkZDY0LCBUbXAobV9tZW1vcnlCYXNlR1BSKSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRP
cFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAgICAg
ICByZXR1cm4gMTsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6CisgICAgY2FzZSBM
b2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToK
KyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgIHJldHVybiAyOworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQz
MlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgIGNhc2UgTG9hZE9wVHlw
ZTo6RjMyTG9hZDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRM
b2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgcmV0dXJuIDg7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBUeXBl
ZFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIHVpbnQzMl90IG9mZnNldCA9
IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUeXBlZFRt
cCBpbW1UbXA7CisgICAgVHlwZWRUbXAgbmV3UHRyOworICAgIFR5cGVkVG1wIHJlc3VsdDsKKwor
ICAgIGF1dG8gbG9hZEFyZyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRy
Rm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZkxvYWRPcChvcCkpKSkKKyAgICAg
ICAgICAgIHJldHVybiBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1w
ID0gZzY0KCk7CisgICAgICAgIG5ld1B0ciA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0ob2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1U
bXAsIHBvaW50ZXIsIG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsK
KyAgICB9OworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDhTOiB7CisgICAgICAgIHJlc3VsdCA9IGczMigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwo
TG9hZDhTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOiB7CisgICAgICAgIHJl
c3VsdCA9IGc2NCgpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTG9hZDhTaWduZWRFeHRlbmRU
bzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0
ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExv
YWRPcFR5cGU6OkkzMkxvYWQ4VTogeworICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAgICAg
YXBwZW5kRWZmZWN0ZnVsKExvYWQ4LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOiB7CisgICAgICAgIHJl
c3VsdCA9IGc2NCgpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTG9hZDgsIGxvYWRBcmcoKSwg
cmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
MzJMb2FkMTZTOiB7CisgICAgICAgIHJlc3VsdCA9IGczMigpOworICAgICAgICBhcHBlbmRFZmZl
Y3RmdWwoTG9hZDE2U2lnbmVkRXh0ZW5kVG8zMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTZTaWdu
ZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0
ZW5kMzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6IHsKKyAgICAgICAgcmVzdWx0ID0gZzMyKCk7
CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTYsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOiB7
CisgICAgICAgIHJlc3VsdCA9IGc2NCgpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTG9hZDE2
LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgICAgIGFw
cGVuZEVmZmVjdGZ1bChNb3ZlMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6IHsKKyAgICAgICAgcmVzdWx0ID0g
ZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChNb3ZlMzIsIGxvYWRBcmcoKSwgcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2Fk
MzJTOiB7CisgICAgICAgIHJlc3VsdCA9IGc2NCgpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwo
TW92ZTMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0ZW5kMzJU
b1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAg
IGFwcGVuZEVmZmVjdGZ1bChNb3ZlLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDogeworICAgICAgICByZXN1
bHQgPSBmMzIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmVGbG9hdCwgbG9hZEFyZygp
LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6
OkY2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVj
dGZ1bChNb3ZlRG91YmxlLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
Ojpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFT
U0VSVChwb2ludGVyLnRtcCgpLmlzR1AoKSk7CisKKyAgICBpZiAoVU5MSUtFTFkoc3VtT3ZlcmZs
b3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpKSkgeworICAgICAgICAvLyBG
SVhNRTogRXZlbiB0aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5v
dCBhIHZhbGlkYXRpb24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8v
IGFzIGEgcnVudGltZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBhdXRvKiBw
YXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBwYXRjaC0+c2V0R2VuZXJh
dG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworICAg
ICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCkpOworCisgICAgICAgIC8vIFdlIHdvbid0
IHJlYWNoIGhlcmUsIHNvIHdlIGp1c3QgcGljayBhIHJhbmRvbSByZWcuCisgICAgICAgIHN3aXRj
aCAob3ApIHsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CisgICAgICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJM
b2FkOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6CisgICAgICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAgICAgICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAg
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQ6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGc2NCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9h
ZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGYzMigpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgICAg
IHJlc3VsdCA9IGY2NCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgcmVzdWx0ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBv
aW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BU
eXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJT
dG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgICAgICByZXR1cm4g
MTsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2OgorICAgIGNhc2UgU3RvcmVPcFR5
cGU6Okk2NFN0b3JlMTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgU3RvcmVPcFR5cGU6
OkkzMlN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgU3RvcmVP
cFR5cGU6Okk2NFN0b3JlOgorICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgorICAgICAg
ICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworCitpbmxpbmUgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUg
b3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJf
dCB1b2Zmc2V0KQoreworICAgIHVpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZz
ZXQocG9pbnRlciwgdW9mZnNldCk7CisKKyAgICBUeXBlZFRtcCBpbW1UbXA7CisgICAgVHlwZWRU
bXAgbmV3UHRyOworCisgICAgYXV0byBzdG9yZUFyZyA9IFsmXSAoKSB7CisgICAgICAgIGlmIChB
cmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZlN0b3Jl
T3Aob3ApKSkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjphZGRyKHBvaW50ZXIsIG9mZnNldCk7
CisgICAgICAgIGltbVRtcCA9IGc2NCgpOworICAgICAgICBuZXdQdHIgPSBnNjQoKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGltbVRtcCk7CisgICAgICAgIGFw
cGVuZChBZGQ2NCwgaW1tVG1wLCBwb2ludGVyLCBuZXdQdHIpOworICAgICAgICByZXR1cm4gQXJn
OjphZGRyKG5ld1B0cik7CisgICAgfTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0
b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4Ogor
ICAgICAgICBhcHBlbmQoU3RvcmU4LCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVy
bjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9w
VHlwZTo6STMyU3RvcmUxNjoKKyAgICAgICAgYXBwZW5kKFN0b3JlMTYsIHZhbHVlLCBzdG9yZUFy
ZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUz
MjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUz
MiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3Jl
T3BUeXBlOjpJNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUsIHZhbHVlLCBzdG9yZUFyZygp
KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3RvcmU6Cisg
ICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIGFwcGVuZChN
b3ZlRG91YmxlLCB2YWx1ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCithdXRvIEFpcklSR2VuZXJh
dG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVz
c2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IEFTU0VSVChwb2ludGVyLnRtcCgpLmlzR1AoKSk7CisKKyAgICBpZiAoVU5MSUtFTFkoc3VtT3Zl
cmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZlN0b3JlT3Aob3ApKSkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkgb3V0IG9mIGJvdW5kcywgaXQn
cyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBpdAorICAgICAg
ICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0aGlzIG1heSBjaGFuZ2U6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MzUKKyAgICAgICAgYXV0
byogdGhyb3dFeGNlcHRpb24gPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgdGhy
b3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nl
c3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQodGhyb3dFeGNlcHRpb24s
IFRtcCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3JlT3Aob3AsIGVtaXRDaGVja0Fu
ZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpLCB2YWx1
ZSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4cHJlc3Npb25UeXBlIG5vblpl
cm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobm9uWmVyby50eXBlKCkgPT0gemVyby50eXBlKCkpOwor
ICAgIHJlc3VsdCA9IHRtcEZvclR5cGUobm9uWmVyby50eXBlKCkpOworICAgIGFwcGVuZChtb3Zl
T3BGb3JWYWx1ZVR5cGUobm9uWmVyby50eXBlKCkpLCBub25aZXJvLCByZXN1bHQpOworCisgICAg
QmFzaWNCbG9jayogaXNaZXJvID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
Y29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQoQnJhbmNoVGVz
dDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjb25kaXRpb24sIGNvbmRp
dGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNaZXJvLCBjb250aW51
YXRpb24pOworCisgICAgYXBwZW5kKGlzWmVybywgbW92ZU9wRm9yVmFsdWVUeXBlKHplcm8udHlw
ZSgpKSwgemVybywgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNaZXJvLCBKdW1wKTsKKyAgICBpc1pl
cm8tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0g
Y29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZW1pdFRpZXJVcENoZWNrKHVpbnQzMl90IGRlY3JlbWVudENvdW50LCBCMzo6T3JpZ2luIG9y
aWdpbikKK3sKKyAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKKworICAgIGlmICghbV90aWVyVXAp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY291bnRkb3duUHRyID0gZzY0KCk7CisgICAg
YXV0byBvbGRDb3VudGRvd24gPSBnNjQoKTsKKyAgICBhdXRvIG5ld0NvdW50ZG93biA9IGc2NCgp
OworCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0
X3Q+KG1fdGllclVwKSksIGNvdW50ZG93blB0cik7CisgICAgYXBwZW5kKE1vdmUzMiwgQXJnOjph
ZGRyKGNvdW50ZG93blB0ciksIG9sZENvdW50ZG93bik7CisKKyAgICBSRUxFQVNFX0FTU0VSVChB
cmc6OmlzVmFsaWRJbW1Gb3JtKGRlY3JlbWVudENvdW50KSk7CisgICAgYXBwZW5kKE1vdmUzMiwg
b2xkQ291bnRkb3duLCBuZXdDb3VudGRvd24pOworICAgIGFwcGVuZChTdWIzMiwgQXJnOjppbW0o
ZGVjcmVtZW50Q291bnQpLCBuZXdDb3VudGRvd24pOworICAgIGFwcGVuZChNb3ZlMzIsIG5ld0Nv
dW50ZG93biwgQXJnOjphZGRyKGNvdW50ZG93blB0cikpOworCisgICAgYXV0byogcGF0Y2ggPSBh
ZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVm
ZmVjdHM6Om5vbmUoKTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7
CisgICAgZWZmZWN0cy53cml0ZXMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaC0+
ZWZmZWN0cyA9IGVmZmVjdHM7CisKKyAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0aWVyVXAgPSBqaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0aWVyVXBSZXN1bWUgPSBqaXQubGFiZWwoKTsK
KworICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewor
ICAgICAgICAgICAgdGllclVwLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGV4dHJhUGFkZGluZ0J5dGVzID0gMDsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ2lz
dGVyc1RvU3BpbGwgPSB7IH07CisgICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsLmFkZChHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5
dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwg
ZXh0cmFQYWRkaW5nQnl0ZXMpOworCisgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG1fZnVuY3Rpb25JbmRleCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7
CisKKyAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVy
c0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBu
dW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGlu
Z0J5dGVzKTsKKyAgICAgICAgICAgIGppdC5qdW1wKHRpZXJVcFJlc3VtZSk7CisKKyAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPE5vUHRyVGFnPihjYWxsKSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0cmlnZ2VyT01HVGllclVwVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSkpOworCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fSk7CisKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCksIG5ld0NvdW50ZG93biwgb2xk
Q291bnRkb3duKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJh
dG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUu
YWRkQmxvY2soKTsKKworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0
U3VjY2Vzc29ycyhib2R5KTsKKworICAgIG1fY3VycmVudEJsb2NrID0gYm9keTsKKyAgICBlbWl0
VGllclVwQ2hlY2soVGllclVwQ291bnQ6Omxvb3BEZWNyZW1lbnQoKSwgb3JpZ2luKCkpOworCisg
ICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2ln
bmF0dXJlKSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOworfQorCitBaXJJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKFR5cGUg
c2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YShCMzo6T3JpZ2luKCksIHNpZ25h
dHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OlRvcExldmVsLCBtX2NvZGUu
YWRkQmxvY2soKSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVy
YXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRh
KG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpC
bG9jaywgbV9jb2RlLmFkZEJsb2NrKCkpOworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJ
ZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgIAorICAgIC8vIFdhc20gYm9vbHMgYXJlIGkzMi4KKyAgICBhcHBlbmQoQnJhbmNoVGVzdDMy
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRp
dGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFrZW4sIG5vdFRha2Vu
KTsKKworICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47CisgICAgcmVzdWx0ID0gQ29udHJvbERh
dGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6
OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5pZnlWYWx1
ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7CisgICAgYXBwZW5kKEp1bXAp
OworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRhdGEuY29udGludWF0aW9uKTsK
KyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpOwor
ICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5zcGVjaWFsOworICAgIGRhdGEuY29udmVydElmVG9C
bG9jaygpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJl
dHVybihjb25zdCBDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVy
blZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChyZXR1cm5WYWx1ZXMuc2l6
ZSgpIDw9IDEpOworICAgIGlmIChyZXR1cm5WYWx1ZXMuc2l6ZSgpKSB7CisgICAgICAgIFRtcCBy
ZXR1cm5WYWx1ZUdQUiA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIFRt
cCByZXR1cm5WYWx1ZUZQUiA9IFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAg
IHN3aXRjaCAoZGF0YS5zaWduYXR1cmUoKSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAg
ICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICAgICAgYXBwZW5kKFJldDMyLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92
ZSwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBhcHBlbmQo
UmV0NjQsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6OkYzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHJldHVyblZhbHVlc1sw
XSwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldEZsb2F0LCByZXR1cm5W
YWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6Cisg
ICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1
ZUZQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhcHBl
bmQoUmV0Vm9pZCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworLy8gTk9URTogQWxsIGJyYW5jaGVz
IGluIFdhc20gYXJlIG9uIDMyLWJpdCBpbnRzCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEJy
YW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdW5p
ZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJlc3VsdEZvckJyYW5jaCgpKTsK
KworICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsK
KyAgICBpZiAoY29uZGl0aW9uKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJl
c0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRpb24sIGNvbmRpdGlvbik7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCwgY29udGludWF0aW9u
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXBwZW5kKEp1bXApOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyh0YXJnZXQpOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3Rv
cjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldCwgY29u
c3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCB0YXJnZXRzW2ldLT5yZXN1bHRG
b3JCcmFuY2goKSk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBk
ZWZhdWx0VGFyZ2V0LnJlc3VsdEZvckJyYW5jaCgpKTsKKworICAgIC8vIEZJWE1FOiBFbWl0IGVp
dGhlciBhIGp1bXAgdGFibGUgb3IgYSBiaW5hcnkgc3dpdGNoIGhlcmUuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA1MworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJhc2ljQmxvY2sq
IHRhcmdldCA9IHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJhbmNoKCk7CisgICAgICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBhdXRv
IGNvbnN0YW50ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShpKSwg
Y29uc3RhbnQpOworICAgICAgICBhcHBlbmQoQnJhbmNoMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwpLCBjb25zdGFudCwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0LCBjb250aW51YXRpb24pOworCisgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKworICAgIGFwcGVuZChKdW1wKTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkZWZhdWx0VGFyZ2V0LnRhcmdldEJs
b2NrRm9yQnJhbmNoKCkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBkYXRhID0g
ZW50cnkuY29udHJvbERhdGE7CisKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9u
U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworCisgICAgcmV0dXJuIGFkZEVu
ZFRvVW5yZWFjaGFibGUoZW50cnkpOworfQorCisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVu
ZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CisgICAgbV9jdXJyZW50
QmxvY2sgPSBkYXRhLmNvbnRpbnVhdGlvbjsKKworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9j
a1R5cGU6OklmKSB7CisgICAgICAgIGFwcGVuZChkYXRhLnNwZWNpYWwsIEp1bXApOworICAgICAg
ICBkYXRhLnNwZWNpYWwtPnNldFN1Y2Nlc3NvcnMobV9jdXJyZW50QmxvY2spOworICAgIH0KKwor
ICAgIGZvciAoY29uc3QgYXV0byYgcmVzdWx0IDogZGF0YS5yZXN1bHQpCisgICAgICAgIGVudHJ5
LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworCisgICAgLy8gVG9wTGV2
ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gQmxvY2tU
eXBlOjpUb3BMZXZlbCkKKyAgICAgICAgcmV0dXJuIGFkZFJldHVybihkYXRhLCBlbnRyeS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjayk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsK
KworICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgaWYg
KHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCkKKyAgICAgICAgcmVzdWx0ID0gdG1wRm9yVHlwZShy
ZXR1cm5UeXBlKTsKKworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKKworICAgIGlm
IChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlv
bkluZGV4KSkgeworICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1f
bWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkp
KTsKKworICAgICAgICBhdXRvIGN1cnJlbnRJbnN0YW5jZSA9IGc2NCgpOworICAgICAgICBhcHBl
bmQoTW92ZSwgaW5zdGFuY2VWYWx1ZSgpLCBjdXJyZW50SW5zdGFuY2UpOworCisgICAgICAgIGF1
dG8gdGFyZ2V0SW5zdGFuY2UgPSBnNjQoKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGhhdmUgYmV0dGVyIGlzZWwgaGVyZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5Mzk5OQorICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0oSW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVuY3Rpb25JbmRleCkpLCB0YXJn
ZXRJbnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCB0YXJn
ZXRJbnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGFyZ2V0SW5zdGFu
Y2UpLCB0YXJnZXRJbnN0YW5jZSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogaXNXYXNtQmxvY2sg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogaXNFbWJlZGRlckJsb2Nr
ID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9
IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0NjQsIEFyZzo6
cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRhcmdldEluc3RhbmNlLCB0YXJnZXRJ
bnN0YW5jZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzV2FzbUJs
b2NrLCBpc0VtYmVkZGVyQmxvY2spOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHBh
dGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3
ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICAgIC8vIFdlIHBlc3Np
bWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBp
cyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhh
dmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgICAg
ICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgICAgICAgICB3YXNt
Q2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRj
aHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVw
KSB7CisgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVu
ZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCks
IGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgZW1pdFBhdGNocG9pbnQoaXNXYXNtQmxvY2ssIHBhdGNocG9pbnQsIHJl
c3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICAgICAgICAgIGFwcGVuZChpc1dhc21CbG9j
aywgSnVtcCk7CisgICAgICAgICAgICBpc1dhc21CbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBqdW1wRGVz
dGluYXRpb24gPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIE1v
dmUsIEFyZzo6YmlnSW1tKEluc3RhbmNlOjpvZmZzZXRPZldhc21Ub0VtYmVkZGVyU3R1YihmdW5j
dGlvbkluZGV4KSksIGp1bXBEZXN0aW5hdGlvbik7CisgICAgICAgICAgICBhcHBlbmQoaXNFbWJl
ZGRlckJsb2NrLCBBZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCBqdW1wRGVzdGluYXRpb24pOworICAg
ICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgTW92ZSwgQXJnOjphZGRyKGp1bXBEZXN0
aW5hdGlvbiksIGp1bXBEZXN0aW5hdGlvbik7CisKKyAgICAgICAgICAgIGF1dG8qIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUpKTsKKyAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdo
dCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGlj
YWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3Vu
ZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8g
ZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQor
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgICAgICAgICAg
VmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAgICAgICAgICBwYXRjaEFyZ3Mu
YXBwZW5kKGp1bXBEZXN0aW5hdGlvbik7CisKKyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIHRvVG1w
VmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAg
ICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1cm5UeXBlXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlw
ZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgIGVtaXRQYXRjaHBvaW50KGlzRW1iZWRkZXJCbG9jaywgcGF0Y2hw
b2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAgICAgYXBwZW5kKGlz
RW1iZWRkZXJCbG9jaywgSnVtcCk7CisgICAgICAgICAgICBpc0VtYmVkZGVyQmxvY2stPnNldFN1
Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gY29udGludWF0aW9uOworICAgICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4g
dG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2Rp
ZmllZCBvdXIgTWVtb3J5LgorICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShS
ZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVtb3J5LCBjdXJyZW50SW5zdGFu
Y2UsIGNvbnRpbnVhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2lu
dCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRt
cD4gcGF0Y2hBcmdzOworICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENh
bGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZd
IChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgICAgICBwYXRjaEFyZ3MuYXBw
ZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQ
YXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5k
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwg
ZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAg
ICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZN
b3ZlKHBhdGNoQXJncykpOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50
YWtlTGFzdCgpOworICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Mu
c2l6ZSgpKTsKKworICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CisgICAgLy8gTm90ZTogY2FsbCBp
bmRpcmVjdCBjYW4gY2FsbCBlaXRoZXIgV2ViQXNzZW1ibHlGdW5jdGlvbiBvciBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi4gQmVjYXVzZQorICAgIC8vIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uIGlzIGxpa2UgY2FsbGluZyBpbnRvIHRoZSBlbWJlZGRlciwgd2UgY29uc2VydmF0aXZlbHkg
YXNzdW1lIGFsbCBjYWxsIGluZGlyZWN0cworICAgIC8vIGNhbiBiZSB0byB0aGUgZW1iZWRkZXIg
Zm9yIG91ciBzdGFjayBjaGVjayBjYWxjdWxhdGlvbi4KKyAgICBtX21heE51bUpTQ2FsbEFyZ3Vt
ZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oYXJncy5zaXplKCkpKTsKKworICAgIGF1dG8gY3VycmVudEluc3RhbmNlID0gZzY0KCk7
CisgICAgYXBwZW5kKE1vdmUsIGluc3RhbmNlVmFsdWUoKSwgY3VycmVudEluc3RhbmNlKTsKKwor
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBnNjQoKTsKKyAgICBF
eHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXIgPSBnNjQoKTsKKyAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoID0gZzY0KCk7CisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJs
ZSgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRB
ZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFibGU6Om9mZnNldE9mSW5z
dGFuY2VzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNW
YWxpZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpLCBCMzo6V2lkdGg2NCkpOworCisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZUYWJsZSgpKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCwgVGFi
bGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyKTsKKyAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoLCBU
YWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSksIGluc3RhbmNlc0J1ZmZlcik7CisgICAgICAgIGFw
cGVuZChNb3ZlMzIsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJs
ZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgpOworICAg
IH0KKworICAgIGFwcGVuZChNb3ZlMzIsIGNhbGxlZUluZGV4LCBjYWxsZWVJbmRleCk7CisKKyAg
ICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHZhbGlkLgorICAgIGVt
aXRDaGVjayhbJl0geworICAgICAgICByZXR1cm4gSW5zdChCcmFuY2gzMiwgbnVsbHB0ciwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwpLCBjYWxsZWVJbmRleCwgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+
ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNDYWxsSW5k
aXJlY3QpOworICAgIH0pOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IGc2NCgp
OworICAgIHsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBn
NjQoKTsKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBz
cGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbShz
aXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpLCBjYWxsZWVTaWduYXR1cmVJbmRl
eCk7CisgICAgICAgIGFwcGVuZChNdWw2NCwgY2FsbGVlSW5kZXgsIGNhbGxlZVNpZ25hdHVyZUlu
ZGV4KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBjYWxs
ZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIAorICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjph
ZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpv
ZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIGNhbGxlZUNvZGUpOyAvLyBQb2ludGVy
IHRvIGNhbGxlZSBjb2RlLgorCisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEFu
ICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQu
CisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1
c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAw
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCisgICAgICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OnNpZ25h
dHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTY0
Iik7CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgZHVtYiB0byBkbyB0d28gY2hlY2tz
IGp1c3QgZm9yIGEgbmljZXIgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgLy8gV2Ugc2hvdWxkIG1v
dmUganVzdCB0byB1c2UgYSBzaW5nbGUgYnJhbmNoIGFuZCB0aGVuIGZpZ3VyZSBvdXQgd2hhdAor
ICAgICAgICAvLyBlcnJvciB0byB1c2UgaW4gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSksIGNhbGxlZVNp
Z25hdHVyZUluZGV4KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIHN0
YXRpY19hc3NlcnQoU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggPT0gMCwgIiIpOworICAgICAgICAg
ICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDY0LCBudWxscHRyLCBBcmc6OnJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6Olplcm8pLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5k
ZXgpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0
aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOworICAgICAgICB9KTsKKwor
ICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gZzY0KCk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgZW1pdENoZWNr
KFsmXSB7CisgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2g2NCwgbnVsbHB0ciwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBl
eHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRo
aXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVl
ZGVkLgorICAgIHsKKyAgICAgICAgYXV0byBuZXdDb250ZXh0SW5zdGFuY2UgPSBnNjQoKTsKKyAg
ICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW5kZXgoaW5zdGFuY2VzQnVmZmVyLCBjYWxsZWVJbmRl
eCwgOCwgMCksIG5ld0NvbnRleHRJbnN0YW5jZSk7CisKKyAgICAgICAgQmFzaWNCbG9jayogZG9D
b250ZXh0U3dpdGNoID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgICAgIGFwcGVuZChCcmFuY2g2
NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIG5ld0NvbnRleHRJbnN0YW5j
ZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3Nv
cnMoY29udGludWF0aW9uLCBkb0NvbnRleHRTd2l0Y2gpOworCisgICAgICAgIGF1dG8qIHBhdGNo
cG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkg
YXNzdW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdpdGggQm91bmRzQ2hlY2tpbmcgbWVtb3J5
LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJ
bnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0
SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdp
c3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgICAg
ICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7Cisg
ICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50
ZXI7CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRl
eHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1l
bW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKG5l
d0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8v
ICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCisg
ICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOworICAg
ICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
cik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZW1pdFBhdGNocG9pbnQoZG9Db250ZXh0U3dpdGNoLCBwYXRjaHBvaW50LCBUbXAoKSwg
bmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOworICAgICAgICBhcHBlbmQoZG9D
b250ZXh0U3dpdGNoLCBKdW1wKTsKKyAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5zZXRTdWNjZXNz
b3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b247CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVDb2RlKSwgY2Fs
bGVlQ29kZSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgp
OworICAgIGlmIChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpCisgICAgICAgIHJlc3VsdCA9IHRt
cEZvclR5cGUocmV0dXJuVHlwZSk7CisKKyAgICBhdXRvKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQo
dG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgIHBhdGNoLT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CisgICAgcGF0Y2gtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgIC8vIFdl
IG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCByZWdpc3RlcnMgc2luY2Ugd2Ug
bWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5
IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hl
Y2tpbmcgc28KKyAgICAvLyBiZWNhdXNlIHRoZSB3YXNtLT53YXNtIHRodW5rIHVuY29uZGl0aW9u
YWxseSBvdmVycmlkZXMgdGhlIHNpemUgcmVnaXN0ZXJzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNtIHN0dWIgYXNzdW1lcyBp
dCBjYW4KKyAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFzIHNjcmF0Y2g6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKKyAgICBwYXRjaC0+
Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZW1pdEFyZ3M7
CisgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUpOworICAgIHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNoLCB0b1RtcFZlY3Rv
cihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgIGVtaXRB
cmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgIH0pOworICAgIHBhdGNoLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0g
Vm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICB9KTsKKworICAgIGVt
aXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgcmVzdWx0LCBXVEZNb3ZlKGVtaXRB
cmdzKSk7CisKKyAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJB
c3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5
LgorICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xp
bWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGN1cnJlbnRJbnN0YW5jZSwgbV9jdXJyZW50QmxvY2sp
OworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29u
c3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUmIHNvdXJjZSkKK3sK
KyAgICBBU1NFUlQoZHN0LnR5cGUoKSA9PSBzb3VyY2UudHlwZSgpKTsKKyAgICBhcHBlbmQobW92
ZU9wRm9yVmFsdWVUeXBlKGRzdC50eXBlKCkpLCBzb3VyY2UsIGRzdCk7Cit9CisKK3ZvaWQgQWly
SVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiBy
ZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1
bHQuc2l6ZSgpIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5z
aXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrW3Jlc3VsdFN0YWNrLnNpemUoKSAtIDEgLSBpXSk7
Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRy
eT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCopCit7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGltcGxl
bWVudCBhIHdheSB0byBnaXZlIEluc3QncyBhbiBvcmlnaW4uCisgICAgcmV0dXJuIEIzOjpPcmln
aW4oKTsKK30KKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9u
Q29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVu
Z3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFr
ZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5l
bWJlZGRlckVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsK
KyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5p
cXVlPENDYWxsSGVscGVycz4oKTsKKworICAgIEIzOjpQcm9jZWR1cmUgcHJvY2VkdXJlOworICAg
IENvZGUmIGNvZGUgPSBwcm9jZWR1cmUuY29kZSgpOworCisgICAgcHJvY2VkdXJlLnNldE9yaWdp
blByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIEIzOjpPcmlnaW4gb3JpZ2luKSB7CisgICAg
ICAgIGlmIChvcmlnaW4uZGF0YSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCJXYXNtOiAiLCBi
aXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2luPihvcmlnaW4pKTsKKyAgICB9KTsKKyAgICAKKyAgICAv
LyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1c2UgZWl0aGVyIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
czo6dXNlZFJlZ2lzdGVycygpIG9yCisgICAgLy8gU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1
bmF2YWlsYWJsZVJlZ2lzdGVycygpLiBJbiBleGNoYW5nZSBmb3IgdGhpcyBjb25jZXNzaW9uLCB3
ZQorICAgIC8vIGRvbid0IHN0cmljdGx5IG5lZWQgdG8gcnVuIEFpcjo6cmVwb3J0VXNlZFJlZ2lz
dGVycygpLCB3aGljaCBzYXZlcyBhIGJpdCBvZiBDUFUgdGltZSBhdAorICAgIC8vIG9wdExldmVs
PTEuCisgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVycyhmYWxzZSk7CisgICAgCisg
ICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9kZSA9PSBDb21waWxhdGlvbk1v
ZGU6OkJCUU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlv
bkxldmVsKCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxl
dmVsKCkpOworCisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJl
LCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBjb21waWxhdGlv
bk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uLCBzaWduYXR1
cmUpOworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0
b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOworICAg
IFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOworCisKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAgICAgICAgIGJsb2NrLT5zdWNj
ZXNzb3JCbG9jayhpKS0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7CisgICAgICAgIEIzOjpB
aXI6OmdlbmVyYXRlKGNvZGUsICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQp
OworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0g
cHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAgICAgIHJlc3VsdC0+ZW50cnlwb2lu
dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExp
c3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgSW50VHlwZT4KK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JN
b2RPckRpdihib29sIGlzU2lnbmVkRGl2LCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9u
VHlwZSByaWdodCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihJbnRUeXBlKSA9PSA0IHx8
IHNpemVvZihJbnRUeXBlKSA9PSA4LCAiIik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAg
ICAgcmV0dXJuIEluc3Qoc2l6ZW9mKEludFR5cGUpID09IDQgPyBCcmFuY2hUZXN0MzIgOiBCcmFu
Y2hUZXN0NjQsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJp
Z2h0LCByaWdodCk7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0
aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6RGl2aXNpb25CeVplcm8pOworICAgIH0pOworCisgICAg
aWYgKGlzU2lnbmVkRGl2KSB7CisgICAgICAgIEFTU0VSVChzdGQ6OmlzX3NpZ25lZDxJbnRUeXBl
Pjo6dmFsdWUpOworICAgICAgICBJbnRUeXBlIG1pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8SW50
VHlwZT46Om1pbigpOworCisgICAgICAgIC8vIEZJWE1FOiBCZXR0ZXIgaXNlbCBmb3IgY29tcGFy
ZSB3aXRoIGltbXMgaGVyZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5Mzk5OQorICAgICAgICBhdXRvIG1pblRtcCA9IHNpemVvZihJbnRUeXBl
KSA9PSA0ID8gZzMyKCkgOiBnNjQoKTsKKyAgICAgICAgYXV0byBuZWdPbmUgPSBzaXplb2YoSW50
VHlwZSkgPT0gNCA/IGczMigpIDogZzY0KCk7CisKKyAgICAgICAgQjM6OkFpcjo6T3Bjb2RlIG9w
ID0gc2l6ZW9mKEludFR5cGUpID09IDQgPyBDb21wYXJlMzIgOiBDb21wYXJlNjQ7CisgICAgICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShzdGF0aWNfY2FzdDx1aW50NjRfdD4obWluKSksIG1p
blRtcCk7CisgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCksIGxlZnQsIG1pblRtcCwgbWluVG1wKTsKKworICAgICAgICBhcHBlbmQoTW92ZSwgQXJn
OjppbW0oLTEpLCBuZWdPbmUpOworICAgICAgICBhcHBlbmQob3AsIEFyZzo6cmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdodCwgbmVnT25lLCBuZWdPbmUpOworCisgICAgICAgIGVt
aXRDaGVjayhbJl0geworICAgICAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBudWxs
cHRyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBtaW5UbXAsIG5lZ09u
ZSk7CisgICAgICAgIH0sCisgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpJbnRlZ2VyT3ZlcmZsb3cpOworICAgICAg
ICB9KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgordm9pZCBBaXJJ
UkdlbmVyYXRvcjo6ZW1pdE1vZE9yRGl2KGJvb2wgaXNEaXYsIEV4cHJlc3Npb25UeXBlIGxocywg
RXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQoreworICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09IDQgfHwgc2l6ZW9mKEludFR5cGUpID09IDgsICIi
KTsKKworICAgIHJlc3VsdCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gZzMyKCkgOiBnNjQoKTsK
KworICAgIGJvb2wgaXNTaWduZWQgPSBzdGQ6OmlzX3NpZ25lZDxJbnRUeXBlPjo6dmFsdWU7CisK
KyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIEIzOjpBaXI6Ok9wY29kZSBkaXY7CisgICAg
ICAgIHN3aXRjaCAoc2l6ZW9mKEludFR5cGUpKSB7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
ICAgIGRpdiA9IGlzU2lnbmVkID8gRGl2MzIgOiBVRGl2MzI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgZGl2ID0gaXNTaWduZWQgPyBEaXY2NCA6IFVE
aXY2NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kKGRp
diwgbGhzLCByaHMsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKCFpc0RpdikgeworICAgICAgICAg
ICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8gTXVsMzIgOiBNdWw2NCwgcmVzdWx0LCBy
aHMsIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBT
dWIzMiA6IFN1YjY0LCBsaHMsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIFRtcCBl
YXgoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIFRtcCBlZHgoWDg2UmVnaXN0ZXJzOjplZHgpOwor
CisgICAgaWYgKGlzU2lnbmVkKSB7CisgICAgICAgIEIzOjpBaXI6Ok9wY29kZSBjb252ZXJ0VG9E
b3VibGVXb3JkOworICAgICAgICBCMzo6QWlyOjpPcGNvZGUgZGl2OworICAgICAgICBzd2l0Y2gg
KHNpemVvZihJbnRUeXBlKSkgeworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBjb252ZXJ0
VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvRG91YmxlV29yZDMyOworICAgICAgICAgICAgZGl2
ID0gWDg2RGl2MzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OgorICAgICAg
ICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRUb1F1YWRXb3JkNjQ7CisgICAg
ICAgICAgICBkaXYgPSBYODZEaXY2NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFdlIGltcGxlbWVudCAicmVzID0gRGl2PENoaWxsPi9Nb2Q8Q2hpbGw+
KG51bSwgZGVuKSIgYXMgZm9sbG93czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIGlmIChk
ZW4gKyAxIDw9X3Vuc2lnbmVkIDEpIHsKKyAgICAgICAgLy8gICAgICAgICBpZiAoIWRlbikgewor
ICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSAwOworICAgICAgICAvLyAgICAgICAgICAgICBn
b3RvIGRvbmU7CisgICAgICAgIC8vICAgICAgICAgfQorICAgICAgICAvLyAgICAgICAgIGlmIChu
dW0gPT0gLTIxNDc0ODM2NDgpIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmVzID0gaXNEaXYg
PyBudW0gOiAwOworICAgICAgICAvLyAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIC8v
ICAgICAgICAgfQorICAgICAgICAvLyAgICAgfQorICAgICAgICAvLyAgICAgcmVzID0gbnVtICgv
IG9yICUpIGRldjsKKyAgICAgICAgLy8gZG9uZToKKworICAgICAgICBCYXNpY0Jsb2NrKiBkZW5J
c0dvb2QgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogZGVuTWF5QmVC
YWQgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogZGVuTm90WmVybyA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKworICAgICAgICBhdXRvIHRlbXAgPSBzaXplb2YoSW50VHlwZSkg
PT0gNCA/IGczMigpIDogZzY0KCk7CisgICAgICAgIGF1dG8gb25lID0gYWRkQ29uc3RhbnQoc2l6
ZW9mKEludFR5cGUpID09IDQgPyBUeXBlOjpJMzIgOiBUeXBlOjpJNjQsIDEpOworCisgICAgICAg
IGFwcGVuZChzaXplb2YoSW50VHlwZSkgPT0gNCA/IEFkZDMyIDogQWRkNjQsIHJocywgb25lLCB0
ZW1wKTsKKyAgICAgICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQnJhbmNoMzIgOiBC
cmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSksIHRlbXAsIG9uZSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRlbklzR29vZCwgZGVuTWF5
QmVCYWQpOworCisgICAgICAgIGFwcGVuZChkZW5NYXlCZUJhZCwgWG9yNjQsIHJlc3VsdCwgcmVz
dWx0KTsKKyAgICAgICAgYXBwZW5kKGRlbk1heUJlQmFkLCBzaXplb2YoSW50VHlwZSkgPT0gNCA/
IEJyYW5jaFRlc3QzMiA6IEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpaZXJvKSwgcmhzLCByaHMpOworICAgICAgICBkZW5NYXlCZUJhZC0+c2V0U3VjY2Vzc29ycyhj
b250aW51YXRpb24sIGRlbk5vdFplcm8pOworCisgICAgICAgIGF1dG8gbWluID0gYWRkQ29uc3Rh
bnQoZGVuTm90WmVybywgc2l6ZW9mKEludFR5cGUpID09IDQgPyBUeXBlOjpJMzIgOiBUeXBlOjpJ
NjQsIHN0ZDo6bnVtZXJpY19saW1pdHM8SW50VHlwZT46Om1pbigpKTsKKyAgICAgICAgaWYgKGlz
RGl2KQorICAgICAgICAgICAgYXBwZW5kKGRlbk5vdFplcm8sIHNpemVvZihJbnRUeXBlKSA9PSA0
ID8gTW92ZTMyIDogTW92ZSwgbWluLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIFJlc3VsdCBpcyB6ZXJvLCBhcyBzZXQgYWJvdmUuLi4KKyAgICAgICAgfQorICAgICAg
ICBhcHBlbmQoZGVuTm90WmVybywgc2l6ZW9mKEludFR5cGUpID09IDQgPyBCcmFuY2gzMiA6IEJy
YW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgbGhzLCBtaW4pOwor
ICAgICAgICBkZW5Ob3RaZXJvLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZGVuSXNHb29k
KTsKKworICAgICAgICBhdXRvIGRpdlJlc3VsdCA9IGlzRGl2ID8gZWF4IDogZWR4OworICAgICAg
ICBhcHBlbmQoZGVuSXNHb29kLCBNb3ZlLCBsaHMsIGVheCk7CisgICAgICAgIGFwcGVuZChkZW5J
c0dvb2QsIGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4KTsKKyAgICAgICAgYXBwZW5kKGRl
bklzR29vZCwgZGl2LCBlYXgsIGVkeCwgcmhzKTsKKyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwg
c2l6ZW9mKEludFR5cGUpID09IDQgPyBNb3ZlMzIgOiBNb3ZlLCBkaXZSZXN1bHQsIHJlc3VsdCk7
CisgICAgICAgIGFwcGVuZChkZW5Jc0dvb2QsIEp1bXApOworICAgICAgICBkZW5Jc0dvb2QtPnNl
dFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNv
bnRpbnVhdGlvbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEIzOjpBaXI6Ok9wY29k
ZSBkaXYgPSBzaXplb2YoSW50VHlwZSkgPT0gNCA/IFg4NlVEaXYzMiA6IFg4NlVEaXY2NDsKKwor
ICAgIFRtcCBkaXZSZXN1bHQgPSBpc0RpdiA/IGVheCA6IGVkeDsKKworICAgIGFwcGVuZChNb3Zl
LCBsaHMsIGVheCk7CisgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVkeCk7CisgICAgYXBwZW5kKGRp
diwgZWF4LCBlZHgsIHJocyk7CisgICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8gTW92
ZTMyIDogTW92ZSwgZGl2UmVzdWx0LCByZXN1bHQpOworI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVz
c2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50MzJfdD4odHJ1ZSwgbGVmdCwgcmlnaHQp
OworICAgIGVtaXRNb2RPckRpdjxpbnQzMl90Pih0cnVlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBl
IHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
ZW1pdENoZWNrc0Zvck1vZE9yRGl2PGludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdodCk7CisgICAg
ZW1pdE1vZE9yRGl2PGludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENo
ZWNrc0Zvck1vZE9yRGl2PHVpbnQzMl90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRN
b2RPckRpdjx1aW50MzJfdD4odHJ1ZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NG
b3JNb2RPckRpdjx1aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JE
aXY8dWludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NERpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1v
ZE9yRGl2PGludDY0X3Q+KHRydWUsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8aW50
NjRfdD4odHJ1ZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1TPihF
eHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjxp
bnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjxpbnQ2NF90Pihm
YWxzZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjREaXZVPihFeHByZXNz
aW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjx1aW50NjRf
dD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8dWludDY0X3Q+KHRydWUs
IGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVtVT4oRXhwcmVzc2lvblR5
cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8dWludDY0X3Q+KGZh
bHNlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVm
dCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zMzIocGFyYW1z
WzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGczMigp
OworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQo
QjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGpp
dC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgfSk7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBnMzIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3JvQXNzZW1ibGVy
OjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uMzIocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyNlbmRpZgorCisgICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50MzJfdCkgPSBbXSAoaW50
MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZhbHVl
KTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisKKyNpZiBDUFUoWDg2XzY0
KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3VudFBvcHVsYXRpb24oKSkgewor
ICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LmNv
dW50UG9wdWxhdGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQ2NF90ICgqcG9w
Y291bnQpKGludDY0X3QpID0gW10gKGludDY0X3QgdmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJu
IF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0
Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7CisgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHBh
dGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgICAg
IGppdC5jb252ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnBy
KCksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50
NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5kaWYKKyAg
ICB9KTsKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50
LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
YXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBpZiAoaXNYODYoKSkKKyAg
ICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisjaWYgQ1BVKFg4Nl82NCkK
KyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1z
WzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNlCisgICAgICAgIGppdC5jb252
ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSk7CisjZW5k
aWYKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRj
aHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWFyZXN0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJ
bnREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAg
IHJlc3VsdCA9IGY2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0SW50RmxvYXQocGFyYW1zWzFd
LmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGYzMigpOwor
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChC
Mzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUo
KTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGpp
dC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkp
OworICAgIH0pOworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNo
cG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRydW5jPihFeHByZXNzaW9uVHlw
ZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBh
dXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVyb0Zsb2F0KHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBm
MzIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRkQ29uc3RhbnQo
VHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworICAgIGF1dG8gbWluID0gYWRk
Q29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisKKyAgICBhdXRv
IHRlbXAxID0gZzMyKCk7CisgICAgYXV0byB0ZW1wMiA9IGczMigpOworICAgIGFwcGVuZChDb21w
YXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChDb21wYXJlRG91Ymxl
LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBhcHBlbmQoT3IzMiwgdGVtcDEs
IHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICByZXR1cm4gSW5zdChCcmFu
Y2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyks
IHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhj
ZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisK
KyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9J
bnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVz
dWx0ID0gZzMyKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcp
OworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRk
Q29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxm
bG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgYXV0byBt
aW4gPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOworCisg
ICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsKKyAgICBhcHBl
bmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxl
c3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChDb21wYXJl
RmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0
ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0
KEJyYW5jaFRlc3QzMiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9
KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9h
dFRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAg
IHJlc3VsdCA9IGczMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvIG1heCA9
IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2Fz
dDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAqIC0yLjApKTsK
KyAgICBhdXRvIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2
NF90PigtMS4wKSk7CisKKyAgICBhdXRvIHRlbXAxID0gZzMyKCk7CisgICAgYXV0byB0ZW1wMiA9
IGczMigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRl
bXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0
ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2so
WyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBudWxscHRyLCBBcmc6OnJl
c0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6
Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFk
ZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVm
ZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFy
YW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBlbWl0UGF0
Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VG
MzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNl
X2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAgICBhdXRvIG1p
biA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNf
Y2FzdDxmbG9hdD4oLTEuMCkpKTsKKworICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRv
IHRlbXAyID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywg
bWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywg
bWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0
Q2hlY2soWyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBudWxscHRyLCBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAg
IH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0byogcGF0Y2hwb2lu
dCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50MzIocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGczMigpOworICAgIGVt
aXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRy
dW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBl
OjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKworICAgIGF1dG8gdGVtcDEgPSBnMzIo
KTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFy
Zzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCks
IGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91Ymxl
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQp
LCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisg
ICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaFRlc3QzMiwgbnVs
bHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAy
KTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBF
eGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBh
dGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDY0KHBhcmFtc1sx
XS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKworICAgIHJlc3VsdCA9IGc2NCgp
OworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25zdGFudChUeXBl
OjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7CisgICAgYXV0byBtaW4gPSBh
ZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLTEuMCkpOworICAg
IAorICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAg
YXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBh
cHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAg
ICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
dGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNU
cnVuYyk7CisgICAgfSk7CisKKyAgICBUeXBlZFRtcCBzaWduQml0Q29uc3RhbnQ7CisgICAgaWYg
KGlzWDg2KCkpIHsKKyAgICAgICAgLy8gU2luY2UgeDg2IGRvZXNuJ3QgaGF2ZSBhbiBpbnN0cnVj
dGlvbiB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50cyB0byB1bnNpZ25lZCBpbnRlZ2Vycywgd2Ug
YXQgbGVhc3QgdHJ5IHRvIGRvIHRoZSBzbWFydCB0aGluZyBpZgorICAgICAgICAvLyB0aGUgbnVt
YmVycyBhcmUgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNp
bmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMg
ZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCisgICAgICAg
IHNpZ25CaXRDb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+
OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworICAgIH0K
KworICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gYXJnczsKKyAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBC
Mzo6RWZmZWN0czo6bm9uZSgpOworICAgIGFyZ3MuYXBwZW5kKGFyZyk7CisgICAgaWYgKGlzWDg2
KCkpIHsKKyAgICAgICAgYXJncy5hcHBlbmQoc2lnbkJpdENvbnN0YW50KTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9CisgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0gSW52YWxpZEZQUlJlZzsK
KyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBwYXJhbXMuZnBT
Y3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNbMl0uZnByKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50NjQocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCksIHNjcmF0Y2gsIGNvbnN0YW50KTsKKyAgICB9KTsKKworICAgIHJl
c3VsdCA9IGc2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBv
aW50LCByZXN1bHQsIFdURk1vdmUoYXJncykpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPihF
eHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBhdXRvIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0
PHVpbnQzMl90Pigtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1pbigpKSkpOworICAgIGF1dG8gbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3
aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDY0X3Q+OjptaW4oKSkpKTsKKworICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRv
IHRlbXAyID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRl
bXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRl
bXAyKTsKKyAgICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhb
Jl0geworICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVz
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRk
UGF0Y2hwb2ludChCMzo6SW50NjQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZm
ZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1z
WzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBlbWl0UGF0Y2hw
b2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nh
c3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIuMCkpKTsKKyAgICBhdXRvIG1pbiA9
IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2Fz
dDxmbG9hdD4oLTEuMCkpKTsKKyAgICAKKyAgICBhdXRvIHRlbXAxID0gZzMyKCk7CisgICAgYXV0
byB0ZW1wMiA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcs
IG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcs
IG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1p
dENoZWNrKFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaFRlc3QzMiwgbnVsbHB0ciwg
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAg
ICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIFR5cGVkVG1wIHNpZ25C
aXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAvLyBTaW5jZSB4ODYgZG9l
c24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRvIGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVu
c2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFzdCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlm
CisgICAgICAgIC8vIHRoZSBudW1iZXJzIHdvdWxkIGJlIHBvc2l0aXZlIGFueXdheSBhcyBhIHNp
Z25lZCBpbnRlZ2VyLiBTaW5jZSB3ZSBjYW5ub3QgbWF0ZXJpYWxpemUgY29uc3RhbnRzIGludG8g
ZnBycyB3ZSBoYXZlIGIzIGRvIGl0CisgICAgICAgIC8vIHNvIHdlIGNhbiBwb29sIHRoZW0gaWYg
bmVlZGVkLgorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGMzIs
IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1h
eCgpKSkpOworICAgIH0KKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIz
OjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7
CisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBhcmdzOworICAgIGFyZ3MuYXBwZW5kKGFyZyk7
CisgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgYXJncy5hcHBlbmQoc2lnbkJpdENvbnN0YW50
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICB9
CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIEZQ
UlJlZyBzY3JhdGNoID0gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgRlBSUmVnIGNvbnN0YW50ID0g
SW52YWxpZEZQUlJlZzsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHNjcmF0
Y2ggPSBwYXJhbXMuZnBTY3JhdGNoKDApOworICAgICAgICAgICAgY29uc3RhbnQgPSBwYXJhbXNb
Ml0uZnByKCk7CisgICAgICAgIH0KKyAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQ2NChw
YXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAg
IH0pOworCisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50
QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShhcmdzKSk7CisKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRTaGlmdChUeXBlIHR5cGUsIEIzOjpB
aXI6Ok9wY29kZSBvcCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJU
KHR5cGUgPT0gVHlwZTo6STY0IHx8IHR5cGUgPT0gVHlwZTo6STMyKTsKKyAgICByZXN1bHQgPSB0
bXBGb3JUeXBlKHR5cGUpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJn
OjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIHZhbHVlLCBzaGlmdCwgcmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgCisjaWYgQ1BVKFg4Nl82NCkK
KyAgICBUbXAgZWN4ID0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICBhcHBlbmQoTW92ZSwg
dmFsdWUsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUsIHNoaWZ0LCBlY3gpOworICAgIGFwcGVu
ZChvcCwgZWN4LCByZXN1bHQpOworI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2VuZGlmCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkSW50ZWdlclN1YihCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxocywgRXhw
cmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgQVNTRVJUKG9wID09IFN1YjMyIHx8IG9wID09IFN1YjY0KTsKKworICAgIHJlc3Vs
dCA9IG9wID09IFN1YjMyID8gZzMyKCkgOiBnNjQoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShv
cCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKG9wLCBs
aHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVChpc1g4NigpKTsKKyAgICAvLyBTdWIgYSwgYgorICAgIC8vIG1lYW5zCisgICAg
Ly8gYiA9IGIgU3ViIGEKKyAgICBhcHBlbmQoTW92ZSwgbGhzLCByZXN1bHQpOworICAgIGFwcGVu
ZChvcCwgcmhzLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMoQjM6OkFpcjo6T3Bjb2RlIG9wLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IEFic0Zsb2F0IHx8IG9wID09IEFic0RvdWJsZSk7CisK
KyAgICByZXN1bHQgPSBvcCA9PSBBYnNGbG9hdCA/IGYzMigpIDogZjY0KCk7CisKKyAgICBpZiAo
aXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgYXBwZW5kKG9w
LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVChpc1g4NigpKTsKKworICAgIGlmIChvcCA9PSBBYnNGbG9hdCkgeworICAgICAg
ICBhdXRvIGNvbnN0YW50ID0gZzMyKCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbShz
dGF0aWNfY2FzdDx1aW50MzJfdD4ofigxdWxsIDw8IDMxKSkpLCBjb25zdGFudCk7CisgICAgICAg
IGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCBjb25zdGFudCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5k
KEFuZEZsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGNv
bnN0YW50ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSh+KDF1bGwg
PDwgNjMpKSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIGNvbnN0
YW50LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoQW5kRG91YmxlLCB2YWx1ZSwgcmVzdWx0KTsK
KyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxv
YXRpbmdQb2ludEJpbk9wKFR5cGUgdHlwZSwgQjM6OkFpcjo6T3Bjb2RlIG9wLCBFeHByZXNzaW9u
VHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVCh0eXBlID09IFR5cGU6OkYzMiB8fCB0eXBlID09
IFR5cGU6OkY2NCk7CisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKworICAgIGlmIChp
c1ZhbGlkRm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAg
YXBwZW5kKG9wLCBsaHMsIHJocywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsKKworICAgIC8vIE9wIGEsIGIKKyAgICAv
LyBtZWFucworICAgIC8vIGIgPSBiIE9wIGEKKyAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBl
KHR5cGUpLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKG9wLCByaHMsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMkNlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQo
Q2VpbEZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJNdWw+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoTXVsMzIs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlN1Yj4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRJbnRlZ2VyU3ViKFN1YjMyLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0TGU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
MzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJEZW1vdGVGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBh
cHBlbmQoQ29udmVydERvdWJsZVRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
Mk1pbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOwor
CisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZ3Jl
YXRlclRoYW5PckVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29u
dGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50Qmxv
Y2ssIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVx
dWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNF
cXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIE9yRmxvYXQsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNl
dFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZUZs
b2F0LCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRmxvYXQsIEFy
Zzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcx
KTsKKyAgICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFu
T3JFcXVhbCk7CisKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBNb3ZlRmxvYXQsIGFy
ZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAg
Z3JlYXRlclRoYW5PckVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBt
X2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChD
b21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMdD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWF4PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90
RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsZXNzVGhhbiA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5h
ZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hGbG9hdCwgQXJn
Ojpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKwor
ICAgIGFwcGVuZChpc0VxdWFsLCBBbmRGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBh
cHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5z
ZXRTdWNjZXNzb3JzKGxlc3NUaGFuLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NU
aGFuLCBNb3ZlRmxvYXQsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1w
KTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TXVsPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChU
eXBlOjpGNjQsIE11bERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRpdj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QmluT3AoVHlwZTo6
RjMyLCBEaXZGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkNsej4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGczMigpOworICAgIGFwcGVuZChDb3VudExlYWRpbmdaZXJvczMyLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGMzJDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIC8vIEZJWE1FOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29kZWdlbiBoZXJlIGZvciB0aGUgaW1t
cyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mzk5OQorICAgIHJlc3VsdCA9IGYzMigpOworICAgIGF1
dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHNpZ24gPSBnMzIoKTsKKyAgICBhdXRvIHZhbHVl
ID0gZzMyKCk7CisKKyAgICAvLyBGSVhNRTogVHJ5IHRvIHVzZSBJbW0gd2hlcmUgcG9zc2libGU6
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mzk5OQor
ICAgIGFwcGVuZChNb3ZlRmxvYXRUbzMyLCBhcmcxLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1vdmUs
IEFyZzo6YmlnSW1tKDB4ODAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQoQW5kMzIsIHRlbXAx
LCBzaWduLCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcDEp
OworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmKSwgdmFsdWUpOworICAg
IGFwcGVuZChBbmQzMiwgdGVtcDEsIHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3IzMiwg
c2lnbiwgdmFsdWUsIHZhbHVlKTsKKyAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdmFsdWUsIHJl
c3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFVJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBmNjQoKTsKKyAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBhcmcw
LCB0ZW1wKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9Eb3VibGUsIHRlbXAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMlJlaW50ZXJwcmV0STMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMy
KCk7CisgICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NEFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgp
OworICAgIGFwcGVuZChBbmQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
TmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRHdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigp
OworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyU3FydD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGFwcGVuZChTcXJ0Rmxv
YXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEdlPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUs
IEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFs
KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RTPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2
NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRFcXo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoVGVzdDY0
LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBhcmcwLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjREaXY+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGU6OkY2NCwgRGl2RG91YmxlLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyQWRkPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZjMyKCk7CisgICAgYXBwZW5kKEFkZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRPcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGc2NCgpOworICAgIGFwcGVuZChPcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJMZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlUz4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVu
ZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFs
KSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TmU+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0Q2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7Cisg
ICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zNjQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMk5lZz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGlmIChpc1ZhbGlkRm9y
bShOZWdhdGVGbG9hdCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKE5lZ2F0
ZUZsb2F0LCBhcmcwLCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnN0YW50
ID0gYWRkQ29uc3RhbnQoVHlwZTo6STMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19j
YXN0PGZsb2F0PigtMC4wKSkpOworICAgICAgICBhdXRvIHRlbXAgPSBnMzIoKTsKKyAgICAgICAg
YXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAsIHRlbXApOworICAgICAgICBhcHBlbmQoWG9yMzIs
IGNvbnN0YW50LCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMlRvRmxvYXQsIHRlbXAsIHJl
c3VsdCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJBbmQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQW5kMzIsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRSb3RyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNo
aWZ0KFR5cGU6Okk2NCwgUm90YXRlUmlnaHQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFicz4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJldHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0RvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigp
OworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcT4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21w
YXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIC8vIEZJWE1FOiBXZSBjYW4gaGF2ZSBiZXR0ZXIgY29kZWdlbiBoZXJlIGZvciB0
aGUgaW1tcyBhbmQgdHdvIG9wZXJhbmQgZm9ybXMgb24geDg2CisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mzk5OQorICAgIHJlc3VsdCA9IGY2NCgpOwor
ICAgIGF1dG8gdGVtcDEgPSBnNjQoKTsKKyAgICBhdXRvIHNpZ24gPSBnNjQoKTsKKyAgICBhdXRv
IHZhbHVlID0gZzY0KCk7CisKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzEsIHRlbXAx
KTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4MDAwMDAwMDAwMDAwMDAwKSwgc2ln
bik7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgc2lnbiwgc2lnbik7CisKKyAgICBhcHBlbmQo
TW92ZURvdWJsZVRvNjQsIGFyZzAsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJ
bW0oMHg3ZmZmZmZmZmZmZmZmZmZmKSwgdmFsdWUpOworICAgIGFwcGVuZChBbmQ2NCwgdGVtcDEs
IHZhbHVlLCB2YWx1ZSk7CisKKyAgICBhcHBlbmQoT3I2NCwgc2lnbiwgdmFsdWUsIHZhbHVlKTsK
KyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIHZhbHVlLCByZXN1bHQpOworCisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkNvbnZlcnRTSTY0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5k
KENvbnZlcnRJbnQ2NFRvRmxvYXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJvdGw+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAg
ICAgIC8vIEFSTTY0IGRvZXNuJ3QgaGF2ZSBhIHJvdGF0ZSBsZWZ0LgorICAgICAgICBhdXRvIG5l
d1NoaWZ0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBhcmcxLCBuZXdTaGlmdCk7Cisg
ICAgICAgIGFwcGVuZChOZWc2NCwgbmV3U2hpZnQpOworICAgICAgICByZXR1cm4gYWRkU2hpZnQo
VHlwZTo6STY0LCBSb3RhdGVSaWdodDY0LCBhcmcwLCBuZXdTaGlmdCwgcmVzdWx0KTsKKyAgICB9
IGVsc2UKKyAgICAgICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6Okk2NCwgUm90YXRlTGVmdDY0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyTHQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAg
ICBhcHBlbmQoQ29udmVydEludDMyVG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7
CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJMZT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFw
cGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR2U+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MlNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQo
VHlwZTo6STMyLCBVcnNoaWZ0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUkzMj4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGF1dG8gdGVtcCA9IGc2NCgpOworICAgIGFw
cGVuZChNb3ZlMzIsIGFyZzAsIHRlbXApOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0Zsb2F0
LCB0ZW1wLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6OkkzMiwgUnNoaWZ0MzIsIGFyZzAs
IGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJMzJHZVU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NENlaWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoQ2VpbERvdWJs
ZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR2VTPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBMc2hpZnQzMiwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NEZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXBwZW5kKEZs
b29yRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJYb3I+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoWG9yMzIs
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
dHVybiBhZGRGbG9hdGluZ1BvaW50QWJzKEFic0Zsb2F0LCBhcmcwLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWluPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjY0KCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90
RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9y
RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24g
PSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNo
RG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJn
MCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90
RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIE9yRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1
bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNz
b3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVEb3VibGUsIGFy
ZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91
YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxKTsKKyAg
ICBub3RFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGdyZWF0ZXJUaGFuT3JFcXVh
bCk7CisKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBNb3ZlRG91YmxlLCBhcmcxLCBy
ZXN1bHQpOworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIEp1bXApOworICAgIGdyZWF0
ZXJUaGFuT3JFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJy
ZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKE11bEZs
b2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTdWI+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkSW50ZWdlclN1YihTdWI2NCwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlJlaW50ZXJwcmV0RjMyPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7
CisgICAgYXBwZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkFkZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOwor
ICAgIGFwcGVuZChBZGQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3Vi
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9p
bnRCaW5PcChUeXBlOjpGNjQsIFN1YkRvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk9yPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5k
KE9yMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxh
dGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEx0VT4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21w
YXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0Q29udmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBl
bmQoQ29udmVydEludDY0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFhv
cj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAg
IGFwcGVuZChYb3I2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VVPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBw
ZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRNdWw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoTXVsNjQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlN1Yj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGlmIChpc1ZhbGlkRm9ybShTdWJG
bG9hdCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChTdWJG
bG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNYODYoKSk7CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIGFyZzAsIHJlc3VsdCk7
CisgICAgICAgIGFwcGVuZChTdWJGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NFByb21vdGVGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBl
bmQoQ29udmVydEZsb2F0VG9Eb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEFk
ZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAg
IGFwcGVuZChBZGREb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdl
Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAg
IGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRo
YW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXh0ZW5kVUkz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoYXJnMCAmJiBhcmcxKTsK
KyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UmVpbnRlcnByZXRJNjQ+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUs
IGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJn
Ojpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MkZsb29yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKEZsb29yRmxv
YXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRTSTMyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQzMlRvRmxvYXQsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigp
OworICAgIGFwcGVuZChUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyks
IGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlaW50ZXJwcmV0RjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcw
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6Okk2NCwgUnNoaWZ0NjQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRTaHJVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFk
ZFNoaWZ0KFR5cGU6Okk2NCwgVXJzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3FydD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChTcXJ0RG91YmxlLCBhcmcwLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STY0LCBMc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkd0PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7
CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVHcmVhdGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MldyYXBJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoTW92ZTMy
LCBhcmcwLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSb3RsPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAvLyBBUk02NCBkb2Vzbid0
IGhhdmUgYSByb3RhdGUgbGVmdC4KKyAgICAgICAgYXV0byBuZXdTaGlmdCA9IGc2NCgpOworICAg
ICAgICBhcHBlbmQoTW92ZSwgYXJnMSwgbmV3U2hpZnQpOworICAgICAgICBhcHBlbmQoTmVnNjQs
IG5ld1NoaWZ0KTsKKyAgICAgICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6OkkzMiwgUm90YXRlUmln
aHQzMiwgYXJnMCwgbmV3U2hpZnQsIHJlc3VsdCk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVy
biBhZGRTaGlmdChUeXBlOjpJMzIsIFJvdGF0ZUxlZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJv
dHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlw
ZTo6STMyLCBSb3RhdGVSaWdodDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RVPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBh
cmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
NjQoKTsKKyAgICBhcHBlbmQoU2lnbkV4dGVuZDMyVG9QdHIsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkd0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGczMigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6R3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWc+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBpZiAoaXNWYWxpZEZvcm0oTmVnYXRl
RG91YmxlLCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoTmVnYXRlRG91Ymxl
LCBhcmcwLCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnN0YW50ID0gYWRk
Q29uc3RhbnQoVHlwZTo6STY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRv
dWJsZT4oLTAuMCkpKTsKKyAgICAgICAgYXV0byB0ZW1wID0gZzY0KCk7CisgICAgICAgIGFwcGVu
ZChNb3ZlRG91YmxlVG82NCwgYXJnMCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChYb3I2NCwgY29u
c3RhbnQsIHRlbXApOworICAgICAgICBhcHBlbmQoTW92ZTY0VG9Eb3VibGUsIHRlbXAsIHJlc3Vs
dCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwgPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICBhcHBl
bmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVFcXVhbCksIGFyZzAsIGFyZzEpOworICAgIG1fY3VycmVudEJsb2NrLT5z
ZXRTdWNjZXNzb3JzKGlzRXF1YWwsIG5vdEVxdWFsKTsKKworICAgIGFwcGVuZChpc0VxdWFsLCBB
bmREb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5kKGlzRXF1YWwsIEp1bXAp
OworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIGFwcGVu
ZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90RXF1
YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGxlc3NU
aGFuLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGxlc3NUaGFuLCBNb3ZlRG91YmxlLCBh
cmcxLCByZXN1bHQpOworICAgIGFwcGVuZChsZXNzVGhhbiwgSnVtcCk7CisgICAgbGVzc1RoYW4t
PnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gY29u
dGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0TGVTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnNjQo
KTsKKyAgICBhcHBlbmQoQWRkNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21CM0lSR2VuZXJh
dG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK0V4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVB
aXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2ln
bmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxw
dHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyAr
MTYxLDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgQ29udHJvbERhdGE6OlJlc3VsdExpc3QgUmVz
dWx0TGlzdDsKICAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpDb250
cm9sRW50cnkgQ29udHJvbEVudHJ5OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9u
VHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOworICAgIHN0YXRpYyBjb25zdGV4cHIgRXhw
cmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JUeXBlOwogICAgIHR5cGVkZWYgVW5leHBlY3RlZDxFcnJvclR5
cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisj
aW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIK
QEAgLTI3MSw3ICsyNzIsMTEgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBp
bGF0aQogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0g
PSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKICAgICAgICAgVGllclVwQ291bnQq
IHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291bnRz
W2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKLSAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVS
ZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5k
ZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVy
ZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9u
SW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
UmVzdWx0OworICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKKyAgICAgICAg
ICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0
aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlv
bi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0
aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9u
TW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlv
bik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBh
cnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGll
clVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJz
ZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5jcHAJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDYgKzYyLDM2IEBAIGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNhbGxp
bmcKICAgICByZXR1cm4gc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOwogfQogCitjb25zdCBK
U0NDYWxsaW5nQ29udmVudGlvbkFpciYganNjQ2FsbGluZ0NvbnZlbnRpb25BaXIoKQoreworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SlNDQ2FsbGluZ0NvbnZlbnRpb25BaXI+IHN0YXRp
Y0pTQ0NhbGxpbmdDb252ZW50aW9uOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljSlNDQ2Fs
bGluZ0NvbnZlbnRpb25GbGFnLCBbXSAoKSB7CisgICAgICAgIHN0YXRpY0pTQ0NhbGxpbmdDb252
ZW50aW9uLmNvbnN0cnVjdChWZWN0b3I8UmVnPigpLCBWZWN0b3I8UmVnPigpLCBSZWdpc3RlclNl
dDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGF0aWNK
U0NDYWxsaW5nQ29udmVudGlvbjsKK30KKworY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uQWly
JiB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8V2FzbUNhbGxpbmdDb252ZW50aW9uQWlyPiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRp
b247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlv
bkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uRmxh
ZywgW10gKCkgeworICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVudFJlZ2lzdGVycyhHUFJJ
bmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKKyAgICAg
ICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lz
dGVyKGkpOworCisgICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50UmVnaXN0ZXJzKEZQUklu
Zm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAg
ICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0
ZXIoaSk7CisKKyAgICAgICAgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uLmNvbnN0cnVjdChX
VEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJBcmd1bWVudFJlZ2lzdGVy
cyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0pOworCisgICAg
cmV0dXJuIHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNp
b24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIK
ICNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKQEAgLTQ0LDI3ICs0NSwyNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi10eXBlZGVmIHVuc2lnbmVkICgqTmV4dE9mZnNl
dCkodW5zaWduZWQgY3VycmVudE9mZnNldCwgQjM6OlR5cGUgdHlwZSk7Cit0eXBlZGVmIHVuc2ln
bmVkICgqTmV4dE9mZnNldCkodW5zaWduZWQgY3VycmVudE9mZnNldCk7CiAKIHRlbXBsYXRlPHVu
c2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgogY2xhc3MgQ2FsbGlu
Z0NvbnZlbnRpb24gewogcHVibGljOgogICAgIENhbGxpbmdDb252ZW50aW9uKFZlY3RvcjxSZWc+
JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNldCYmIGNhbGxlZVNh
dmVSZWdpc3RlcnMpCi0gICAgICAgIDogbV9ncHJBcmdzKGdwckFyZ3MpCi0gICAgICAgICwgbV9m
cHJBcmdzKGZwckFyZ3MpCi0gICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKGNhbGxlZVNh
dmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKFdURk1vdmUoZ3ByQXJncykpCisgICAg
ICAgICwgbV9mcHJBcmdzKFdURk1vdmUoZnByQXJncykpCisgICAgICAgICwgbV9jYWxsZWVTYXZl
UmVnaXN0ZXJzKFdURk1vdmUoY2FsbGVlU2F2ZVJlZ2lzdGVycykpCiAgICAgewogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBCMzo6VmFsdWVSZXAgbWFyc2hhbGxBcmd1bWVudEltcGwoVmVjdG9yPFJl
Zz4gcmVnQXJncywgQjM6OlR5cGUgdHlwZSwgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09m
ZnNldCkgY29uc3QKKyAgICBCMzo6VmFsdWVSZXAgbWFyc2hhbGxBcmd1bWVudEltcGwoY29uc3Qg
VmVjdG9yPFJlZz4mIHJlZ0FyZ3MsIHNpemVfdCYgY291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkKICAgICAg
ICAgICAgIHJldHVybiBCMzo6VmFsdWVSZXA6OnJlZyhyZWdBcmdzW2NvdW50KytdKTsKIAogICAg
ICAgICBjb3VudCsrOwogICAgICAgICBCMzo6VmFsdWVSZXAgcmVzdWx0ID0gQjM6OlZhbHVlUmVw
OjpzdGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KTsKLSAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRh
dGVPZmZzZXQoc3RhY2tPZmZzZXQsIHR5cGUpOworICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0
ZU9mZnNldChzdGFja09mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBA
IC03MywxMCArNzQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAg
ICAgIGNhc2UgQjM6OkludDMyOgogICAgICAgICBjYXNlIEIzOjpJbnQ2NDoKLSAgICAgICAgICAg
IHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIHR5cGUsIGdwQXJndW1lbnRD
b3VudCwgc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJ
bXBsKG1fZ3ByQXJncywgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CiAgICAgICAgIGNh
c2UgQjM6OkZsb2F0OgogICAgICAgICBjYXNlIEIzOjpEb3VibGU6Ci0gICAgICAgICAgICByZXR1
cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCB0eXBlLCBmcEFyZ3VtZW50Q291bnQs
IHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3VtZW50SW1wbCht
X2ZwckFyZ3MsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwogICAgICAgICBjYXNlIEIz
OjpWb2lkOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE4OSwxOSArMTkwLDE0
NiBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJz
OwogfTsKIAotaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWduZWQgY3VycmVudE9m
ZnNldCwgQjM6OlR5cGUpCisvLyBGSVhNRTogU2hhcmUgbW9yZSBjb2RlIHdpdGggQ2FsbGluZ0Nv
bnZlbnRpb24gYWJvdmU6CisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk0MDY1Cit0ZW1wbGF0ZTx1bnNpZ25lZCBoZWFkZXJTaXplLCBOZXh0T2Zmc2V0IHVwZGF0
ZU9mZnNldD4KK2NsYXNzIENhbGxpbmdDb252ZW50aW9uQWlyIHsKK3B1YmxpYzoKKyAgICBDYWxs
aW5nQ29udmVudGlvbkFpcihWZWN0b3I8UmVnPiYmIGdwckFyZ3MsIFZlY3RvcjxSZWc+JiYgZnBy
QXJncywgUmVnaXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICA6IG1fZ3By
QXJncyhXVEZNb3ZlKGdwckFyZ3MpKQorICAgICAgICAsIG1fZnByQXJncyhXVEZNb3ZlKGZwckFy
Z3MpKQorICAgICAgICAsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKGNhbGxlZVNhdmVS
ZWdpc3RlcnMpKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgc2NyYXRjaCA9IFJlZ2lzdGVy
U2V0OjphbGxHUFJzKCk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVkZShSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBzY3JhdGNoLmV4Y2x1ZGUoUmVnaXN0ZXJT
ZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVk
ZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6
IG1fZ3ByQXJncykKKyAgICAgICAgICAgIHNjcmF0Y2guY2xlYXIocmVnKTsKKyAgICAgICAgZm9y
IChSZWcgcmVnIDogbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKQorICAgICAgICAgICAgc2NyYXRjaC5j
bGVhcihyZWcpOworICAgICAgICBmb3IgKFJlZyByZWcgOiBzY3JhdGNoKQorICAgICAgICAgICAg
bV9zY3JhdGNoR1BScy5hcHBlbmQocmVnKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zY3Jh
dGNoR1BScy5zaXplKCkgPj0gMik7CisgICAgfQorCisgICAgR1BSUmVnIHByb2xvZ3VlU2NyYXRj
aChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zY3JhdGNoR1BSc1tpXS5ncHIoKTsgfQorCitw
cml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWdGdW5jLCB0eXBlbmFtZSBTdGFja0Z1
bmM+CisgICAgdm9pZCBtYXJzaGFsbEFyZ3VtZW50SW1wbChjb25zdCBWZWN0b3I8UmVnPiYgcmVn
QXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCwgY29uc3QgUmVnRnVuYyYg
cmVnRnVuYywgY29uc3QgU3RhY2tGdW5jJiBzdGFja0Z1bmMpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoY291bnQgPCByZWdBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgcmVnRnVuYyhyZWdB
cmdzW2NvdW50KytdKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGNvdW50Kys7CisgICAgICAgIHN0YWNrRnVuYyhzdGFja09mZnNldCk7CisgICAgICAgIHN0YWNr
T2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgUmVnRnVuYywgdHlwZW5hbWUgU3RhY2tGdW5jPgorICAgIHZvaWQgbWFyc2hh
bGxBcmd1bWVudChUeXBlIHR5cGUsIHNpemVfdCYgZ3BBcmd1bWVudENvdW50LCBzaXplX3QmIGZw
QXJndW1lbnRDb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCwgY29uc3QgUmVnRnVuYyYgcmVnRnVu
YywgY29uc3QgU3RhY2tGdW5jJiBzdGFja0Z1bmMpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2UgVHlwZTo6
STY0OgorICAgICAgICAgICAgbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCBncEFyZ3Vt
ZW50Q291bnQsIHN0YWNrT2Zmc2V0LCByZWdGdW5jLCBzdGFja0Z1bmMpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoK
KyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgZnBBcmd1bWVudENv
dW50LCBzdGFja09mZnNldCwgcmVnRnVuYywgc3RhY2tGdW5jKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0KKworcHVibGljOgorICAgIHN0YXRpYyB1bnNpZ25lZCBo
ZWFkZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBsb2FkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50
Q291bnQgPSAwOworICAgICAgICBzaXplX3Qgc3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplOworCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsg
KytpKSB7CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50KHNpZ25hdHVyZS5hcmd1bWVudChp
KSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LAorICAgICAg
ICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKEIz
OjpBaXI6OlRtcChyZWcpLCBpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
IFsmXSAoc2l6ZV90IHN0YWNrT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3Io
QjM6OkFpcjo6QXJnOjphZGRyKEIzOjpBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciksIHN0YWNrT2Zmc2V0KSwgaSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlIHBhY2hwb2ludEZ1bmN0b3Igc2V0
cyB0aGUgZ2VuZXJhdG9yIGZvciB0aGUgY2FsbCBvcGVyYXRpb24uCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldHVwQ2FsbChCMzo6QWlyOjpDb2RlJiBjb2RlLCBU
eXBlIHJldHVyblR5cGUsIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQsIGNvbnN0IFZl
Y3RvcjxCMzo6QWlyOjpUbXA+JiBhcmdzLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVf
dCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qgc3RhY2tPZmZzZXQgPSBoZWFk
ZXJTaXplIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisgICAgICAgIGZvciAoYXV0byB0
bXAgOiBhcmdzKSB7CisgICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50KHRtcC5pc0dQKCkgPyBU
eXBlOjpJNjQgOiBUeXBlOjpGNjQsIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBz
dGFja09mZnNldCwKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rvcih0bXAsIEIzOjpWYWx1ZVJlcDo6cmVnKHJlZykpOworICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgWyZdIChzaXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0bXAsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVu
dChzdGFja09mZnNldCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAg
ICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOworCisgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJz
KCkpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRp
bGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisKKyAgICAgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7
CisgICAgICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBwYXRj
aHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gQjM6OlZhbHVlUmVwOjpyZWcoRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6STMy
OgorICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnJlc3Vs
dENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBW
ZWN0b3I8UmVnPiBtX2dwckFyZ3M7CisgICAgY29uc3QgVmVjdG9yPFJlZz4gbV9mcHJBcmdzOwor
ICAgIFZlY3RvcjxSZWc+IG1fc2NyYXRjaEdQUnM7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9j
YWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVyU2F2ZVJl
Z2lzdGVyczsKK307CisKK2lubGluZSB1bnNpZ25lZCBuZXh0SlNDT2Zmc2V0KHVuc2lnbmVkIGN1
cnJlbnRPZmZzZXQpCiB7CiAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQgKyBzaXplb2YoUmVnaXN0
ZXIpOwogfQogCiBjb25zdGV4cHIgdW5zaWduZWQganNjSGVhZGVyU2l6ZSA9IEV4ZWNTdGF0ZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKTsKLXR5cGVkZWYgQ2FsbGlu
Z0NvbnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD4gSlNDQ2FsbGluZ0NvbnZl
bnRpb247Ci0KLXR5cGVkZWYgSlNDQ2FsbGluZ0NvbnZlbnRpb24gV2FzbUNhbGxpbmdDb252ZW50
aW9uOwogCit1c2luZyBKU0NDYWxsaW5nQ29udmVudGlvbiA9IENhbGxpbmdDb252ZW50aW9uPGpz
Y0hlYWRlclNpemUsIG5leHRKU0NPZmZzZXQ+OwordXNpbmcgV2FzbUNhbGxpbmdDb252ZW50aW9u
ID0gSlNDQ2FsbGluZ0NvbnZlbnRpb247CiBjb25zdCBKU0NDYWxsaW5nQ29udmVudGlvbiYganNj
Q2FsbGluZ0NvbnZlbnRpb24oKTsKIGNvbnN0IFdhc21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNh
bGxpbmdDb252ZW50aW9uKCk7CiAKK3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyID0gQ2Fs
bGluZ0NvbnZlbnRpb25BaXI8anNjSGVhZGVyU2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBX
YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIgPSBKU0NDYWxsaW5nQ29udmVudGlvbkFpcjsKK2NvbnN0
IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigpOworY29u
c3QgV2FzbUNhbGxpbmdDb252ZW50aW9uQWlyJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKTsK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oCShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDEwICszMzMsMTAg
QEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZQogICAgICAgICAgICAg
YXJncy51bmNoZWNrZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAotICAgICAgICBFeHBy
ZXNzaW9uVHlwZSByZXN1bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247CisgICAgICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbigpOwogICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsKGZ1bmN0aW9uSW5kZXgsIGNhbGxlZVNp
Z25hdHVyZSwgYXJncywgcmVzdWx0KSk7CiAKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0
OjplbXB0eUV4cHJlc3Npb24pCisgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlF
eHByZXNzaW9uKCkpCiAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0
KTsKIAogICAgICAgICByZXR1cm4geyB9OwpAQCAtMzYyLDEwICszNjIsMTAgQEAgYXV0byBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZQogICAgICAgICAgICAgYXJncy51bmNoZWNr
ZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAotICAgICAgICBFeHByZXNzaW9uVHlwZSBy
ZXN1bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247CisgICAgICAgIEV4cHJlc3Npb25UeXBl
IHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbigpOwogICAgICAgICBXQVNNX1RSWV9B
RERfVE9fQ09OVEVYVChhZGRDYWxsSW5kaXJlY3QoY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1
bHQpKTsKIAotICAgICAgICBpZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbikK
KyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24oKSkKICAgICAg
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCiAgICAgICAgIHJldHVy
biB7IH07CkBAIC00MDksNyArNDA5LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2VFeHByZQogICAgIGNhc2UgQnI6CiAgICAgY2FzZSBCcklmOiB7CiAgICAgICAgIHVpbnQz
Ml90IHRhcmdldDsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uID0gQ29udGV4dDo6
ZW1wdHlFeHByZXNzaW9uOworICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24gPSBDb250
ZXh0OjplbXB0eUV4cHJlc3Npb24oKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIodGFyZ2V0KSwgImNhbid0IGdldCBiciAvIGJyX2lmJ3MgdGFyZ2V0Iik7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUo
KSwgImJyIC8gYnJfaWYncyB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFj
ayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRP
cGNvZGUgPT0gQnJJZikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZh
bGlkYXRlLmNwcAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBwdWJs
aWM6CiAgICAgdHlwZWRlZiBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IEV4cHJlc3Npb25MaXN0
OwogICAgIHR5cGVkZWYgRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sRW50cnkgQ29u
dHJvbEVudHJ5OwogCi0gICAgc3RhdGljIGNvbnN0IEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVz
c2lvbiA9IFZvaWQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4
cHJlc3Npb24oKSB7IHJldHVybiBWb2lkOyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4u
QXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360652</attachid>
            <date>2019-01-30 17:07:06 -0800</date>
            <delta_ts>2019-01-30 17:11:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>179913</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwNzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3MSBA
QAorMjAxOS0wMS0zMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbV2ViQXNzZW1ibHldIENoYW5nZSBCQlEgdG8gZ2VuZXJhdGUgQWlyIElSCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE4MDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3NjUxNzE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBXYXNtIGNvbXBpbGVyIGZvciB0
aGUgQkJRIHRpZXIuIEluc3RlYWQKKyAgICAgICAgb2YgY29tcGlsaW5nIHVzaW5nICBCMy0wMSwg
d2Ugbm93IGdlbmVyYXRlIEFpciBjb2RlIGRpcmVjdGx5LgorICAgICAgICBUaGUgZ29hbCBvZiBk
b2luZyB0aGlzIHdhcyB0byBzcGVlZCB1cCBjb21waWxlIHRpbWVzIGZvciBXYXNtCisgICAgICAg
IHByb2dyYW1zLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBwcm92aWRlcyB1cyB3aXRo
IGEgMjAtMzAlIGNvbXBpbGUgdGltZSBzcGVlZHVwLiBIb3dldmVyLCBJCisgICAgICAgIGhhdmUg
aWRlYXMgb24gaG93IHRvIGltcHJvdmUgY29tcGlsZSB0aW1lcyBldmVuIGZ1cnRoZXIuIEZvciBl
eGFtcGxlLAorICAgICAgICB3ZSBzaG91bGQgcHJvYmFibHkgaW1wbGVtZW50IGEgZmFzdGVyIHJ1
bm5pbmcgcmVnaXN0ZXIgYWxsb2NhdG9yOgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDM2CisgICAgICAgIAorICAgICAgICBXZSBjYW4gYWxzbyBp
bXByb3ZlIG9uIHRoZSBjb2RlIHdlIGdlbmVyYXRlLgorICAgICAgICBXZSBzaG91bGQgZW1pdCBi
ZXR0ZXIgY29kZSBmb3IgU3dpdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MDUzCisgICAgICAgIEFuZCB3ZSBzaG91bGQgZG8gYmV0dGVyIGluc3RydWN0aW9u
IHNlbGVjdGlvbiBpbiB2YXJpb3VzCisgICAgICAgIGFyZWFzOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwu
aDoKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUpOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6
CisgICAgICAgICogYjMvYWlyL0FpclRtcC5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OlRtcCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6Q29uc3RyYWlu
ZWRUbXA6OkNvbnN0cmFpbmVkVG1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6OlR5
cGVkVG1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlZFRtcDo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OlR5cGVkVG1wOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VHlwZWRUbXA6Om9wZXJhdG9yIFRtcCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVkVG1wOjpvcGVyYXRvciBBcmcgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUeXBlZFRtcDo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6OnR5
cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERh
dGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNv
bnRyb2xEYXRhOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpzaWduYXR1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6Omhhc05vblZvaWRTaWduYXR1cmUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnRh
cmdldEJsb2NrRm9yQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjpjb252ZXJ0SWZUb0Jsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpyZXN1bHRGb3JCcmFuY2ggY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmZhaWwgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6c2V0UGFyc2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OnRvVG1wVmVjdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OnJlbGVhc2VUbXApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
dmFsaWRhdGVJbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmV4dHJh
Y3RBcmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YXBwZW5kKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFwcGVuZEVmZmVjdGZ1bCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6ZzMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6Omc2NCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpmMzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZjY0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OnRtcEZvclR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjplbWl0UGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
ZW1pdENDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6Om1vdmVPcEZv
clZhbHVlVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjppbnN0YW5j
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRl
clBsdXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6cmVzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6ZW1pdFRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpnZXRMb2Nh
bCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206
OnNpemVPZkxvYWRPcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0
TG9hZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmxvYWQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpzaXplT2ZTdG9yZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFNl
bGVjdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hl
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUb3BMZXZlbCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRFbHNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVs
c2VUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZFJldHVybik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2gp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
dW5pZnlWYWx1ZXNXaXRoQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpvcmlnaW4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRNb2RPckRpdik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
RGl2Uz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRSZW1TPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NERpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0UmVtVT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0Pik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0
Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NE5lYXJlc3Q+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyTmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2
ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJUcnVuY1VGMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRTaGlmdCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3ViKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEJpbk9wKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJNdWw+KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3Vi
Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NExlPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkRlbW90ZUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJNaW4+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0TmU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0THQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWF4Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE11bD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6Pik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvcHlzaWduPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRV
STMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMlJlaW50ZXJwcmV0STMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NEFuZD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0Pik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEdlPik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFU+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXF6Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NERpdj4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBZGQ+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
T3I+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyTGVVPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkxlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjROZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDbHo+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyTmVnPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkFuZD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90cj4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBYnM+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRTPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvcHlzaWduPik6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNv
bnZlcnRTSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFJvdGw+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyTHQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTGU+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR2U+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUkzMj4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJT
aHJTPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkdlVT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjRDZWlsPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkdlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJTaGw+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0Rmxvb3I+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFN1Yj4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZWludGVycHJl
dEYzMj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJBZGQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0U3ViPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMk9yPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEx0VT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRMdFM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJNjQ+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlVT4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRNdWw+KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3ViPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFByb21v
dGVGMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0QWRkPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEdlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk5lPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFJlaW50ZXJwcmV0STY0Pik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkVxPik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29yPik6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNv
bnZlcnRTSTMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkVxej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRSZWludGVycHJldEY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJTPik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3FydD4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2
ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJSb3RsPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlJvdHI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyR3RVPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFNJMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RTPik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVVPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlUz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRBZGQ+KToKKyAg
ICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiB3YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgICog
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpqc2ND
YWxsaW5nQ29udmVudGlvbkFpcik6CisgICAgICAgIChKU0M6Oldhc206Ondhc21DYWxsaW5nQ29u
dmVudGlvbkFpcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OkNhbGxpbmdDb252ZW50aW9uKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnRJ
bXBsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNo
YWxsQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlv
bkFpcjo6Q2FsbGluZ0NvbnZlbnRpb25BaXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5n
Q29udmVudGlvbkFpcjo6cHJvbG9ndWVTY3JhdGNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q2FsbGluZ0NvbnZlbnRpb25BaXI6Om1hcnNoYWxsQXJndW1lbnRJbXBsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb25BaXI6Om1hcnNoYWxsQXJndW1lbnQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlvbkFpcjo6aGVhZGVy
U2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlvbkFpcjo6
bG9hZEFyZ3VtZW50cyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50
aW9uQWlyOjpzZXR1cENhbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpuZXh0SlNDT2Zm
c2V0KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRl
OjplbXB0eUV4cHJlc3Npb24pOgorCiAyMDE5LTAxLTMwICBUYWRldSBaYWdhbGxvICA8dHphZ2Fs
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENhY2hlZEJ5dGVjb2RlJ3MgbW92ZSBjb25zdHJ1Y3Rv
ciBzaG91bGQgbm90IGNhbGwgYGZyZWVEYXRhSWZPd25lZGAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcxLDYgKzk3MSw3IEBAIHRvb2xzL0pTRG9s
bGFyVk0uY3BwCiB0b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNwZWN0
b3IuY3BwCiAKK3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBAbm8tdW5pZnkKIHdhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCiB3YXNtL1dhc21CQlFQbGFuLmNwcAogd2FzbS9XYXNtQmluZGlu
Zy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDA2OTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODc3LDEwICs4NzcsMTIgQEAKIAkJNTI2NzhG
OEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZE
IC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxv
d1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFDNEI3MUU5
NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNv
ZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4
NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0
QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdD
IC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBl
TG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYx
QUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGlt
ZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIz
ODYgLyogVHlwZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTJDQTNFQUMyMjAyODE4NTAwRkM5RTY0IC8qIFdhc21BaXJJUkdlbmVy
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCAqLzsgfTsK
IAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1
QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgfTsK
IAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2QjExRkEzRTc3
QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICovOyB9OwogCQk1MzBBNjZCQTFGQTNF
NzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTQtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCODFGQTNFNzdFMDAyNkE1NDUgLyogVW5p
ZmllZFNvdXJjZTQtbW0ubW0gKi87IH07CkBAIC0zMzU4LDYgKzMzNjAsOCBAQAogCQk1MjZBQzRC
NDFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvZGVCbG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjc3NzNERDFBQUY4M0FDMDBCREU3RTggLyogUnVudGlt
ZVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVudGltZVR5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Mjg0N0FEOTIxRkZCODYzMDA2
MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21B
aXJJUkdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyODQ3QURB
MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbUFpcklSR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMx
MEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyQjMxMEZDMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMzEwRkUxOTc1QjQyNDAwODA4NTdD
IC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVMb2NhdGlv
bkNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MzQsNiArNjQzOCw4
IEBACiAJCQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAogCQkJCTUzRjQwRThF
MUQ1OTAyODIwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBF
OTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCisJCQkJNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi8sCisJCQkJNTI4
NDdBREEyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovLAogCQkJCTUz
Q0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8sCiAJCQkJNTNDQTcz
MDgxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggKi8sCiAJCQkJNTNGOEQxRkYxRTgz
ODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5oICovLApAQCAtODUyOSw2ICs4NTM1
LDcgQEAKIAkJCQk0MzZFNTQ1MzFDNDY4RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9m
ZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBC
M0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzE5REEwNDFDMUJFNDBEMDAxRDI2
MEIgLyogQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDNBQjI2QzYxQzFBNTM1OTAwRDgyQUU2IC8qIEIzTWF0aEV4
dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1NDAsNiArMTA1NDcsNyBAQAogCQkJ
CTUzNkIzMTlBMUY3MzVFNzgwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTUzNkIzMTVGMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE5QjFGNzM1RTc4MDAzN0ZDMzMgLyogVW5pZmll
ZFNvdXJjZTItbW0ubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MkNBM0VBQzIyMDI4MTg1MDBGQzlF
NjQgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTU3
MUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MzZCMzE1ODFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTMu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNjYsOCArMzM2Niw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBUbXAgcmV0dXJuVmFsdWVGUFIgPSBUbXAoRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOwogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIGZv
ciBhIHZvaWQgdmFsdWUgdG8gYmUgdXNlZCBhcyBhIGNoaWxkLiBJZiB3ZSBkaWQgd2FudCB0byBo
YXZlIGEKLSAgICAgICAgICAgICAgICAvLyB2b2lkIHJldHVybiwgd2UnZCBpbnRyb2R1Y2UgYSBk
aWZmZXJlbnQgb3Bjb2RlLCBsaWtlIFJldHVyblZvaWQuCisgICAgICAgICAgICAgICAgLy8gSXQn
cyBpbXBvc3NpYmxlIGZvciBhIHZvaWQgdmFsdWUgdG8gYmUgdXNlZCBhcyBhIGNoaWxkLiBXZSB1
c2UgUmV0Vm9pZAorICAgICAgICAgICAgICAgIC8vIGZvciB2b2lkIHJldHVybnMuCiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xvYmJl
cmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMg
bm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2Ug
aGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBn
ZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQogICAg
IC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hBcmdJ
bXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNw
cAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUoKQog
ewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBqaXQp
Cit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2b2lk
IENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8UmVn
PiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQwNjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVkUmVn
aXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vha1Jh
bmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9pZCBl
bWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xh
c3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0ZXhw
ciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjQwNjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OTUsNiArNDk1LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgog
ICAgIHYoYm9vbCwgY3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3Jt
YWwsICJJZiB0cnVlLCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9y
eSBmb3Igd2FzbS4iKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVt
b3JpZXMsIDQsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlRmFzdFRMU0Zvcldh
c21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHN0b3JlIGNvbnRleHQg
aW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3aWxsIHBpbiBpdCB0byBhIHJlZ2lzdGVyLiIpIFwK
KyAgICB2KGJvb2wsIHdhc21CQlFVc2VzQWlyLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5U3RyZWFtaW5nQXBpLCBlbmFibGVXZWJBc3NlbWJseVN0
cmVhbWluZ0FwaSwgTm9ybWFsLCAiQWxsb3cgdG8gcnVuIFdlYkFzc2VtYmx5J3MgU3RyZWFtaW5n
IEFQSSIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscywg
dHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgQ2FsbExpbmtJbmZvIHRvIGlubGlu
ZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2KGJvb2wsIHVzZUVhZ2VyV2ViQXNz
ZW1ibHlNb2R1bGVIYXNoaW5nLCBmYWxzZSwgTm9ybWFsLCAiVW5uYW1lZCBXZWJBc3NlbWJseSBt
b2R1bGVzIGFyZSBpZGVudGlmaWVkIGluIGJhY2t0cmFjZXMgdGhyb3VnaCB0aGVpciBoYXNoLCBp
ZiBhdmFpbGFibGUuIikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1
ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRl
ICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZUlmLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDaGVja1NwZWNp
YWwuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNs
dWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0
aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgIldh
c21JbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtT01H
UGxhbi5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlIDxsaW1p
dHM+CisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25zdHJhaW5lZFRt
cCB7CisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25zdHJhaW5lZFRt
cCh0bXAsIHRtcC5pc1JlZygpID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygpKSA6IEIzOjpW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWluZWRUbXAoVG1w
IHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAgICAgICAsIHJl
cChyZXApCisgICAgeworICAgIH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZhbHVlUmVwIHJl
cDsKK307CisKK2NsYXNzIFR5cGVkVG1wIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgVHlwZWRU
bXAoKQorICAgICAgICA6IG1fdG1wKCkKKyAgICAgICAgLCBtX3R5cGUoVHlwZTo6Vm9pZCkKKyAg
ICB7IH0KKworICAgIFR5cGVkVG1wKFRtcCB0bXAsIFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3Rt
cCh0bXApCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgeyB9CisKKyAgICBUeXBlZFRtcChj
b25zdCBUeXBlZFRtcCYpID0gZGVmYXVsdDsKKyAgICBUeXBlZFRtcChUeXBlZFRtcCYmKSA9IGRl
ZmF1bHQ7CisgICAgVHlwZWRUbXAmIG9wZXJhdG9yPShUeXBlZFRtcCYmKSA9IGRlZmF1bHQ7Cisg
ICAgVHlwZWRUbXAmIG9wZXJhdG9yPShjb25zdCBUeXBlZFRtcCYpID0gZGVmYXVsdDsKKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBUeXBlZFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV90bXAgPT0gb3RoZXIubV90bXAgJiYgbV90eXBlID09IG90aGVyLm1fdHlw
ZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFR5cGVkVG1wJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISF0bXAoKTsgfQorCisg
ICAgb3BlcmF0b3IgVG1wKCkgY29uc3QgeyByZXR1cm4gdG1wKCk7IH0KKyAgICBvcGVyYXRvciBB
cmcoKSBjb25zdCB7IHJldHVybiBBcmcodG1wKCkpOyB9CisgICAgVG1wIHRtcCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG1wOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisKK3ByaXZhdGU6CisKKyAgICBUbXAgbV90bXA7CisgICAgVHlwZSBtX3R5cGU7Cit9OworCitj
bGFzcyBBaXJJUkdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IENvbnRyb2xEYXRhIHsK
KyAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIFR5cGUgcmV0dXJuVHlwZSwg
VHlwZWRUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0
aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tU
eXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAg
ICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwgcmV0dXJuVHlwZShyZXR1
cm5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsgLy8g
RklYTUU6IFVzZSBvcmlnaW4uCisgICAgICAgICAgICBpZiAocmVzdWx0VG1wKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChyZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJldHVyblR5cGUgPT0gVHlwZTo6Vm9pZCk7CisgICAgICAgIH0KKwor
ICAgICAgICBDb250cm9sRGF0YSgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiSWY6ICAgICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiQmxvY2s6ICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBCbG9ja1R5cGU6Okxvb3A6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJMb29w
OiAgICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2Nr
VHlwZTo6VG9wTGV2ZWw6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQu
cHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7Cisg
ICAgICAgICAgICBpZiAoc3BlY2lhbCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoKnNwZWNp
YWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTm9uZSIp
OworICAgICAgICB9CisKKyAgICAgICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBi
bG9ja1R5cGU7IH0KKworICAgICAgICBUeXBlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHJl
dHVyblR5cGU7IH0KKworICAgICAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7
IHJldHVybiByZXN1bHQuc2l6ZSgpOyB9CisKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0Qmxv
Y2tGb3JCcmFuY2goKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2Nr
VHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAg
IHJldHVybiBjb250aW51YXRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRJ
ZlRvQmxvY2soKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodHlwZSgpID09IEJsb2Nr
VHlwZTo6SWYpOworICAgICAgICAgICAgYmxvY2tUeXBlID0gQmxvY2tUeXBlOjpCbG9jazsKKyAg
ICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdXNpbmcg
UmVzdWx0TGlzdCA9IFZlY3RvcjxUeXBlZFRtcCwgMT47CisKKyAgICAgICAgUmVzdWx0TGlzdCBy
ZXN1bHRGb3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgp
ID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUg
YmxvY2tUeXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJh
c2ljQmxvY2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBU
eXBlIHJldHVyblR5cGU7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVHlw
ZWRUbXA7CisgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKKyAgICB1c2luZyBF
eHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT47CisgICAgdXNpbmcgUmVz
dWx0TGlzdCA9IENvbnRyb2xEYXRhOjpSZXN1bHRMaXN0OworICAgIHVzaW5nIENvbnRyb2xFbnRy
eSA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OworCisgICAg
c3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIHsgfTsgfTsK
KworICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmluZzsKKyAgICB1c2luZyBVbmV4cGVjdGVkUmVz
dWx0ID0gVW5leHBlY3RlZDxFcnJvclR5cGU+OworICAgIHVzaW5nIFJlc3VsdCA9IEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPjsKKyAgICB1c2lu
ZyBQYXJ0aWFsUmVzdWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAg
ICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4g
V2FzbVBhcnNlci5oLgorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5n
KCJXZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIl9zLCBtYWtlU3RyaW5nKGFy
Z3MpLi4uKSk7CisgICAgfQorCisjZGVmaW5lIFdBU01fQ09NUElMRV9GQUlMX0lGKGNvbmRpdGlv
biwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAg
ICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBj
b25zdCBTaWduYXR1cmUmKTsKKworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CisgICAgRXhwcmVzc2lvblR5
cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENv
bnN0YW50KEJhc2ljQmxvY2sqLCBUeXBlLCB1aW50NjRfdCk7CisKKyAgICAvLyBMb2NhbHMKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsK
KworICAgIC8vIEdsb2JhbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBn
ZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gTWVtb3J5CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRHcm93TWVtb3J5KEV4cHJlc3Np
b25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworCisgICAgLy8gQmFzaWMgb3BlcmF0b3JzCisgICAgdGVtcGxhdGU8T3BUeXBlPgorICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgdGVtcGxhdGU8T3BUeXBlPgorICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQs
IEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIENvbnRyb2wgZmxvdworICAgIENvbnRyb2xE
YXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSk7CisgICAg
Q29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsK
KyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVy
ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYs
IGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKKworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBk
ZWZhdWx0VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5
JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKKwor
ICAgIC8vIENhbGxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CisKKyAg
ICBQYXJ0aWFsUmVzdWx0IGFkZFNoaWZ0KFR5cGUsIEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEludGVnZXJTdWIoQjM6OkFpcjo6T3Bjb2RlLCBFeHBy
ZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QWJzKEIzOjpBaXI6Ok9wY29k
ZSwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGUsIEIzOjpBaXI6Ok9wY29kZSwg
RXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpOworCisgICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250
cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBleHByZXNzaW9uU3RhY2spOworICAgIHZv
aWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogcGFyc2VyKSB7IG1f
cGFyc2VyID0gcGFyc2VyOyB9OworCisgICAgc3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9y
KGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIFZlY3RvcjxU
bXA+IHJlc3VsdDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogdmVjdG9yKQorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnRtcCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICB2b2lkIHJlbGVhc2VUbXAoVG1wIHRtcCkKKyAgICB7CisgICAgICAg
IGlmICghdG1wKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG1wLmlzUmVnKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0bXAuaXNHUCgpKQorICAgICAgICAg
ICAgbV9mcmVlR1BUZW1wcy5hcHBlbmQodG1wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9mcmVlRlBUZW1wcy5hcHBlbmQodG1wKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHZhbGlkYXRlSW5zdChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGlmICghaW5zdC5pc1ZhbGlkRm9ybSgp
KSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGluc3QpOworICAgICAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgQXJn
IGV4dHJhY3RBcmcoY29uc3QgVHlwZWRUbXAmIHRtcCkgeyByZXR1cm4gdG1wLnRtcCgpOyB9Cisg
ICAgc3RhdGljIEFyZyBleHRyYWN0QXJnKGNvbnN0IFRtcCYgdG1wKSB7IHJldHVybiBBcmcodG1w
KTsgfQorICAgIHN0YXRpYyBBcmcgZXh0cmFjdEFyZyhjb25zdCBBcmcmIGFyZykgeyByZXR1cm4g
YXJnOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBh
cHBlbmQoQmFzaWNCbG9jayogYmxvY2ssIEtpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1l
bnRzKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEZpbnMgYSB3YXkgdG8gdXNlIG9yaWdpbiBo
ZXJlLgorICAgICAgICBhdXRvJiBpbnN0ID0gYmxvY2stPmFwcGVuZChraW5kLCBudWxscHRyLCBl
eHRyYWN0QXJnKGFyZ3VtZW50cykuLi4pOworICAgICAgICB2YWxpZGF0ZUluc3QoaW5zdCk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBw
ZW5kKEtpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
YXBwZW5kKG1fY3VycmVudEJsb2NrLCBraW5kLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1
bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgdm9pZCBhcHBlbmRFZmZlY3RmdWwoQjM6OkFpcjo6T3Bjb2RlIG9wLCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBLaW5kIGtpbmQgPSBvcDsKKyAgICAgICAg
a2luZC5lZmZlY3RzID0gdHJ1ZTsKKyAgICAgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBraW5k
LCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBU
bXAgbmV3VG1wKEIzOjpCYW5rIGJhbmspCisgICAgeworICAgICAgICBpZiAoYmFuayA9PSBCMzo6
RlAgJiYgbV9mcmVlRlBUZW1wcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbV9mcmVlRlBU
ZW1wcy50YWtlTGFzdCgpOworICAgICAgICBpZiAoYmFuayA9PSBCMzo6R1AgJiYgbV9mcmVlR1BU
ZW1wcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbV9mcmVlR1BUZW1wcy50YWtlTGFzdCgp
OworICAgICAgICByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICB9CisKKyAgICBUeXBl
ZFRtcCBnMzIoKSB7IHJldHVybiB7IG5ld1RtcChCMzo6R1ApLCBUeXBlOjpJMzIgfTsgfQorICAg
IFR5cGVkVG1wIGc2NCgpIHsgcmV0dXJuIHsgbmV3VG1wKEIzOjpHUCksIFR5cGU6Okk2NCB9OyB9
CisgICAgVHlwZWRUbXAgZjMyKCkgeyByZXR1cm4geyBuZXdUbXAoQjM6OkZQKSwgVHlwZTo6RjMy
IH07IH0KKyAgICBUeXBlZFRtcCBmNjQoKSB7IHJldHVybiB7IG5ld1RtcChCMzo6RlApLCBUeXBl
OjpGNjQgfTsgfQorCisgICAgVHlwZWRUbXAgdG1wRm9yVHlwZShUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAg
ICAgICByZXR1cm4gZzMyKCk7CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAg
cmV0dXJuIGc2NCgpOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIHJldHVy
biBmMzIoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICByZXR1cm4gZjY0
KCk7CisgICAgICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogYWRkUGF0Y2hw
b2ludChCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGQ8QjM6
OlBhdGNocG9pbnRWYWx1ZT4odHlwZSwgQjM6Ok9yaWdpbigpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEIzOjpQYXRj
aHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisgICAgewor
ICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIHJlc3VsdCwgc3Rk
Ojpmb3J3YXJkPEFyZ3M+KHRoZUFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2lj
QmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRo
ZUFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwg
cmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIHNpemVvZi4uLihBcmdzKT46OmZyb20odGhl
QXJncy4uLikpOworICAgIH0KKworICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayog
YmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQpCisgICAg
eworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgcmVzdWx0LCBWZWN0
b3I8Q29uc3RyYWluZWRUbXA+KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxzaXplX3QgaW5s
aW5lU2l6ZT4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ss
IEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWlu
ZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKKyAgICB7CisgICAgICAgIGlmICghbV9wYXRjaHBv
aW50U3BlY2lhbCkKKyAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwgPSBzdGF0aWNfY2Fz
dDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5p
cXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOworCisgICAgICAgIEluc3QgaW5zdChQYXRj
aCwgcGF0Y2gsIEFyZzo6c3BlY2lhbChtX3BhdGNocG9pbnRTcGVjaWFsKSk7CisgICAgICAgIElu
c3QgcmVzdWx0TW92OworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBBU1NFUlQo
cGF0Y2gtPnR5cGUoKSAhPSBCMzo6Vm9pZCk7CisgICAgICAgICAgICBzd2l0Y2ggKHBhdGNoLT5y
ZXN1bHRDb25zdHJhaW50LmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBCMzo6VmFsdWVSZXA6
OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKHBhdGNoLT5y
ZXN1bHRDb25zdHJhaW50LnJlZygpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0TW92ID0gSW5z
dChyZXN1bHQuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChwYXRjaC0+
cmVzdWx0Q29uc3RyYWludC5yZWcoKSksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAg
ICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBB
U1NFUlQocGF0Y2gtPnR5cGUoKSA9PSBCMzo6Vm9pZCk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KENvbnN0cmFpbmVkVG1wJiB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBpcyBsZXNzIHRoYW4gaWRlYWwgdG8gY3JlYXRlIGR1bW15IHZhbHVlcyBqdXN0IHRvIHNhdGlz
ZnkgQWlyJ3MKKyAgICAgICAgICAgIC8vIHZhbGlkYXRpb24uIFdlIHNob3VsZCBhYnN0cmNhdCBQ
YXRjaCBlbm91Z2ggc28gVmFsdWVSZXAncyBkb24ndCBuZWVkIHRvIGJlCisgICAgICAgICAgICAv
LyBiYWNrZWQgYnkgVmFsdWVzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NDA0MAorICAgICAgICAgICAgQjM6OlZhbHVlKiBkdW1teVZh
bHVlID0gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgdG1wLnRtcC5pc0dQKCkgPyBC
Mzo6SW50NjQgOiBCMzo6RG91YmxlLCAwKTsKKyAgICAgICAgICAgIHBhdGNoLT5hcHBlbmQoZHVt
bXlWYWx1ZSwgdG1wLnJlcCk7CisgICAgICAgICAgICBzd2l0Y2ggKHRtcC5yZXAua2luZCgpKSB7
CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAg
ICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wLnRtcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICAg
ICAgcGF0Y2gtPmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodG1wLnJlcC5yZWcoKSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKGJhc2ljQmxvY2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6IE1vdmVE
b3VibGUsIHRtcC50bXAsIHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQoVG1wKHRtcC5yZXAucmVnKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OiB7CisgICAgICAgICAg
ICAgICAgYXV0byBhcmcgPSBBcmc6OmNhbGxBcmcodG1wLnJlcC5vZmZzZXRGcm9tU1AoKSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKGJhc2ljQmxvY2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6
IE1vdmVEb3VibGUsIHRtcC50bXAsIGFyZyk7CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFw
cGVuZChhcmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhdGNoLT5yZXN1
bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICBwYXRjaC0+bGF0ZUNsb2JiZXJlZCgp
LmNsZWFyKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAg
IGluc3QuYXJncy5hcHBlbmQoZzY0KCkudG1wKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBwYXRjaC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZChmNjQoKS50bXAoKSk7CisKKyAgICAgICAgdmFsaWRhdGVJbnN0KGluc3QpOwor
ICAgICAgICBiYXNpY0Jsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgICAgIGlmIChy
ZXN1bHRNb3YpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlSW5zdChyZXN1bHRNb3YpOworICAgICAg
ICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdURk1vdmUocmVzdWx0TW92KSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnJhbmNoLCB0eXBlbmFtZSBHZW5lcmF0
b3I+CisgICAgdm9pZCBlbWl0Q2hlY2soY29uc3QgQnJhbmNoJiBtYWtlQnJhbmNoLCBjb25zdCBH
ZW5lcmF0b3ImIGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIC8vIFdlIGZhaWwgYWxvbmcgdGhl
IHRydXRoeSBlZGdlIG9mICdicmFuY2gnLgorICAgICAgICBJbnN0IGJyYW5jaCA9IG1ha2VCcmFu
Y2goKTsKKworICAgICAgICAvLyBGSVhNRTogTWFrZSBhIGhhc2htYXAgb2YgdGhlc2UuCisgICAg
ICAgIEIzOjpDaGVja1NwZWNpYWw6OktleSBrZXkoYnJhbmNoKTsKKyAgICAgICAgQjM6OkNoZWNr
U3BlY2lhbCogc3BlY2lhbCA9IHN0YXRpY19jYXN0PEIzOjpDaGVja1NwZWNpYWwqPihtX2NvZGUu
YWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDaGVja1NwZWNpYWw+KGtleSkpKTsKKwor
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciBkdW1teSB2YWx1ZXMKKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA0MAorICAg
ICAgICBCMzo6VmFsdWUqIGR1bW15UHJlZGljYXRlID0gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpP
cmlnaW4oKSwgQjM6OkludDMyLCA0Mik7CisgICAgICAgIEIzOjpDaGVja1ZhbHVlKiBjaGVja1Zh
bHVlID0gbV9wcm9jLmFkZDxCMzo6Q2hlY2tWYWx1ZT4oQjM6OkNoZWNrLCBCMzo6T3JpZ2luKCks
IGR1bW15UHJlZGljYXRlKTsKKyAgICAgICAgY2hlY2tWYWx1ZS0+c2V0R2VuZXJhdG9yKGdlbmVy
YXRvcik7CisKKyAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNwZWNp
YWwoc3BlY2lhbCkpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kVmVjdG9yKGJyYW5jaC5hcmdz
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgLi4uQXJncz4KKyAgICB2
b2lkIGVtaXRDQ2FsbChGdW5jIGZ1bmMsIFR5cGVkVG1wIHJlc3VsdCwgQXJncy4uLiBhcmdzKQor
ICAgIHsKKyAgICAgICAgZW1pdENDYWxsKG1fY3VycmVudEJsb2NrLCBmdW5jLCByZXN1bHQsIHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jLCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2ljQmxvY2sq
IGJsb2NrLCBGdW5jIGZ1bmMsIFR5cGVkVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAg
IHsKKyAgICAgICAgQjM6OlR5cGUgcmVzdWx0VHlwZSA9IEIzOjpWb2lkOworICAgICAgICBpZiAo
cmVzdWx0KSB7CisgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgICAgIHJlc3VsdFR5cGUgPSBCMzo6SW50
MzI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGU6Okk2NDoK
KyAgICAgICAgICAgICAgICByZXN1bHRUeXBlID0gQjM6OkludDY0OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICAgICAgcmVz
dWx0VHlwZSA9IEIzOjpGbG9hdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgICAgIHJlc3VsdFR5cGUgPSBCMzo6RG91Ymxl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBtYWtlRHVtbXlWYWx1ZSA9IFsmXSAoVG1wIHRtcCkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgbGVzcyB0aGFuIGlkZWFsIHRvIGNyZWF0ZSBk
dW1teSB2YWx1ZXMganVzdCB0byBzYXRpc2Z5IEFpcidzCisgICAgICAgICAgICAvLyB2YWxpZGF0
aW9uLiBXZSBzaG91bGQgYWJzdHJjYXQgQ0NhbGwgZW5vdWdoIHNvIHdlJ3JlIG5vdCByZWxpYW50
IG9uIGFyZ3VtZW50cworICAgICAgICAgICAgLy8gdG8gdGhlIEIzOjpDQ2FsbFZhbHVlLgorICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA0
MAorICAgICAgICAgICAgaWYgKHRtcC5pc0dQKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
cHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgMCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkRvdWJsZSwgMCk7
CisgICAgICAgIH07CisKKyAgICAgICAgQjM6OlZhbHVlKiBkdW1teUZ1bmMgPSBtX3Byb2MuYWRk
Q29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6SW50NjQsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGZ1bmMpKTsKKyAgICAgICAgQjM6OlZhbHVlKiBvcmlnaW4gPSBtX3Byb2MuYWRkPEIzOjpDQ2Fs
bFZhbHVlPihyZXN1bHRUeXBlLCBCMzo6T3JpZ2luKCksIEIzOjpFZmZlY3RzOjpub25lKCksIGR1
bW15RnVuYywgbWFrZUR1bW15VmFsdWUodGhlQXJncykuLi4pOworCisgICAgICAgIEluc3QgaW5z
dChDQ2FsbCwgb3JpZ2luKTsKKworICAgICAgICBUbXAgY2FsbGVlID0gZzY0KCk7CisgICAgICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmltbVB0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMsIEIz
Q0NhbGxQdHJUYWcpKSwgY2FsbGVlKTsKKyAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChjYWxsZWUp
OworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJl
c3VsdC50bXAoKSk7CisKKyAgICAgICAgZm9yIChUbXAgdG1wIDogVmVjdG9yPFRtcCwgc2l6ZW9m
Li4uKEFyZ3MpPjo6ZnJvbSh0aGVBcmdzLnRtcCgpLi4uKSkKKyAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQodG1wKTsKKworICAgICAgICBibG9jay0+YXBwZW5kKFdURk1vdmUoaW5zdCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBCMzo6QWlyOjpPcGNvZGUgbW92ZU9wRm9yVmFsdWVUeXBlKFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5
cGU6OkkzMjoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlMzI7CisgICAgICAgIGNhc2UgVHlwZTo6
STY0OgorICAgICAgICAgICAgcmV0dXJuIE1vdmU7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgor
ICAgICAgICAgICAgcmV0dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6Cisg
ICAgICAgICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIGVtaXRUaHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsK
KworICAgIHZvaWQgZW1pdFRpZXJVcENoZWNrKHVpbnQzMl90IGRlY3JlbWVudENvdW50LCBCMzo6
T3JpZ2luKTsKKworICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9m
T3ApOworICAgIEV4cHJlc3Npb25UeXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9yZU9wKFN0
b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
dWludDMyX3Qgb2Zmc2V0KTsKKworICAgIHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUm
IGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUmIHNvdXJjZSk7CisgICAgdm9pZCB1bmlmeVZhbHVl
c1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3Vs
dExpc3QmIHN0YWNrKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgorICAgIHZv
aWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KGJvb2wgaXNTaWduZWREaXYsIEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJ
bnRUeXBlPgorICAgIHZvaWQgZW1pdE1vZE9yRGl2KGJvb2wgaXNEaXYsIEV4cHJlc3Npb25UeXBl
IGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAg
IGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVz
c2lvblR5cGUmLCB1aW50MzJfdCk7CisKKyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4dEluc3Rh
bmNlKEJhc2ljQmxvY2sqLCBUeXBlZFRtcCk7CisgICAgZW51bSBjbGFzcyBSZXN0b3JlQ2FjaGVk
U3RhY2tMaW1pdCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2Jh
bFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYs
IFR5cGVkVG1wIGluc3RhbmNlLCBCYXNpY0Jsb2NrKik7CisKKyAgICBCMzo6T3JpZ2luIG9yaWdp
bigpOworCisgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51
bGxwdHIgfTsKKyAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIGNvbnN0
IE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKKyAgICBj
b25zdCBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGUgeyBDb21waWxhdGlvbk1vZGU6
OkJCUU1vZGUgfTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXggeyBVSU5UX01B
WCB9OworICAgIGNvbnN0IFRpZXJVcENvdW50KiBtX3RpZXJVcCB7IG51bGxwdHIgfTsKKworICAg
IEIzOjpQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFzaWNCbG9j
ayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9yb290Qmxv
Y2sgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFR5cGVkVG1wPiBtX2xvY2FsczsKKyAgICBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8v
IExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNz
IGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisgICAgVmVjdG9yPFRt
cCwgOD4gbV9mcmVlRlBUZW1wczsKKyAgICBWZWN0b3I8VG1wLCA4PiBtX2ZyZWVHUFRlbXBzOwor
CisgICAgVHlwZWRUbXAgbV9pbnN0YW5jZVZhbHVlOyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3Nv
ciBiZWxvdyB0byBlbnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVu
IHVzZWQuCisgICAgYm9vbCBtX3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBUeXBl
ZFRtcCBpbnN0YW5jZVZhbHVlKCkKKyAgICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUg
PSB0cnVlOworICAgICAgICByZXR1cm4gbV9pbnN0YW5jZVZhbHVlOworICAgIH0KKworICAgIHVp
bnQzMl90IG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OworCisgICAgQjM6OlBhdGNocG9p
bnRTcGVjaWFsKiBtX3BhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworfTsKKworLy8gTWVt
b3J5IGFjY2Vzc2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMs
IHdoZXJlYXMgdGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK2ludDMyX3Qg
QWlySVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0
ciwgdWludDMyX3Qgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zm
c2V0KSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSkpIHsKKyAgICAgICAgYXV0byBwcmV2aW91c1B0ciA9IHB0cjsKKyAgICAgICAgcHRy
ID0gZzY0KCk7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKG9mZnNldCksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKEFk
ZDY0LCBjb25zdGFudCwgcHJldmlvdXNQdHIsIHB0cik7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3Jl
V2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBibG9jaywgVHlwZWRUbXAgaW5zdGFuY2Up
Cit7CisgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICBhdXRvKiBwYXRj
aHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIGlmIChDQ2FsbEhlbHBl
cnM6OnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dT
Y3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01h
Y3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJ
bnN0YW5jZShwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNo
cG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJl
cnMgd2FzbUNvbnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwg
d2UgbmVlZCB0byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBUaGlzIHBy
ZXZlbnRzIHVzIGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11
dGFibGUgcGlubmVkIHJlZ2lzdGVyLgorICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpWb2lkKTsKKyAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5v
bmUoKTsKKyAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgZWZmZWN0cy5yZWFk
cyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZl
Y3RzOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUikpOworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gbV93
YXNtQ29udGV4dEluc3RhbmNlR1BSOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbSkgeworICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0
YW5jZUdQUik7CisgICAgfSk7CisgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQs
IFRtcCgpLCBpbnN0YW5jZSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJ
bnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlv
bk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3Vu
dCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSkKKyAgICA6IG1faW5mbyhpbmZvKQorICAgICwgbV9tb2RlKG1v
ZGUpCisgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCisgICAgLCBtX2Z1
bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKKyAgICAsIG1fdGllclVwKHRpZXJVcCkKKyAgICAs
IG1fcHJvYyhwcm9jZWR1cmUpCisgICAgLCBtX2NvZGUobV9wcm9jLmNvZGUoKSkKKyAgICAsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCit7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9jayA9IG1f
Y3VycmVudEJsb2NrOworCisgICAgLy8gRklYTUUgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGlu
IHJlZ2lzdGVycyBoZXJlIGlmIHRoZXJlJ3Mgbm8gbWVtb3J5LiBJdCBtYWtlcyB3YXNtIC0+IHdh
c20gdGh1bmtzIHNpbXBsZXIgZm9yIG5vdy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjYyMworICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVn
cyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisKKyAgICBtX21lbW9yeUJhc2VHUFIgPSBw
aW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgIG1fY29kZS5waW5SZWdpc3RlcihtX21l
bW9yeUJhc2VHUFIpOworCisgICAgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVn
cy53YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcjsKKyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RU
TFMoKSkKKyAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQ
Uik7CisKKyAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAg
QVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAgICAg
IG1fbWVtb3J5U2l6ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0
ZXI7CisgICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIG1fY29kZS5waW5SZWdpc3Rl
cihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CisgICAgfQorCisgICAgaWYgKHRocm93V2FzbUV4Y2Vw
dGlvbikKKyAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24o
dGhyb3dXYXNtRXhjZXB0aW9uKTsKKworICAgIGlmIChpbmZvLm1lbW9yeSkgeworICAgICAgICBz
d2l0Y2ggKG1fbW9kZSkgeworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5n
OgorICAgICAgICAgICAgLy8gTW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUg
ZG9uJ3QgZG8gYW4gZXhwbGljaXQKKyAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjayBiZWNh
dXNlIHRoZXkgY2FuIHJlbHkgb24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0CisgICAgICAgICAg
ICAvLyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBGYXVsdFNpZ25hbEhhbmRsZXIgbm9uZXRoZWxl
c3MgbmVlZHMgdGhlCisgICAgICAgICAgICAvLyB0aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNh
biBqdW1wIHRvIHRoYXQgdGh1bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6
c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtX2NvZGUuc2V0TnVtRW50cnlwb2ludHMoMSk7CisKKyAgICBHUFJSZWcg
Y29udGV4dEluc3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252
ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BS
OworCisgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRv
ciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4o
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAg
IGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOworCisgICAgICAgIHsKKyAgICAgICAgICAg
IEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNj
cmF0Y2goMCk7CisgICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBh
dGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOwor
ICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5j
YWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFn
Pihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAg
ICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IENoZWNrZWQ8aW50MzJfdD4gd2FzbUZyYW1lU2l6ZSA9IG1fY29kZS5mcmFtZVNpemUoKTsK
KyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1QYXJlbnRDaGVja1NpemUgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCAxMDI0KTsKKyAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RkOjptYXg8dWludDMyX3Q+KAorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBmb3IgZnVu
Y3Rpb25zIHRoYXQgYXJlIHRlcm1pbmFsIG5vZGVzIGluIHRoZSBjYWxsCisgICAgICAgICAgICAg
ICAgLy8gdHJlZSwgKGUuZyB0aGV5IGRvbid0IG1ha2UgYW55IGNhbGxzKSBhbmQgaGF2ZSBhIHNt
YWxsIGVub3VnaCBmcmFtZSBzaXplLiBUaGlzIHdvcmtzIGJ5CisgICAgICAgICAgICAgICAgLy8g
aGF2aW5nIGFueSBzdWNoIHRlcm1pbmFsIG5vZGUgaGF2ZSBpdHMgcGFyZW50IGNhbGxlciBpbmNs
dWRlIHNvbWUgZXh0cmEgc2l6ZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAvLyBvd24gY2hlY2sg
Zm9yIGl0LiBUaGUgZ29hbCBoZXJlIGlzIHR3b2ZvbGQ6CisgICAgICAgICAgICAgICAgLy8gMS4g
RW1pdCBsZXNzIGNvZGUuCisgICAgICAgICAgICAgICAgLy8gMi4gVHJ5IHRvIHNwZWVkIHRoaW5n
cyB1cCBieSBza2lwcGluZyBzdGFjayBjaGVja3MuCisgICAgICAgICAgICAgICAgbWluaW11bVBh
cmVudENoZWNrU2l6ZSwKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlk
ZSBzdGFjayBjaGVja3MgaW4gdGhlIFdhc20gLT4gRW1iZWRkZXIgY2FsbCBJQyBzdHViLiBTaW5j
ZSB0aGVzZSB3aWxsCisgICAgICAgICAgICAgICAgLy8gc3BpbGwgYWxsIGFyZ3VtZW50cyB0byB0
aGUgc3RhY2ssIHdlIGVuc3VyZSB0aGF0IGEgc3RhY2sgY2hlY2sgaGVyZSBjb3ZlcnMgdGhlCisg
ICAgICAgICAgICAgICAgLy8gc3RhY2sgdGhhdCBzdWNoIGEgc3R1YiB3b3VsZCB1c2UuCisgICAg
ICAgICAgICAgICAgKENoZWNrZWQ8dWludDMyX3Q+KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzKSAq
IHNpemVvZihSZWdpc3RlcikgKyBqc2NDYWxsaW5nQ29udmVudGlvbigpLmhlYWRlclNpemVJbkJ5
dGVzKCkpLnVuc2FmZUdldCgpCisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGNvbnN0IGlu
dDMyX3QgY2hlY2tTaXplID0gbV9tYWtlc0NhbGxzID8gKHdhc21GcmFtZVNpemUgKyBleHRyYUZy
YW1lU2l6ZSkudW5zYWZlR2V0KCkgOiB3YXNtRnJhbWVTaXplLnVuc2FmZUdldCgpOworICAgICAg
ICAgICAgYm9vbCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hl
Y2tTaXplKSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKKyAgICAgICAgICAgIGJvb2wg
bmVlZHNPdmVyZmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWlu
aW11bVBhcmVudENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CisKKyAgICAgICAgICAg
IC8vIFRoaXMgYWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYg
dGhlaXIgZnJhbWUgc2l6ZSBpcyB3aXRoaW4KKyAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRz
IHNpbmNlIHRoZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCisg
ICAgICAgICAgICBpZiAobmVlZHNPdmVyZmxvd0NoZWNrKSB7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9n
dWVTY3JhdGNoKDApOworCisgICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMo
KSkKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRl
eHRJbnN0YW5jZSk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKC1jaGVja1NpemUpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2Ny
YXRjaCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93
OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hlY2spKQorICAg
ICAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBl
cnM6OkFib3ZlLCBzY3JhdGNoLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpOworICAgICAg
ICAgICAgICAgIG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVs
b3csIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFRodW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJm
bG93RnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6
dXNlRmFzdFRMUygpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMg
bmVlZGVkLCBidXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0
LgorICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93
U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01h
Y3JvU2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRl
eHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDAsIFdURk1vdmUo
cHJvbG9ndWVHZW5lcmF0b3IpKTsKKworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsK
KyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0gZzY0KCk7CisgICAgICAgIC8vIEZJWE1FOiBXb3Vs
ZCBiZSBuaWNlIHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCisgICAg
ICAgIGFwcGVuZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNlKSwgbV9pbnN0YW5jZVZhbHVlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0geyBUbXAoY29udGV4dEluc3Rh
bmNlKSwgVHlwZTo6STY0IH07CisKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAg
bV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAg
IFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgbV9sb2NhbHNbaV0g
PSB0bXBGb3JUeXBlKHR5cGUpOworICAgIH0KKworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFp
cigpLmxvYWRBcmd1bWVudHMoc2lnbmF0dXJlLCBbJl0gKGNvbnN0IEFyZyYgYXJnLCB1bnNpZ25l
ZCBpKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAg
IGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgYXJnLCBtX2xvY2Fs
c1tpXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAg
ICAgICAgICBhcHBlbmQoTW92ZSwgYXJnLCBtX2xvY2Fsc1tpXSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZUZsb2F0
LCBhcmcsIG1fbG9jYWxzW2ldKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBhcmcsIG1fbG9jYWxzW2ld
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgZW1p
dFRpZXJVcENoZWNrKFRpZXJVcENvdW50OjpmdW5jdGlvbkVudHJ5RGVjcmVtZW50KCksIEIzOjpP
cmlnaW4oKSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUds
b2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
LCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBUeXBlZFRtcCBpbnN0YW5jZSwgQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmxvY2ss
IGluc3RhbmNlKTsKKworICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3Jl
Q2FjaGVkU3RhY2tMaW1pdDo6WWVzKSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMg
dGhlIHN0YWNrIGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0
aW9uIGlzLgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2Fz
dDxJbnN0YW5jZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFja0xpbWl0KCkpKSA9PSBzaXplb2YodWlu
dDY0X3QpLCAiIik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZv
cm0oSW5zdGFuY2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lk
dGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAg
IGF1dG8gdGVtcCA9IGc2NCgpOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YWRk
cihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNr
TGltaXQoKSksIHRlbXApOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YWRkcih0
ZW1wKSwgdGVtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgdGVtcCwgQXJnOjphZGRy
KGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7
CisgICAgfQorCisgICAgaWYgKCEhbWVtb3J5KSB7CisgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lz
dGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgICAg
ICBSZWdpc3RlclNldCBjbG9iYmVyczsKKyAgICAgICAgY2xvYmJlcnMuc2V0KHBpbm5lZFJlZ3Mt
PmJhc2VNZW1vcnlQb2ludGVyKTsKKyAgICAgICAgZm9yIChhdXRvIGluZm8gOiBwaW5uZWRSZWdz
LT5zaXplUmVnaXN0ZXJzKQorICAgICAgICAgICAgY2xvYmJlcnMuc2V0KGluZm8uc2l6ZVJlZ2lz
dGVyKTsKKworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9p
ZCk7CisgICAgICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOwor
ICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGVmZmVjdHMucmVh
ZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9
IGVmZmVjdHM7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlcnMpOworCisgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7
CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdp
c3RlcnM7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAg
ICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBj
b2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXpl
IHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXpl
T2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0
ZXIpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hw
b2ludCwgVG1wKCksIGluc3RhbmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6
OmVtaXRUaHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9uVHlwZSB0eXBl
KQoreworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQzMl90Pih0eXBlKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgYXV0byBqdW1w
VG9FeGNlcHRpb25TdHViID0gaml0Lmp1bXAoKTsKKworICAgIGppdC5hZGRMaW5rVGFzayhbanVt
cFRvRXhjZXB0aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRo
dW5rUHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICB9KTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hl
Y2tlZCA9IGNvdW50OworICAgIHRvdGFsQnl0ZXNDaGVja2VkICs9IG1fbG9jYWxzLnNpemUoKTsK
KyAgICB1aW50MzJfdCB0b3RhbEJ5dGVzOworICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCh0b3Rh
bEJ5dGVzQ2hlY2tlZC5zYWZlR2V0KHRvdGFsQnl0ZXMpID09IENoZWNrZWRTdGF0ZTo6RGlkT3Zl
cmZsb3cpIHx8ICFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxCeXRlcyksICJjYW4n
dCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFsQnl0ZXMsICIgbG9jYWxzIik7CisKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIGxvY2Fs
ID0gdG1wRm9yVHlwZSh0eXBlKTsKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxv
Y2FsKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgor
ICAgICAgICBjYXNlIFR5cGU6Okk2NDogeworICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCBsb2Nh
bCwgbG9jYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
eXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OiB7CisgICAgICAgICAgICBhdXRvIHRl
bXAgPSBnNjQoKTsKKyAgICAgICAgICAgIC8vIElFRUUgNzU0ICIwIiBpcyBqdXN0IGludDMyLzY0
IHplcm8uCisgICAgICAgICAgICBhcHBlbmQoWG9yNjQsIHRlbXAsIHRlbXApOworICAgICAgICAg
ICAgYXBwZW5kKHR5cGUgPT0gVHlwZTo6RjMyID8gTW92ZTMyVG9GbG9hdCA6IE1vdmU2NFRvRG91
YmxlLCB0ZW1wLCBsb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlw
ZQoreworICAgIHJldHVybiBhZGRDb25zdGFudChtX2N1cnJlbnRCbG9jaywgdHlwZSwgdmFsdWUp
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChCYXNpY0Jsb2NrKiBibG9j
aywgVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1ZSkgLT4gRXhwcmVzc2lvblR5cGUKK3sKKyAgICBh
dXRvIHJlc3VsdCA9IHRtcEZvclR5cGUodHlwZSk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIGFwcGVuZChibG9j
aywgTW92ZSwgQXJnOjpiaWdJbW0odmFsdWUpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFR5cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDogeworICAgICAgICBhdXRvIHRt
cCA9IGc2NCgpOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKHZhbHVl
KSwgdG1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCB0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUz
MlRvRmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwgdG1wLCByZXN1bHQpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9jYWxzLnNpemUoKSA9PSBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpKTsgLy8gV2UgaGFuZGxlIGFyZ3VtZW50cyBpbiB0aGUgcHJvbG9ndWUK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0udG1wKCkpOworICAgIHJlc3VsdCA9IHRtcEZvclR5
cGUobV9sb2NhbHNbaW5kZXhdLnR5cGUoKSk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlw
ZShtX2xvY2Fsc1tpbmRleF0udHlwZSgpKSwgbV9sb2NhbHNbaW5kZXhdLnRtcCgpLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFVucmVhY2hh
YmxlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVucmVh
Y2hhYmxlID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgdW5yZWFjaGFibGUtPnNldEdl
bmVyYXRvcihbdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBF
eGNlcHRpb25UeXBlOjpVbnJlYWNoYWJsZSk7CisgICAgfSk7CisgICAgdW5yZWFjaGFibGUtPmVm
ZmVjdHMudGVybWluYWwgPSB0cnVlOworICAgIGVtaXRQYXRjaHBvaW50KHVucmVhY2hhYmxlLCBU
bXAoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkR3Jv
d01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGludDMyX3QgKCpncm93TWVtb3J5KSh2b2lkKiwgSW5zdGFu
Y2UqLCBpbnQzMl90KSA9IFtdICh2b2lkKiBjYWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwg
aW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7CisgICAgICAgIGluc3RhbmNlLT5zdG9yZVRvcENh
bGxGcmFtZShjYWxsRnJhbWUpOworCisgICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICAgICAgYXV0byBncm93biA9IGluc3RhbmNlLT5tZW1vcnkoKS0+
Z3JvdyhQYWdlQ291bnQoZGVsdGEpKTsKKyAgICAgICAgaWYgKCFncm93bikgeworICAgICAgICAg
ICAgc3dpdGNoIChncm93bi5lcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jv
d0ZhaWxSZWFzb246OkludmFsaWREZWx0YToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93
RmFpbFJlYXNvbjo6SW52YWxpZEdyb3dTaXplOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdy
b3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICBjYXNlIE1lbW9y
eTo6R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgICAgIHJldHVybiAt
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQo
KTsKKyAgICB9OworCisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdENDYWxsKGdyb3dNZW1v
cnksIHJlc3VsdCwgVHlwZWRUbXAgeyBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBU
eXBlOjpJNjQgfSwgaW5zdGFuY2VWYWx1ZSgpLCBkZWx0YSk7CisgICAgcmVzdG9yZVdlYkFzc2Vt
Ymx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Ok5vLCBtX2luZm8ubWVtb3J5
LCBpbnN0YW5jZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRl
Y2x0eXBlKHN0YXRpY19jYXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2Yo
dWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisKKyAgICBhdXRvIHRl
bXAxID0gZzY0KCk7CisgICAgYXV0byB0ZW1wMiA9IGc2NCgpOworCisgICAgUkVMRUFTRV9BU1NF
UlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6
ZSgpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VW
YWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCB0ZW1wMSk7Cisg
ICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKKyAgICBzdGF0aWNfYXNzZXJ0
KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhv
bGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgYXBwZW5kKE1vdmUs
IEFyZzo6aW1tKDE2KSwgdGVtcDIpOworICAgIGFkZFNoaWZ0KFR5cGU6OkkzMiwgVXJzaGlmdDY0
LCB0ZW1wMSwgdGVtcDIsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcmVzdWx0LCByZXN1
bHQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c2V0TG9j
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgQVNTRVJUKG1fbG9jYWxzW2luZGV4XS50bXAoKSk7CisgICAgYXBwZW5kKG1vdmVP
cEZvclZhbHVlVHlwZShtX2xvY2Fsc1tpbmRleF0udHlwZSgpKSwgdmFsdWUsIG1fbG9jYWxzW2lu
ZGV4XS50bXAoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgVHlwZSB0eXBlID0gbV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7
CisKKyAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgYXV0byB0ZW1wID0gZzY0
KCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6
b2Zmc2V0T2ZHbG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6
YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSksIHRlbXAp
OworCisgICAgaW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVv
ZihSZWdpc3RlcikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3
aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZh
bHVlVHlwZSh0eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3VsdCk7CisgICAgZWxz
ZSB7CisgICAgICAgIGF1dG8gdGVtcDIgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YmlnSW1tKG9mZnNldCksIHRlbXAyKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwg
dGVtcCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFy
Zzo6YWRkcih0ZW1wKSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBBaXJJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gdGVtcCA9IGc2NCgpOworCisg
ICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9m
R2xvYmFscygpLCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5z
dGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpLCB0ZW1wKTsKKworICAg
IFR5cGUgdHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOworCisgICAgaW50MzJfdCBv
ZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOworICAg
IGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5
cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFs
dWUsIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byB0
ZW1wMiA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwg
dGVtcDIpOworICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAg
ICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1w
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFpcklSR2VuZXJhdG9y
OjpFeHByZXNzaW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50
ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXpl
T2ZPcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBhdXRv
IHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIsIHBvaW50ZXIsIHJlc3VsdCk7CisK
KyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tp
bmc6IHsKKyAgICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGws
IHdlIG11c3QgdGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRo
ZSBjdXJyZW50IG1lbW9yeSBzaXplLgorICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsK
KyAgICAgICAgQVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAg
ICAgIGF1dG8gdGVtcCA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpemVPZk9wZXJhdGlvbikgKyBvZmZzZXQgLSAxKSwgdGVt
cCk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgcmVzdWx0LCB0ZW1wKTsKKworICAgICAgICBlbWl0
Q2hlY2soWyZdIHsKKyAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDY0LCBudWxscHRyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIHRlbXAsIFRtcChtX21l
bW9yeVNpemVHUFIpKTsKKyAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRU
aHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNz
KTsKKyAgICAgICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVtb3J5
TW9kZTo6U2lnbmFsaW5nOiB7CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQgNEdp
QityZWR6b25lIGZvciB0aGlzIG1lbW9yeS4gT25seSB0aGUgdXNlci1hbGxvY2F0ZWQgcGFnZXMg
YXJlIGFkZHJlc3NhYmxlLCBjb250aWd1b3VzbHkgaW4gcmFuZ2UgWzAsIGN1cnJlbnRdLAorICAg
ICAgICAvLyBhbmQgZXZlcnl0aGluZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05FLiBXZSBkb24n
dCBuZWVkIHRvIHBlcmZvcm0gYW55IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0aGUgNEdpQiBy
YW5nZSBiZWNhdXNlIFdlYkFzc2VtYmx5IHJlZ2lzdGVyCisgICAgICAgIC8vIG1lbW9yeSBhY2Nl
c3NlcyBhcmUgMzItYml0LiBIb3dldmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyICsgb2Zmc2V0IGFj
Y2Vzc2VzIHBlcmZvcm0gdGhlIGFkZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBh
Y2Nlc3MgYWJvdmUKKyAgICAgICAgLy8gdGhlIDMyLWJpdCBsaW1pdCAodGhlIG9mZnNldCBpcyB1
bnNpZ25lZCAzMi1iaXQpLiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgb2Zmc2V0
cywgYW5kIHdlJ2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueQorICAgICAgICAvLyByZWdp
c3RlciArIGxhcmdlIG9mZnNldCBhY2Nlc3MuIFdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBiZSBn
ZW5lcmF0ZWQgZnJlcXVlbnRseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgY2hl
Y2sgdGhhdCByZWdpc3RlciArIGxhcmdlIG9mZnNldCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3JlZHpv
bmUgc2luY2UgdGhhdCdzIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lkIG92
ZXJmbG93aW5nIHRoZQorICAgICAgICAvLyBQUk9UX05PTkUgcmVnaW9uLCBidXQgaXQncyBiZXR0
ZXIgaWYgd2UgdXNlIGEgc21hbGxlciBpbW1lZGlhdGUgYmVjYXVzZSBpdCBjYW4gY29kZWdlbnMg
YmV0dGVyLiBXZSBrbm93IHRoYXQgYW55dGhpbmcgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAg
ICAvLyB0aGFuIHRoZSBkZWNsYXJlZCAnbWF4aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4gY29t
cGFyZSBhZ2FpbnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQgJ21heGlt
dW0nIHRoZW4gd2Ugc3RpbGwga25vdyB0aGF0CisgICAgICAgIC8vIGFueSBhY2Nlc3MgZXF1YWwg
dG8gb3IgZ3JlYXRlciB0aGFuIDRHaUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUgcmVk
em9uZS4KKyAgICAgICAgaWYgKG9mZnNldCA+PSBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0
ZXMoKSkgeworICAgICAgICAgICAgdWludDY0X3QgbWF4aW11bSA9IG1faW5mby5tZW1vcnkubWF4
aW11bSgpID8gbV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkuYnl0ZXMoKSA6IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAgICAgIGF1dG8gdGVtcCA9IGc2NCgpOwor
ICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzaXplT2ZPcGVyYXRpb24pICsgb2Zmc2V0IC0gMSksIHRlbXApOworICAgICAgICAgICAgYXBw
ZW5kKEFkZDY0LCByZXN1bHQsIHRlbXApOworICAgICAgICAgICAgYXV0byBzaXplTWF4ID0gYWRk
Q29uc3RhbnQoVHlwZTo6STY0LCBtYXhpbXVtKTsKKworICAgICAgICAgICAgZW1pdENoZWNrKFsm
XSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoNjQsIG51bGxwdHIsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgdGVtcCwgc2l6ZU1heCk7Cisg
ICAgICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2Vw
dGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAg
ICBhcHBlbmQoQWRkNjQsIFRtcChtX21lbW9yeUJhc2VHUFIpLCByZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBv
cCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
NjRMb2FkOFM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIHJldHVy
biAxOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQxNlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgIGNh
c2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBM
b2FkT3BUeXBlOjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKKyAg
ICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJM
b2FkOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6Cisg
ICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICByZXR1cm4gODsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFR5cGVkVG1wIEFp
cklSR2VuZXJhdG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBv
aW50ZXIsIHVpbnQzMl90IHVvZmZzZXQpCit7CisgICAgdWludDMyX3Qgb2Zmc2V0ID0gZml4dXBQ
b2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIFR5cGVkVG1wIGltbVRt
cDsKKyAgICBUeXBlZFRtcCBuZXdQdHI7CisgICAgVHlwZWRUbXAgcmVzdWx0OworCisgICAgYXV0
byBsb2FkQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9m
ZnNldCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mTG9hZE9wKG9wKSkpKQorICAgICAgICAgICAg
cmV0dXJuIEFyZzo6YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBpbW1UbXAgPSBnNjQo
KTsKKyAgICAgICAgbmV3UHRyID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJp
Z0ltbShvZmZzZXQpLCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIGltbVRtcCwgcG9p
bnRlciwgbmV3UHRyKTsKKyAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihuZXdQdHIpOworICAgIH07
CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6IHsK
KyAgICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOFNp
Z25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6IHsKKyAgICAgICAgcmVzdWx0ID0g
ZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGxv
YWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1
bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STMyTG9hZDhVOiB7CisgICAgICAgIHJlc3VsdCA9IGczMigpOworICAgICAgICBhcHBlbmRF
ZmZlY3RmdWwoTG9hZDgsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsKKyAgICAgICAgcmVzdWx0ID0g
ZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOCwgbG9hZEFyZygpLCByZXN1bHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQx
NlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChM
b2FkMTZTaWduZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogeworICAgICAgICBy
ZXN1bHQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQxNlNpZ25lZEV4dGVu
ZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRv
UHRyLCByZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9hZE9wVHlwZTo6STMyTG9hZDE2VTogeworICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAg
ICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAg
ICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTYsIGxvYWRB
cmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BU
eXBlOjpJMzJMb2FkOgorICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAgICAgYXBwZW5kRWZm
ZWN0ZnVsKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVTogeworICAgICAgICByZXN1bHQgPSBnNjQoKTsK
KyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6IHsK
KyAgICAgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChNb3ZlMzIs
IGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCBy
ZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDogeworICAgICAgICByZXN1bHQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5k
RWZmZWN0ZnVsKE1vdmUsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9IGYz
MigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTW92ZUZsb2F0LCBsb2FkQXJnKCksIHJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9h
ZDogeworICAgICAgICByZXN1bHQgPSBmNjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1v
dmVEb3VibGUsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmxvYWQo
TG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBv
aW50ZXIudG1wKCkuaXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWlu
dDMyX3Q+KG9mZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBF
dmVuIHRob3VnaCB0aGlzIGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFs
aWRhdGlvbiBlcnJvciwgc28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBy
dW50aW1lIGV4Y2VwdGlvbi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIGF1dG8qIHBhdGNoID0g
YWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3Ro
aXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVt
aXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSk7CisKKyAgICAgICAgLy8gV2Ugd29uJ3QgcmVhY2gg
aGVyZSwgc28gd2UganVzdCBwaWNrIGEgcmFuZG9tIHJlZy4KKyAgICAgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJMzJMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6Cisg
ICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAgICAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJMzJMb2FkOFU6CisgICAgICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICAgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgICAgICBjYXNl
IExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgorICAgICAgICAgICAgcmVz
dWx0ID0gZzY0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBl
OjpGMzJMb2FkOgorICAgICAgICAgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0
ID0gZjY0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAg
ICAgICByZXN1bHQgPSBlbWl0TG9hZE9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihw
b2ludGVyLCBvZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBvZmZzZXQpOworCisgICAgcmV0dXJu
IHsgfTsKK30KKworaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3Ap
Cit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoK
KyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHJldHVybiAxOworICAg
IGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0
U3RvcmUxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3Rv
cmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BU
eXBlOjpGMzJTdG9yZToKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6
STY0U3RvcmU6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIHJldHVy
biA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2lu
bGluZSB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZz
ZXQpCit7CisgICAgdWludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVyUGx1c09mZnNldChwb2lu
dGVyLCB1b2Zmc2V0KTsKKworICAgIFR5cGVkVG1wIGltbVRtcDsKKyAgICBUeXBlZFRtcCBuZXdQ
dHI7CisKKyAgICBhdXRvIHN0b3JlQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNW
YWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mU3RvcmVPcChvcCkp
KSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAg
ICAgaW1tVG1wID0gZzY0KCk7CisgICAgICAgIG5ld1B0ciA9IGc2NCgpOworICAgICAgICBhcHBl
bmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFk
ZDY0LCBpbW1UbXAsIHBvaW50ZXIsIG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIo
bmV3UHRyKTsKKyAgICB9OworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5
cGU6Okk2NFN0b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAgICAg
IGFwcGVuZChTdG9yZTgsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
MzJTdG9yZTE2OgorICAgICAgICBhcHBlbmQoU3RvcmUxNiwgdmFsdWUsIHN0b3JlQXJnKCkpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAg
IGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZTMyLCB2YWx1
ZSwgc3RvcmVBcmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6
Okk2NFN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZSwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAg
YXBwZW5kKE1vdmVGbG9hdCwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmVEb3Vi
bGUsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnN0
b3JlKFN0b3JlT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJU
KHBvaW50ZXIudG1wKCkuaXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8
dWludDMyX3Q+KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhN
RTogRXZlbiB0aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBh
IHZhbGlkYXRpb24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFz
IGEgcnVudGltZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBhdXRvKiB0aHJv
d0V4Y2VwdGlvbiA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICB0aHJvd0V4Y2Vw
dGlvbi0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dF
eGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7Cisg
ICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludCh0aHJvd0V4Y2VwdGlvbiwgVG1wKCkp
OworICAgIH0gZWxzZQorICAgICAgICBlbWl0U3RvcmVPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFy
ZVBvaW50ZXIocG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZhbHVlLCBvZmZz
ZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU2Vs
ZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhw
cmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIEFTU0VSVChub25aZXJvLnR5cGUoKSA9PSB6ZXJvLnR5cGUoKSk7CisgICAgcmVz
dWx0ID0gdG1wRm9yVHlwZShub25aZXJvLnR5cGUoKSk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZh
bHVlVHlwZShub25aZXJvLnR5cGUoKSksIG5vblplcm8sIHJlc3VsdCk7CisKKyAgICBCYXNpY0Js
b2NrKiBpc1plcm8gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51
YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1plcm8sIGNvbnRpbnVhdGlvbik7
CisKKyAgICBhcHBlbmQoaXNaZXJvLCBtb3ZlT3BGb3JWYWx1ZVR5cGUoemVyby50eXBlKCkpLCB6
ZXJvLCByZXN1bHQpOworICAgIGFwcGVuZChpc1plcm8sIEp1bXApOworICAgIGlzWmVyby0+c2V0
U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51
YXRpb247CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0
VGllclVwQ2hlY2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4gb3JpZ2luKQor
eworICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOworCisgICAgaWYgKCFtX3RpZXJVcCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byBjb3VudGRvd25QdHIgPSBnNjQoKTsKKyAgICBhdXRvIG9s
ZENvdW50ZG93biA9IGc2NCgpOworICAgIGF1dG8gbmV3Q291bnRkb3duID0gZzY0KCk7CisKKyAg
ICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ocmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obV90
aWVyVXApKSwgY291bnRkb3duUHRyKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY291
bnRkb3duUHRyKSwgb2xkQ291bnRkb3duKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNW
YWxpZEltbUZvcm0oZGVjcmVtZW50Q291bnQpKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBvbGRDb3Vu
dGRvd24sIG5ld0NvdW50ZG93bik7CisgICAgYXBwZW5kKFN1YjMyLCBBcmc6OmltbShkZWNyZW1l
bnRDb3VudCksIG5ld0NvdW50ZG93bik7CisgICAgYXBwZW5kKE1vdmUzMiwgbmV3Q291bnRkb3du
LCBBcmc6OmFkZHIoY291bnRkb3duUHRyKSk7CisKKyAgICBhdXRvKiBwYXRjaCA9IGFkZFBhdGNo
cG9pbnQoQjM6OlZvaWQpOworICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6
bm9uZSgpOworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBl
ZmZlY3RzLndyaXRlcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIHBhdGNoLT5lZmZlY3Rz
ID0gZWZmZWN0czsKKworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUsIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOworCisgICAg
ICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICB0aWVyVXAubGluaygmaml0KTsKKworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0
cmFQYWRkaW5nQnl0ZXMgPSAwOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9T
cGlsbCA9IHsgfTsKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGwuYWRkKEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2Vk
Rm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNl
cnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBleHRyYVBh
ZGRpbmdCeXRlcyk7CisKKyAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobV9mdW5jdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAg
ICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9m
U3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMp
OworICAgICAgICAgICAgaml0Lmp1bXAodGllclVwUmVzdW1lKTsKKworICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8Tm9QdHJUYWc+KGNhbGwpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRh
Zz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRv
cikuY29kZSgpKSk7CisKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKwor
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNoLCBUbXAoKSwgbmV3Q291bnRkb3duLCBvbGRDb3VudGRv
d24pOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFk
ZExvb3AoVHlwZSBzaWduYXR1cmUpCit7CisgICAgQmFzaWNCbG9jayogYm9keSA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworCisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNz
b3JzKGJvZHkpOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OworICAgIGVtaXRUaWVyVXBD
aGVjayhUaWVyVXBDb3VudDo6bG9vcERlY3JlbWVudCgpLCBvcmlnaW4oKSk7CisKKyAgICByZXR1
cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUp
LCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7Cit9CisKK0FpcklSR2VuZXJh
dG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1
cmUpCit7CisgICAgcmV0dXJuIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4oKSwgc2lnbmF0dXJlLCB0
bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fY29kZS5hZGRCbG9j
aygpKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjph
ZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEob3JpZ2lu
KCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OkJsb2NrLCBt
X2NvZGUuYWRkQmxvY2soKSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZElmKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgCisg
ICAgLy8gV2FzbSBib29scyBhcmUgaTMyLgorICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6
cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsK
KyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YWtlbiwgbm90VGFrZW4pOworCisg
ICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShvcmln
aW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6SWYsIGNv
bnRpbnVhdGlvbiwgbm90VGFrZW4pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiBjdXJyZW50U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhC
bG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAg
bV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworICAgIHJl
dHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZik7CisgICAgbV9j
dXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CisgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNv
bnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVz
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0g
MSk7CisgICAgaWYgKHJldHVyblZhbHVlcy5zaXplKCkpIHsKKyAgICAgICAgVG1wIHJldHVyblZh
bHVlR1BSID0gVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgVG1wIHJldHVy
blZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgc3dpdGNo
IChkYXRhLnNpZ25hdHVyZSgpKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAg
ICAgYXBwZW5kKE1vdmUzMiwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgICAgICBhcHBlbmQoUmV0MzIsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCByZXR1
cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXQ2NCwg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6
RjMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgcmV0dXJuVmFsdWVzWzBdLCByZXR1
cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJldHVyblZhbHVlRlBS
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAg
ICAgIGFwcGVuZChNb3ZlRG91YmxlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlRlBSKTsK
KyAgICAgICAgICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGFwcGVuZChSZXRW
b2lkKTsKKyAgICByZXR1cm4geyB9OworfQorCisvLyBOT1RFOiBBbGwgYnJhbmNoZXMgaW4gV2Fz
bSBhcmUgb24gMzItYml0IGludHMKKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENv
bnRyb2xEYXRhJiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVl
c1dpdGhCbG9jayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0Rm9yQnJhbmNoKCkpOworCisgICAg
QmFzaWNCbG9jayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOworICAgIGlm
IChjb25kaXRpb24pIHsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0LCBjb250aW51YXRpb24pOworICAg
ICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhcHBlbmQoSnVtcCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRh
cmdldCk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRy
b2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeVZh
bHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNbaV0tPnJlc3VsdEZvckJyYW5j
aCgpKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRlZmF1bHRU
YXJnZXQucmVzdWx0Rm9yQnJhbmNoKCkpOworCisgICAgLy8gRklYTUU6IEVtaXQgZWl0aGVyIGEg
anVtcCB0YWJsZSBvciBhIGJpbmFyeSBzd2l0Y2ggaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDUzCisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0
ID0gdGFyZ2V0c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIGF1dG8gY29uc3Rh
bnQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKGkpLCBjb25zdGFu
dCk7CisgICAgICAgIGFwcGVuZChCcmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCksIGNvbnN0YW50LCBjb25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
c2V0U3VjY2Vzc29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgYXBwZW5kKEp1bXApOworICAgIG1f
Y3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JC
cmFuY2goKSk7CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpl
bmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0
YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5j
b250cm9sRGF0YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywg
ZGF0YS5yZXN1bHQpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0
U3VjY2Vzc29ycyhkYXRhLmNvbnRpbnVhdGlvbik7CisKKyAgICByZXR1cm4gYWRkRW5kVG9VbnJl
YWNoYWJsZShlbnRyeSk7Cit9CisKKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJl
YWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29u
dHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBtX2N1cnJlbnRCbG9jayA9
IGRhdGEuY29udGludWF0aW9uOworCisgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6
SWYpIHsKKyAgICAgICAgYXBwZW5kKGRhdGEuc3BlY2lhbCwgSnVtcCk7CisgICAgICAgIGRhdGEu
c3BlY2lhbC0+c2V0U3VjY2Vzc29ycyhtX2N1cnJlbnRCbG9jayk7CisgICAgfQorCisgICAgZm9y
IChjb25zdCBhdXRvJiByZXN1bHQgOiBkYXRhLnJlc3VsdCkKKyAgICAgICAgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAvLyBUb3BMZXZlbCBkb2Vz
IG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2Ug
ZW1pdCBhIHJldHVybiBoZXJlLgorICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRv
cExldmVsKQorICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisgICAg
VHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBpZiAocmV0dXJu
VHlwZSAhPSBUeXBlOjpWb2lkKQorICAgICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHJldHVyblR5
cGUpOworCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21U
b1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOworCisgICAgaWYgKG1faW5m
by5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgp
KSB7CisgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1K
U0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOworCisg
ICAgICAgIGF1dG8gY3VycmVudEluc3RhbmNlID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3Zl
LCBpbnN0YW5jZVZhbHVlKCksIGN1cnJlbnRJbnN0YW5jZSk7CisKKyAgICAgICAgYXV0byB0YXJn
ZXRJbnN0YW5jZSA9IGc2NCgpOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBi
ZXR0ZXIgaXNlbCBoZXJlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkzOTk5CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShJbnN0
YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSksIHRhcmdldEluc3Rh
bmNlKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbnN0YW5jZVZhbHVlKCksIHRhcmdldEluc3Rh
bmNlKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcih0YXJnZXRJbnN0YW5jZSksIHRh
cmdldEluc3RhbmNlKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBpc1dhc21CbG9jayA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBpc0VtYmVkZGVyQmxvY2sgPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25k
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGFyZ2V0SW5zdGFuY2UsIHRhcmdldEluc3RhbmNl
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNXYXNtQmxvY2ssIGlz
RW1iZWRkZXJCbG9jayk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2lu
dCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIGNsb2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0
IGJlIGxlYXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNh
bGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5k
cyBjaGVja2luZy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBk
byB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisg
ICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86Omdl
dCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisgICAgICAgICAgICBW
ZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHdhc21DYWxsaW5n
Q29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQs
IHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAg
ICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNh
bGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rp
b25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICBlbWl0UGF0Y2hwb2ludChpc1dhc21CbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBX
VEZNb3ZlKHBhdGNoQXJncykpOworICAgICAgICAgICAgYXBwZW5kKGlzV2FzbUJsb2NrLCBKdW1w
KTsKKyAgICAgICAgICAgIGlzV2FzbUJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGp1bXBEZXN0aW5hdGlv
biA9IGc2NCgpOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgTW92ZSwgQXJn
OjpiaWdJbW0oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5k
ZXgpKSwganVtcERlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxv
Y2ssIEFkZDY0LCBpbnN0YW5jZVZhbHVlKCksIGp1bXBEZXN0aW5hdGlvbik7CisgICAgICAgICAg
ICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBNb3ZlLCBBcmc6OmFkZHIoanVtcERlc3RpbmF0aW9u
KSwganVtcERlc3RpbmF0aW9uKTsKKworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFk
ZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNs
b2JiZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxl
YXZpbmcgdGhlIGluc3RhbmNlLgorICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlz
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRv
U2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisgICAgICAgICAgICBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQo
anVtcERlc3RpbmF0aW9uKTsKKworICAgICAgICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWly
KCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2hwb2ludCwgdG9UbXBWZWN0b3Io
YXJncyksIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgICAg
IHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGVdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZv
aWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgZW1pdFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBwYXRjaHBvaW50LCBy
ZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7CisgICAgICAgICAgICBhcHBlbmQoaXNFbWJlZGRl
ckJsb2NrLCBKdW1wKTsKKyAgICAgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBj
b250aW51YXRpb247CisgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90
aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91
ciBNZW1vcnkuCisgICAgICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVD
YWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGN1cnJlbnRJbnN0YW5jZSwgY29u
dGludWF0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRk
UGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5y
ZWFkc1Bpbm5lZCA9IHRydWU7CisKKyAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRj
aEFyZ3M7CisgICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2Nv
ZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0
bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0
bXAsIHJlcCB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlv
bkluZGV4IH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQ
YXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0
Y2hBcmdzKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0
KCk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkp
OworCisgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGluZGlyZWN0
IGNhbiBjYWxsIGVpdGhlciBXZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLiBCZWNhdXNlCisgICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gaXMg
bGlrZSBjYWxsaW5nIGludG8gdGhlIGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUg
YWxsIGNhbGwgaW5kaXJlY3RzCisgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3Vy
IHN0YWNrIGNoZWNrIGNhbGN1bGF0aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0g
c3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihh
cmdzLnNpemUoKSkpOworCisgICAgYXV0byBjdXJyZW50SW5zdGFuY2UgPSBnNjQoKTsKKyAgICBh
cHBlbmQoTW92ZSwgaW5zdGFuY2VWYWx1ZSgpLCBjdXJyZW50SW5zdGFuY2UpOworCisgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IGc2NCgpOworICAgIEV4cHJlc3Np
b25UeXBlIGluc3RhbmNlc0J1ZmZlciA9IGc2NCgpOworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxh
YmxlRnVuY3Rpb25CdWZmZXJMZW5ndGggPSBnNjQoKTsKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCksIEIz
OjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3Jt
KFRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMo
KSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRk
ckZvcm0oVGFibGU6Om9mZnNldE9mTGVuZ3RoKCksIEIzOjpXaWR0aDY0KSk7CisKKyAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRP
ZlRhYmxlKCkpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zm
c2V0T2ZGdW5jdGlvbnMoKSksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIpOworICAgICAgICBhcHBl
bmQoTW92ZSwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpv
ZmZzZXRPZkluc3RhbmNlcygpKSwgaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAgICAgYXBwZW5kKE1v
dmUzMiwgQXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfQorCisg
ICAgYXBwZW5kKE1vdmUzMiwgY2FsbGVlSW5kZXgsIGNhbGxlZUluZGV4KTsKKworICAgIC8vIENo
ZWNrIHRoZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCisgICAgZW1pdENoZWNr
KFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDMyLCBudWxscHRyLCBBcmc6OnJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNhbGxlZUluZGV4LCBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc0NhbGxJbmRpcmVjdCk7
CisgICAgfSk7CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gZzY0KCk7CisgICAg
eworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGc2NCgpOwor
ICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdl
IGFyZSBsb29raW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKHNpemVvZihX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgYXBwZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOwor
ICAgICAgICBhcHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIGNhbGxlZVNpZ25h
dHVyZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2Fs
bGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9m
RW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29kZSk7IC8vIFBvaW50ZXIgdG8gY2Fs
bGVlIGNvZGUuCisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFs
aWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KKyAgICAg
ICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQg
dGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5k
ZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQiKTsKKwor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBkdW1iIHRvIGRvIHR3byBjaGVja3MganVzdCBm
b3IgYSBuaWNlciBlcnJvciBtZXNzYWdlLgorICAgICAgICAvLyBXZSBzaG91bGQgbW92ZSBqdXN0
IHRvIHVzZSBhIHNpbmdsZSBicmFuY2ggYW5kIHRoZW4gZmlndXJlIG91dCB3aGF0CisgICAgICAg
IC8vIGVycm9yIHRvIHVzZSBpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuCisKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChTaWduYXR1cmU6OmludmFsaWRJbmRleCA9PSAwLCAiIik7CisgICAgICAgICAgICByZXR1
cm4gSW5zdChCcmFuY2hUZXN0NjQsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxl
cjo6WmVybyksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBjYWxsZWVTaWduYXR1cmVJbmRleCk7Cisg
ICAgICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0
LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CisgICAgICAgIH0pOworCisgICAgICAg
IEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBnNjQoKTsKKyAgICAgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlKSksIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBlbWl0Q2hlY2soWyZdIHsK
KyAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDY0LCBudWxscHRyLCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVk
U2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1p
dFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6QmFkU2lnbmF0dXJlKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgLy8gRG8gYSBjb250ZXh0IHN3aXRjaCBpZiBuZWVkZWQuCisg
ICAgeworICAgICAgICBhdXRvIG5ld0NvbnRleHRJbnN0YW5jZSA9IGc2NCgpOworICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjppbmRleChpbnN0YW5jZXNCdWZmZXIsIGNhbGxlZUluZGV4LCA4LCAw
KSwgbmV3Q29udGV4dEluc3RhbmNlKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRT
d2l0Y2ggPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0
aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0
YW5jZVZhbHVlKCkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24sIGRvQ29udGV4dFN3aXRjaCk7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9
IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndy
aXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUg
d2UncmUgY2FsbGluZyBzb21ldGhpbmcgd2l0aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNl
ID0gcGFyYW1zWzBdLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0YW5j
ZSA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5m
byYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgICAgICBj
b25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAg
ICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAg
ICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3Rh
bmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0
KCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4
dEluc3RhbmNlKTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIg
IT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQg
bW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlcgorICAgICAgICAgICAgLy8gICBzZWU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAg
ICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8g
TWVtb3J5IHNpemUuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSks
IGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQqLgorICAgICAgICB9KTsKKworICAgICAgICBl
bWl0UGF0Y2hwb2ludChkb0NvbnRleHRTd2l0Y2gsIHBhdGNocG9pbnQsIFRtcCgpLCBuZXdDb250
ZXh0SW5zdGFuY2UsIGluc3RhbmNlVmFsdWUoKSk7CisgICAgICAgIGFwcGVuZChkb0NvbnRleHRT
d2l0Y2gsIEp1bXApOworICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPnNldFN1Y2Nlc3NvcnMoY29u
dGludWF0aW9uKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAg
ICB9CisKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZUNvZGUpLCBjYWxsZWVDb2Rl
KTsKKworICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAg
aWYgKHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCkKKyAgICAgICAgcmVzdWx0ID0gdG1wRm9yVHlw
ZShyZXR1cm5UeXBlKTsKKworICAgIGF1dG8qIHBhdGNoID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlw
ZShyZXR1cm5UeXBlKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsK
KyAgICBwYXRjaC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgLy8gV2UgbmVlZCB0
byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBi
ZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1l
IHdlJ3JlIGFsd2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZyBz
bworICAgIC8vIGJlY2F1c2UgdGhlIHdhc20tPndhc20gdGh1bmsgdW5jb25kaXRpb25hbGx5IG92
ZXJyaWRlcyB0aGUgc2l6ZSByZWdpc3RlcnMuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3Qg
aGF2ZSB0byBkbyB0aGlzLCBidXQgdGhlIHdhc20tPndhc20gc3R1YiBhc3N1bWVzIGl0IGNhbgor
ICAgIC8vIHVzZSBhbGwgdGhlIHBpbm5lZCByZWdpc3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgIHBhdGNoLT5jbG9iYmVy
TGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZykpOworCisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBlbWl0QXJnczsKKyAgICBl
bWl0QXJncy5hcHBlbmQoY2FsbGVlQ29kZSk7CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWly
KCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2gsIHRvVG1wVmVjdG9yKGFyZ3Mp
LCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgZW1pdEFyZ3MuYXBw
ZW5kKHsgdG1wLCByZXAgfSk7CisgICAgfSk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8g
MCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgIH0pOworCisgICAgZW1pdFBhdGNo
cG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIFdURk1vdmUoZW1pdEFyZ3MpKTsK
KworICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5
IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCisgICAg
cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Olll
cywgbV9pbmZvLm1lbW9yeSwgY3VycmVudEluc3RhbmNlLCBtX2N1cnJlbnRCbG9jayk7CisKKyAg
ICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeShjb25zdCBFeHBy
ZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKQoreworICAgIEFT
U0VSVChkc3QudHlwZSgpID09IHNvdXJjZS50eXBlKCkpOworICAgIGFwcGVuZChtb3ZlT3BGb3JW
YWx1ZVR5cGUoZHN0LnR5cGUoKSksIHNvdXJjZSwgZHN0KTsKK30KKwordm9pZCBBaXJJUkdlbmVy
YXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0
YWNrLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXpl
KCkgPD0gcmVzdWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAt
IDEgLSBpXSwgcmVzdWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsKK30KKwor
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNv
bnN0IEV4cHJlc3Npb25MaXN0KikKK3sKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6b3JpZ2lu
KCkgLT4gQjM6Ok9yaWdpbgoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW1wbGVtZW50IGEg
d2F5IHRvIGdpdmUgSW5zdCdzIGFuIG9yaWdpbi4KKyAgICByZXR1cm4gQjM6Ok9yaWdpbigpOwor
fQorCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0
LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
TWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1
ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVy
RW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNv
bXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0Nh
bGxIZWxwZXJzPigpOworCisgICAgQjM6OlByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQ29kZSYg
Y29kZSA9IHByb2NlZHVyZS5jb2RlKCk7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRl
cihbXSAoUHJpbnRTdHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYg
KG9yaWdpbi5kYXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2Vf
Y2FzdDxPcGNvZGVPcmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMg
bWVhbnMgd2UgY2Fubm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2Vk
UmVnaXN0ZXJzKCkgb3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAg
Ly8gZG9uJ3Qgc3RyaWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCks
IHdoaWNoIHNhdmVzIGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAg
ICBwcm9jZWR1cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKKyAgICAKKyAgICBwcm9j
ZWR1cmUuc2V0T3B0TGV2ZWwoY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJR
TW9kZQorICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwo
KQorICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7
CisKKyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3Vs
dC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwg
ZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7Cisg
ICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVu
Y3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CisKKworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQorICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvckJs
b2NrKGkpLT5hZGRQcmVkZWNlc3NvcihibG9jayk7CisgICAgfQorCisgICAgeworICAgICAgICBC
Mzo6QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihjb2RlKTsKKyAgICAgICAgQjM6OkFpcjo6Z2Vu
ZXJhdGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisgICAg
ICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1
cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwor
ICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBJbnRUeXBlPgordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2
KGJvb2wgaXNTaWduZWREaXYsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJp
Z2h0KQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09IDQgfHwgc2l6ZW9m
KEludFR5cGUpID09IDgsICIiKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICByZXR1
cm4gSW5zdChzaXplb2YoSW50VHlwZSkgPT0gNCA/IEJyYW5jaFRlc3QzMiA6IEJyYW5jaFRlc3Q2
NCwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgcmlnaHQsIHJp
Z2h0KTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0
LCBFeGNlcHRpb25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CisgICAgfSk7CisKKyAgICBpZiAoaXNT
aWduZWREaXYpIHsKKyAgICAgICAgQVNTRVJUKHN0ZDo6aXNfc2lnbmVkPEludFR5cGU+Ojp2YWx1
ZSk7CisgICAgICAgIEludFR5cGUgbWluID0gc3RkOjpudW1lcmljX2xpbWl0czxJbnRUeXBlPjo6
bWluKCk7CisKKyAgICAgICAgLy8gRklYTUU6IEJldHRlciBpc2VsIGZvciBjb21wYXJlIHdpdGgg
aW1tcyBoZXJlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkzOTk5CisgICAgICAgIGF1dG8gbWluVG1wID0gc2l6ZW9mKEludFR5cGUpID09IDQg
PyBnMzIoKSA6IGc2NCgpOworICAgICAgICBhdXRvIG5lZ09uZSA9IHNpemVvZihJbnRUeXBlKSA9
PSA0ID8gZzMyKCkgOiBnNjQoKTsKKworICAgICAgICBCMzo6QWlyOjpPcGNvZGUgb3AgPSBzaXpl
b2YoSW50VHlwZSkgPT0gNCA/IENvbXBhcmUzMiA6IENvbXBhcmU2NDsKKyAgICAgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtaW4pKSwgbWluVG1wKTsK
KyAgICAgICAgYXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwg
bGVmdCwgbWluVG1wLCBtaW5UbXApOworCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSgt
MSksIG5lZ09uZSk7CisgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCksIHJpZ2h0LCBuZWdPbmUsIG5lZ09uZSk7CisKKyAgICAgICAgZW1pdENoZWNr
KFsmXSB7CisgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIG1pblRtcCwgbmVnT25lKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2Vw
dGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6OkludGVnZXJPdmVyZmxvdyk7CisgICAgICAgIH0pOwor
ICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+Cit2b2lkIEFpcklSR2VuZXJh
dG9yOjplbWl0TW9kT3JEaXYoYm9vbCBpc0RpdiwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNz
aW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoSW50VHlwZSkgPT0gNCB8fCBzaXplb2YoSW50VHlwZSkgPT0gOCwgIiIpOworCisg
ICAgcmVzdWx0ID0gc2l6ZW9mKEludFR5cGUpID09IDQgPyBnMzIoKSA6IGc2NCgpOworCisgICAg
Ym9vbCBpc1NpZ25lZCA9IHN0ZDo6aXNfc2lnbmVkPEludFR5cGU+Ojp2YWx1ZTsKKworICAgIGlm
IChpc0FSTTY0KCkpIHsKKyAgICAgICAgQjM6OkFpcjo6T3Bjb2RlIGRpdjsKKyAgICAgICAgc3dp
dGNoIChzaXplb2YoSW50VHlwZSkpIHsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgZGl2
ID0gaXNTaWduZWQgPyBEaXYzMiA6IFVEaXYzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDg6CisgICAgICAgICAgICBkaXYgPSBpc1NpZ25lZCA/IERpdjY0IDogVURpdjY0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoZGl2LCBsaHMs
IHJocywgcmVzdWx0KTsKKworICAgICAgICBpZiAoIWlzRGl2KSB7CisgICAgICAgICAgICBhcHBl
bmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBNdWwzMiA6IE11bDY0LCByZXN1bHQsIHJocywgcmVz
dWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChzaXplb2YoSW50VHlwZSkgPT0gNCA/IFN1YjMyIDog
U3ViNjQsIGxocywgcmVzdWx0LCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgVG1wIGVheChYODZS
ZWdpc3RlcnM6OmVheCk7CisgICAgVG1wIGVkeChYODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICBp
ZiAoaXNTaWduZWQpIHsKKyAgICAgICAgQjM6OkFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdv
cmQ7CisgICAgICAgIEIzOjpBaXI6Ok9wY29kZSBkaXY7CisgICAgICAgIHN3aXRjaCAoc2l6ZW9m
KEludFR5cGUpKSB7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJs
ZVdvcmQgPSBYODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7CisgICAgICAgICAgICBkaXYgPSBYODZE
aXYzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBj
b252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAg
IGRpdiA9IFg4NkRpdjY0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2UgaW1wbGVtZW50ICJyZXMgPSBEaXY8Q2hpbGw+L01vZDxDaGlsbD4obnVtLCBk
ZW4pIiBhcyBmb2xsb3dzOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgaWYgKGRlbiArIDEg
PD1fdW5zaWduZWQgMSkgeworICAgICAgICAvLyAgICAgICAgIGlmICghZGVuKSB7CisgICAgICAg
IC8vICAgICAgICAgICAgIHJlcyA9IDA7CisgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9u
ZTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAgICAgIC8vICAgICAgICAgaWYgKG51bSA9PSAt
MjE0NzQ4MzY0OCkgeworICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSBpc0RpdiA/IG51bSA6
IDA7CisgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgLy8gICAgICAg
ICB9CisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8vICAgICByZXMgPSBudW0gKC8gb3IgJSkg
ZGV2OworICAgICAgICAvLyBkb25lOgorCisgICAgICAgIEJhc2ljQmxvY2sqIGRlbklzR29vZCA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkZW5NYXlCZUJhZCA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkZW5Ob3RaZXJvID0gbV9jb2Rl
LmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5h
ZGRCbG9jaygpOworCisgICAgICAgIGF1dG8gdGVtcCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8g
ZzMyKCkgOiBnNjQoKTsKKyAgICAgICAgYXV0byBvbmUgPSBhZGRDb25zdGFudChzaXplb2YoSW50
VHlwZSkgPT0gNCA/IFR5cGU6OkkzMiA6IFR5cGU6Okk2NCwgMSk7CisKKyAgICAgICAgYXBwZW5k
KHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQWRkMzIgOiBBZGQ2NCwgcmhzLCBvbmUsIHRlbXApOwor
ICAgICAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBCcmFuY2gzMiA6IEJyYW5jaDY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgdGVtcCwgb25lKTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGVuSXNHb29kLCBkZW5NYXlCZUJhZCk7
CisKKyAgICAgICAgYXBwZW5kKGRlbk1heUJlQmFkLCBYb3I2NCwgcmVzdWx0LCByZXN1bHQpOwor
ICAgICAgICBhcHBlbmQoZGVuTWF5QmVCYWQsIHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQnJhbmNo
VGVzdDMyIDogQnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8p
LCByaHMsIHJocyk7CisgICAgICAgIGRlbk1heUJlQmFkLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVh
dGlvbiwgZGVuTm90WmVybyk7CisKKyAgICAgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChkZW5O
b3RaZXJvLCBzaXplb2YoSW50VHlwZSkgPT0gNCA/IFR5cGU6OkkzMiA6IFR5cGU6Okk2NCwgc3Rk
OjpudW1lcmljX2xpbWl0czxJbnRUeXBlPjo6bWluKCkpOworICAgICAgICBpZiAoaXNEaXYpCisg
ICAgICAgICAgICBhcHBlbmQoZGVuTm90WmVybywgc2l6ZW9mKEludFR5cGUpID09IDQgPyBNb3Zl
MzIgOiBNb3ZlLCBtaW4sIHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8g
UmVzdWx0IGlzIHplcm8sIGFzIHNldCBhYm92ZS4uLgorICAgICAgICB9CisgICAgICAgIGFwcGVu
ZChkZW5Ob3RaZXJvLCBzaXplb2YoSW50VHlwZSkgPT0gNCA/IEJyYW5jaDMyIDogQnJhbmNoNjQs
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBsaHMsIG1pbik7CisgICAgICAg
IGRlbk5vdFplcm8tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBkZW5Jc0dvb2QpOworCisg
ICAgICAgIGF1dG8gZGl2UmVzdWx0ID0gaXNEaXYgPyBlYXggOiBlZHg7CisgICAgICAgIGFwcGVu
ZChkZW5Jc0dvb2QsIE1vdmUsIGxocywgZWF4KTsKKyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwg
Y29udmVydFRvRG91YmxlV29yZCwgZWF4LCBlZHgpOworICAgICAgICBhcHBlbmQoZGVuSXNHb29k
LCBkaXYsIGVheCwgZWR4LCByaHMpOworICAgICAgICBhcHBlbmQoZGVuSXNHb29kLCBzaXplb2Yo
SW50VHlwZSkgPT0gNCA/IE1vdmUzMiA6IE1vdmUsIGRpdlJlc3VsdCwgcmVzdWx0KTsKKyAgICAg
ICAgYXBwZW5kKGRlbklzR29vZCwgSnVtcCk7CisgICAgICAgIGRlbklzR29vZC0+c2V0U3VjY2Vz
c29ycyhjb250aW51YXRpb24pOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0
aW9uOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQjM6OkFpcjo6T3Bjb2RlIGRpdiA9
IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gWDg2VURpdjMyIDogWDg2VURpdjY0OworCisgICAgVG1w
IGRpdlJlc3VsdCA9IGlzRGl2ID8gZWF4IDogZWR4OworCisgICAgYXBwZW5kKE1vdmUsIGxocywg
ZWF4KTsKKyAgICBhcHBlbmQoWG9yNjQsIGVkeCwgZWR4KTsKKyAgICBhcHBlbmQoZGl2LCBlYXgs
IGVkeCwgcmhzKTsKKyAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBNb3ZlMzIgOiBN
b3ZlLCBkaXZSZXN1bHQsIHJlc3VsdCk7CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlw
ZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IGVtaXRDaGVja3NGb3JNb2RPckRpdjxpbnQzMl90Pih0cnVlLCBsZWZ0LCByaWdodCk7CisgICAg
ZW1pdE1vZE9yRGl2PGludDMyX3Q+KHRydWUsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyUmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hl
Y2tzRm9yTW9kT3JEaXY8aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9k
T3JEaXY8aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyRGl2VT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9y
TW9kT3JEaXY8dWludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2
PHVpbnQzMl90Pih0cnVlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJl
bVU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9y
RGl2PHVpbnQzMl90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjx1aW50
MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4o
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8
aW50NjRfdD4odHJ1ZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjxpbnQ2NF90Pih0
cnVlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Np
b25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PGludDY0X3Q+
KGZhbHNlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PGludDY0X3Q+KGZhbHNlLCBs
ZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBl
IGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQ2NF90PihmYWxz
ZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjx1aW50NjRfdD4odHJ1ZSwgbGVmdCwg
cmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjx1aW50NjRfdD4oZmFsc2UsIGxl
ZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8dWludDY0X3Q+KGZhbHNlLCBsZWZ0LCByaWdo
dCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hw
b2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
ID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3MzMihwYXJhbXNbMV0uZ3By
KCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
Q3R6PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50
NjQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50
VHJhaWxpbmdaZXJvczY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9
KTsKKyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBy
ZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGczMigpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBv
cnRzQ291bnRQb3B1bGF0aW9uKCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBh
dGNocG9pbnQoQjM6OkludDMyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpF
ZmZlY3RzOjpub25lKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgIGppdC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChw
YXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2Vu
ZGlmCisKKyAgICB1aW50MzJfdCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZh
bHVlKSAtPiB1aW50MzJfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9Owor
ICAgIGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9w
Y250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnNjQoKTsKKworI2lmIENQVShYODZfNjQpCisgICAg
aWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAg
IGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1
bGF0aW9uNjQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsK
KyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgorCisgICAgdWludDY0X3QgKCpwb3Bjb3VudCko
aW50NjRfdCkgPSBbXSAoaW50NjRfdCB2YWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gX19idWls
dGluX3BvcGNvdW50bGwodmFsdWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0
LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2lu
dC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJl
Z2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNv
bnZlcnRVSW50NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFy
YW1zLmdwU2NyYXRjaCgwKSk7CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91
YmxlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOwor
ICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3Vs
dCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBw
YXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICBw
YXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAg
ICBqaXQuY29udmVydFVJbnQ2NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnBy
KCksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50
NjRUb0Zsb2F0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAg
IH0pOworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJs
ZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0
ID0gZjY0KCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFk
ZFBhdGNocG9pbnQoQjM6OkZsb2F0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVm
ZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgIGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCks
IHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgZW1p
dFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1
bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3Vi
bGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5k
VG93YXJkWmVyb0RvdWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAg
fSk7CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwg
cmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBh
dGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFd
LmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGYzMigpOwor
ICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpG
NjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgYXV0byBtaW4gPSBhZGRDb25zdGFu
dChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKworICAgIGF1dG8gdGVtcDEg
PSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3Vi
bGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3Jk
ZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIp
OworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaFRlc3Qz
MiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIs
IHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1
dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBn
MzIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25zdGFu
dChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0Pihz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBhdXRvIG1pbiA9IGFk
ZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxm
bG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisKKyAgICBhdXRv
IHRlbXAxID0gZzMyKCk7CisgICAgYXV0byB0ZW1wMiA9IGczMigpOworICAgIGFwcGVuZChDb21w
YXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5P
clVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwg
QXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0
ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNo
VGVzdDMyLCBudWxscHRyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0
ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2Vw
dGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisg
ICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQz
MihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0
ID0gZzMyKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOwor
ICAgIHJldHVybiB7IH07Cit9CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRkQ29u
c3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJs
ZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOworICAgIGF1
dG8gbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0x
LjApKTsKKworICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7
CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOwor
ICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsK
KyAgICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0gewor
ICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZC
b3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludChCMzo6SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6
bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0u
Z3ByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGczMigpOworICAgIGVtaXRQYXRjaHBvaW50
KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1pbigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIGF1dG8gbWluID0gYWRk
Q29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZs
b2F0PigtMS4wKSkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIg
PSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRl
bXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRl
bXAyKTsKKyAgICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhb
Jl0geworICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVz
Q29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRk
UGF0Y2hwb2ludChCMzo6SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZm
ZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgaml0LnRydW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBhdXRvIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptaW4oKSkpKTsKKyAgICBhdXRvIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwg
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAg
IGF1dG8gdGVtcDIgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3Vi
bGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSwgYXJnLCBt
aW4sIHRlbXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywg
bWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0
Q2hlY2soWyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBudWxscHRyLCBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAg
IH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlv
blR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0byogcGF0Y2hwb2lu
dCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworCisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwg
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50NjRfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBhdXRvIG1pbiA9IGFkZENvbnN0
YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CisgICAgCisgICAg
YXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNz
VGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENv
bXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRl
clRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChP
cjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJldHVy
biBJbnN0KEJyYW5jaFRlc3QzMiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5l
bWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsK
KyAgICB9KTsKKworICAgIFR5cGVkVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYo
KSkgeworICAgICAgICAvLyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRv
IGNvbnZlcnQgZmxvYXRpbmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFz
dCB0cnkgdG8gZG8gdGhlIHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJzIGFy
ZSB3b3VsZCBiZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2Ug
Y2Fubm90IG1hdGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAor
ICAgICAgICAvLyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJp
dENvbnN0YW50ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgp
IC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorCisgICAg
VmVjdG9yPENvbnN0cmFpbmVkVG1wPiBhcmdzOworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZl
Y3RzOjpub25lKCk7CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNYODYoKSkgewor
ICAgICAgICBhcmdzLmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAgICAgICBwYXRjaHBvaW50
LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlk
RlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAg
ICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2go
MCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQor
ICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFt
c1swXS5ncHIoKSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0pOworCisgICAgcmVzdWx0ID0g
ZzY0KCk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJl
c3VsdCwgV1RGTW92ZShhcmdzKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGF1dG8gbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCkpKSk7CisgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1pbigpKSkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIg
PSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOwor
ICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOwor
ICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgIHJldHVybiBJbnN0KEJyYW5jaFRlc3QzMiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpu
b25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3By
KCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBh
dGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVz
c2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgYXV0byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50
MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1p
bigpKSAqIHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIGF1dG8gbWluID0gYWRkQ29u
c3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0
PigtMS4wKSkpOworICAgIAorICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAy
ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWluLCB0
ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0
ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2so
WyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBudWxscHRyLCBBcmc6OnJl
c0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6
Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgVHlwZWRUbXAgc2lnbkJpdENvbnN0
YW50OworICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhh
dmUgYW4gaW5zdHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQg
aW50ZWdlcnMsIHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAg
ICAgLy8gdGhlIG51bWJlcnMgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGlu
dGVnZXIuIFNpbmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdl
IGhhdmUgYjMgZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQu
CisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lz
ZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1
aW50NjRfdD46Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7
CisgICAgfQorCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0
KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBW
ZWN0b3I8Q29uc3RyYWluZWRUbXA+IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICBhcmdzLmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAg
ICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNj
cmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlk
RlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBh
cmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIo
KTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sx
XS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisK
KyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywg
cGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKGFyZ3MpKTsKKworICAgIHJldHVybiB7IH07Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KFR5cGUgdHlwZSwgQjM6OkFpcjo6T3Bj
b2RlIG9wLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQodHlwZSA9
PSBUeXBlOjpJNjQgfHwgdHlwZSA9PSBUeXBlOjpJMzIpOworICAgIHJlc3VsdCA9IHRtcEZvclR5
cGUodHlwZSk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwg
QXJnOjpUbXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICAKKyNpZiBDUFUoWDg2XzY0KQorICAgIFRt
cCBlY3ggPSBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpOworICAgIGFwcGVuZChNb3ZlLCB2YWx1ZSwg
cmVzdWx0KTsKKyAgICBhcHBlbmQoTW92ZSwgc2hpZnQsIGVjeCk7CisgICAgYXBwZW5kKG9wLCBl
Y3gsIHJlc3VsdCk7CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJbnRl
Z2VyU3ViKEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9u
VHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBBU1NFUlQob3AgPT0gU3ViMzIgfHwgb3AgPT0gU3ViNjQpOworCisgICAgcmVzdWx0ID0gb3Ag
PT0gU3ViMzIgPyBnMzIoKSA6IGc2NCgpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBBcmc6
OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIGxocywgcmhz
LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUKGlzWDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0g
YiBTdWIgYQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKG9wLCBy
aHMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRmxvYXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVM
RUFTRV9BU1NFUlQob3AgPT0gQWJzRmxvYXQgfHwgb3AgPT0gQWJzRG91YmxlKTsKKworICAgIHJl
c3VsdCA9IG9wID09IEFic0Zsb2F0ID8gZjMyKCkgOiBmNjQoKTsKKworICAgIGlmIChpc1ZhbGlk
Rm9ybShvcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIHZhbHVl
LCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUKGlzWDg2KCkpOworCisgICAgaWYgKG9wID09IEFic0Zsb2F0KSB7CisgICAgICAgIGF1dG8g
Y29uc3RhbnQgPSBnMzIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKHN0YXRpY19j
YXN0PHVpbnQzMl90Pih+KDF1bGwgPDwgMzEpKSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5k
KE1vdmUzMlRvRmxvYXQsIGNvbnN0YW50LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoQW5kRmxv
YXQsIHZhbHVlLCByZXN1bHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQg
PSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKH4oMXVsbCA8PCA2Mykp
LCBjb25zdGFudCk7CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgY29uc3RhbnQsIHJl
c3VsdCk7CisgICAgICAgIGFwcGVuZChBbmREb3VibGUsIHZhbHVlLCByZXN1bHQpOworICAgIH0K
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1Bv
aW50QmluT3AoVHlwZSB0eXBlLCBCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxo
cywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6RjMyIHx8IHR5cGUgPT0gVHlwZTo6
RjY0KTsKKyAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgaWYgKGlzVmFsaWRG
b3JtKG9wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQo
b3AsIGxocywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUKGlzWDg2KCkpOworCisgICAgLy8gT3AgYSwgYgorICAgIC8vIG1lYW5z
CisgICAgLy8gYiA9IGIgT3AgYQorICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSks
IGxocywgcmVzdWx0KTsKKyAgICBhcHBlbmQob3AsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyQ2VpbD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGFwcGVuZChDZWlsRmxv
YXQsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
NjRMZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOwor
ICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkRlbW90ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGFwcGVuZChD
b252ZXJ0RG91YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisKKyAgICBC
YXNpY0Jsb2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
bm90RXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhh
bk9yRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRp
b24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJh
bmNoRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBh
cmcwLCBhcmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBu
b3RFcXVhbCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vz
c29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3Vi
bGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAg
IG5vdEVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFs
KTsKKworICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVz
dWx0KTsKKyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVy
VGhhbk9yRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVu
dEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVE
b3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEx0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENv
bXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1Ro
YW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNYXg+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKworICAgIEJhc2ljQmxvY2sq
IGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisKKyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJs
ZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9j
dXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBw
ZW5kKGlzRXF1YWwsIEFuZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChp
c0VxdWFsLCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7
CisKKyAgICBhcHBlbmQobm90RXF1YWwsIE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBh
cHBlbmQobm90RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nl
c3NvcnMobGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1v
dmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAg
IGxlc3NUaGFuLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRC
bG9jayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNdWw+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGU6OkY2
NCwgTXVsRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChUeXBlOjpGMzIsIERp
dkZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMy
KCk7CisgICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkYzMkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8g
RklYTUU6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0
d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXV0byB0ZW1w
MSA9IGczMigpOworICAgIGF1dG8gc2lnbiA9IGczMigpOworICAgIGF1dG8gdmFsdWUgPSBnMzIo
KTsKKworICAgIC8vIEZJWE1FOiBUcnkgdG8gdXNlIEltbSB3aGVyZSBwb3NzaWJsZToKKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisgICAgYXBw
ZW5kKE1vdmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpi
aWdJbW0oMHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEsIHNpZ24s
IHNpZ24pOworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAg
YXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5k
KEFuZDMyLCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjMyLCBzaWduLCB2
YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2YWx1ZSwgcmVzdWx0KTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgp
OworICAgIGF1dG8gdGVtcCA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHRlbXAp
OworICAgIGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyUmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAg
ICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QW5k
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAg
YXBwZW5kKEFuZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVu
ZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEd0
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAg
YXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlR3JlYXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpk
b3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6
OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVx
ej4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChUZXN0NjQsIEFyZzo6
cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NERpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBh
ZGRGbG9hdGluZ1BvaW50QmluT3AoVHlwZTo6RjY0LCBEaXZEb3VibGUsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJBZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIo
KTsKKyAgICBhcHBlbmQoQWRkRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
Okk2NE9yPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7
CisgICAgYXBwZW5kKE9yNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkxl
VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAg
IGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVx
dWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTGVTPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBh
cmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDbHo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBl
bmQoQ291bnRMZWFkaW5nWmVyb3M2NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVn
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKE5lZ2F0
ZUZsb2F0LCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoTmVnYXRlRmxvYXQs
IGFyZzAsIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBhZGRD
b25zdGFudChUeXBlOjpJMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8Zmxv
YXQ+KC0wLjApKSk7CisgICAgICAgIGF1dG8gdGVtcCA9IGczMigpOworICAgICAgICBhcHBlbmQo
TW92ZUZsb2F0VG8zMiwgYXJnMCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChYb3IzMiwgY29uc3Rh
bnQsIHRlbXApOworICAgICAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdGVtcCwgcmVzdWx0KTsK
KyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChBbmQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyTHRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJv
dHI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlw
ZTo6STY0LCBSb3RhdGVSaWdodDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWJzPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRBYnMoQWJzRG91YmxlLCBhcmcwLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRT
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAg
YXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NENvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgLy8gRklYTUU6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1z
IGFuZCB0d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXV0
byB0ZW1wMSA9IGc2NCgpOworICAgIGF1dG8gc2lnbiA9IGc2NCgpOworICAgIGF1dG8gdmFsdWUg
PSBnNjQoKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMSwgdGVtcDEpOworICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwMDAwMDAwMDApLCBzaWduKTsKKyAg
ICBhcHBlbmQoQW5kNjQsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91
YmxlVG82NCwgYXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdm
ZmZmZmZmZmZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgdmFsdWUs
IHZhbHVlKTsKKworICAgIGFwcGVuZChPcjY0LCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFw
cGVuZChNb3ZlNjRUb0RvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29u
dmVydFNJNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoQ29udmVy
dEludDY0VG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90bD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgLy8g
QVJNNjQgZG9lc24ndCBoYXZlIGEgcm90YXRlIGxlZnQuCisgICAgICAgIGF1dG8gbmV3U2hpZnQg
PSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIGFyZzEsIG5ld1NoaWZ0KTsKKyAgICAgICAg
YXBwZW5kKE5lZzY0LCBuZXdTaGlmdCk7CisgICAgICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJ
NjQsIFJvdGF0ZVJpZ2h0NjQsIGFyZzAsIG5ld1NoaWZ0LCByZXN1bHQpOworICAgIH0gZWxzZQor
ICAgICAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STY0LCBSb3RhdGVMZWZ0NjQsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGMzJMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGczMigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGNjRDb252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVu
ZChDb252ZXJ0SW50MzJUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxlPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENv
bXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhh
bk9yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHZT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChD
b21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRl
clRoYW5PckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJ
MzIsIFVyc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTMyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXV0byB0ZW1wID0gZzY0KCk7CisgICAgYXBwZW5kKE1v
dmUzMiwgYXJnMCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQsIHRlbXAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBSc2hpZnQzMiwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGcz
MigpOworICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q2VpbD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDZWlsRG91YmxlLCBhcmcw
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJldHVybiBhZGRTaGlmdChUeXBlOjpJMzIsIExzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQp
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
Rmxvb3I+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoRmxvb3JEb3Vi
bGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlhvcj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChYb3IzMiwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFk
ZEZsb2F0aW5nUG9pbnRBYnMoQWJzRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKworICAgIEJhc2ljQmxvY2sq
IGlzRXF1YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9
IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29k
ZS5hZGRCbG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUs
IEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcx
KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7
CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgYXBwZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29u
dGludWF0aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVz
dWx0KTsKKyAgICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVx
dWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKwor
ICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7
CisgICAgYXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5P
ckVxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNdWw+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoTXVsRmxvYXQsIGFy
ZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFN1Yj4oRXhwcmVzc2lvblR5cGUgYXJn
MCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJldHVybiBhZGRJbnRlZ2VyU3ViKFN1YjY0LCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STMyUmVpbnRlcnByZXRGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBh
cHBlbmQoTW92ZUZsb2F0VG8zMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQWRkPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBw
ZW5kKEFkZDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTdWI+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9w
KFR5cGU6OkY2NCwgU3ViRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyT3I+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoT3IzMiwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0THRVPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRD
b252ZXJ0U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDb252
ZXJ0SW50NjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5k
KFhvcjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVU+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwg
RXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChNdWw2NCwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKFN1YkZsb2F0LCBB
cmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKFN1YkZsb2F0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChp
c1g4NigpKTsKKyAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICAg
ICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0
UHJvbW90ZUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDb252
ZXJ0RmxvYXRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWRkPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXBwZW5k
KEFkZERvdWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VTPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5k
KENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1
YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyTmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBnMzIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhcmcwICYmIGFyZzEpOworICAgIGFw
cGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRSZWludGVycHJldEk2ND4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgYXJnMCwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJs
ZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRmxvb3I+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoRmxvb3JGbG9hdCwgYXJn
MCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyRXF6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAg
YXBwZW5kKFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwg
YXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVpbnRlcnByZXRGNjQ+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STY0LCBSc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFNoclU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQo
VHlwZTo6STY0LCBVcnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTcXJ0PihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXBwZW5kKFNxcnREb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
dHVybiBhZGRTaGlmdChUeXBlOjpJNjQsIExzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBh
cHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2
ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJvdGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIC8vIEFSTTY0IGRvZXNuJ3QgaGF2ZSBh
IHJvdGF0ZSBsZWZ0LgorICAgICAgICBhdXRvIG5ld1NoaWZ0ID0gZzY0KCk7CisgICAgICAgIGFw
cGVuZChNb3ZlLCBhcmcxLCBuZXdTaGlmdCk7CisgICAgICAgIGFwcGVuZChOZWc2NCwgbmV3U2hp
ZnQpOworICAgICAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBSb3RhdGVSaWdodDMyLCBh
cmcwLCBuZXdTaGlmdCwgcmVzdWx0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGFkZFNo
aWZ0KFR5cGU6OkkzMiwgUm90YXRlTGVmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90cj4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJMzIs
IFJvdGF0ZVJpZ2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOwor
ICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyR3RTPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7
CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVh
dGVyVGhhbiksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVEb3VibGUs
IEFyZzo6VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAs
IHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBhZGRDb25zdGFu
dChUeXBlOjpJNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPigt
MC4wKSkpOworICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGVUbzY0LCBhcmcwLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBjb25zdGFudCwg
dGVtcCk7CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAg
ICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGY2NCgpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1
cnJlbnRCbG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nl
c3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZERvdWJs
ZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAg
aXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVx
dWFsLCBNb3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJh
bmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFu
KSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNv
bnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3VibGUsIGFyZzEsIHJl
c3VsdCk7CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3Vj
Y2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b247CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRMZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
MzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFk
ZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAg
IGFwcGVuZChBZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21w
aWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUm
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
VGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBDb250cm9sRGF0YTo6UmVzdWx0TGlzdCBSZXN1bHRMaXN0
OwogICAgIHR5cGVkZWYgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRy
eSBDb250cm9sRW50cnk7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVt
cHR5RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9u
VHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB0eXBlZGVm
IFN0cmluZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlwZT4gVW5l
eHBlY3RlZFJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRl
ICJXYXNtQWlySVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtMjcx
LDcgKzI3MiwxMSBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpCiAK
ICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVw
ID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rp
b25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1
bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwg
dGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQ7
CisgICAgICAgIGlmIChPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICAgICAgcGFy
c2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRpb25Db250
ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEu
c2l6ZSgpLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRl
eF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRD
b21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24uZGF0
YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1f
dGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29t
cGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxp
bmdDb252ZW50aW9uLmNwcAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIs
NiArNjIsMzYgQEAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZwogICAg
IHJldHVybiBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiB9CiAKK2NvbnN0IEpTQ0NhbGxp
bmdDb252ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxKU0NDYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGljSlNDQ2Fs
bGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY0pTQ0NhbGxp
bmdDb252ZW50aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNKU0NDYWxsaW5nQ29u
dmVudGlvbkZsYWcsIFtdICgpIHsKKyAgICAgICAgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb24u
Y29uc3RydWN0KFZlY3RvcjxSZWc+KCksIFZlY3RvcjxSZWc+KCksIFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0YXRpY0pTQ0NhbGxp
bmdDb252ZW50aW9uOworfQorCitjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21D
YWxsaW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxX
YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXI+IHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uRmxhZzsK
KyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnLCBbXSAo
KSB7CisgICAgICAgIFZlY3RvcjxSZWc+IGdwckFyZ3VtZW50UmVnaXN0ZXJzKEdQUkluZm86Om51
bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAgICAgICAg
Z3ByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7
CisKKyAgICAgICAgVmVjdG9yPFJlZz4gZnByQXJndW1lbnRSZWdpc3RlcnMoRlBSSW5mbzo6bnVt
YmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBm
cHJBcmd1bWVudFJlZ2lzdGVyc1tpXSA9IEZQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsK
KworICAgICAgICBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY29uc3RydWN0KFdURk1vdmUo
Z3ByQXJndW1lbnRSZWdpc3RlcnMpLCBXVEZNb3ZlKGZwckFyZ3VtZW50UmVnaXN0ZXJzKSwgUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4g
c3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAyNDA2
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCisjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgpAQCAtNDQsMjcgKzQ1LDI3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKLXR5cGVkZWYgdW5zaWduZWQgKCpOZXh0T2Zmc2V0KSh1bnNp
Z25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSB0eXBlKTsKK3R5cGVkZWYgdW5zaWduZWQgKCpO
ZXh0T2Zmc2V0KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KTsKIAogdGVtcGxhdGU8dW5zaWduZWQg
aGVhZGVyU2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CiBjbGFzcyBDYWxsaW5nQ29udmVu
dGlvbiB7CiBwdWJsaWM6CiAgICAgQ2FsbGluZ0NvbnZlbnRpb24oVmVjdG9yPFJlZz4mJiBncHJB
cmdzLCBWZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lz
dGVycykKLSAgICAgICAgOiBtX2dwckFyZ3MoZ3ByQXJncykKLSAgICAgICAgLCBtX2ZwckFyZ3Mo
ZnByQXJncykKLSAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoY2FsbGVlU2F2ZVJlZ2lz
dGVycykKKyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBt
X2ZwckFyZ3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3Rl
cnMoV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0b3I8UmVnPiByZWdB
cmdzLCBCMzo6VHlwZSB0eXBlLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBj
b25zdAorICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChjb25zdCBWZWN0b3I8
UmVnPiYgcmVnQXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIEIzOjpWYWx1ZVJlcDo6cmVnKHJlZ0FyZ3NbY291bnQrK10pOwogCiAgICAgICAgIGNv
dW50Kys7CiAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFsdWVSZXA6OnN0YWNr
QXJndW1lbnQoc3RhY2tPZmZzZXQpOwotICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNl
dChzdGFja09mZnNldCwgdHlwZSk7CisgICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0
KHN0YWNrT2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTczLDEw
ICs3NCwxMCBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2Fz
ZSBCMzo6SW50MzI6CiAgICAgICAgIGNhc2UgQjM6OkludDY0OgotICAgICAgICAgICAgcmV0dXJu
IG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgdHlwZSwgZ3BBcmd1bWVudENvdW50LCBz
dGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9n
cHJBcmdzLCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAgICAgY2FzZSBCMzo6
RmxvYXQ6CiAgICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAgICAgICAgIHJldHVybiBtYXJz
aGFsbEFyZ3VtZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJn
cywgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CiAgICAgICAgIGNhc2UgQjM6OlZvaWQ6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTg5LDE5ICsxOTAsMTQ2IEBAIHB1
YmxpYzoKICAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7CiB9Owog
Ci1pbmxpbmUgdW5zaWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBC
Mzo6VHlwZSkKKy8vIEZJWE1FOiBTaGFyZSBtb3JlIGNvZGUgd2l0aCBDYWxsaW5nQ29udmVudGlv
biBhYm92ZToKKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQw
NjUKK3RlbXBsYXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0
PgorY2xhc3MgQ2FsbGluZ0NvbnZlbnRpb25BaXIgeworcHVibGljOgorICAgIENhbGxpbmdDb252
ZW50aW9uQWlyKFZlY3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBS
ZWdpc3RlclNldCYmIGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKFdU
Rk1vdmUoZ3ByQXJncykpCisgICAgICAgICwgbV9mcHJBcmdzKFdURk1vdmUoZnByQXJncykpCisg
ICAgICAgICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUoY2FsbGVlU2F2ZVJlZ2lzdGVy
cykpCisgICAgeworICAgICAgICBSZWdpc3RlclNldCBzY3JhdGNoID0gUmVnaXN0ZXJTZXQ6OmFs
bEdQUnMoKTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVkZShSZWdpc3RlclNldDo6cmVz
ZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lz
dGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9ncHJB
cmdzKQorICAgICAgICAgICAgc2NyYXRjaC5jbGVhcihyZWcpOworICAgICAgICBmb3IgKFJlZyBy
ZWcgOiBtX2NhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgICAgICBzY3JhdGNoLmNsZWFyKHJl
Zyk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IHNjcmF0Y2gpCisgICAgICAgICAgICBtX3NjcmF0
Y2hHUFJzLmFwcGVuZChyZWcpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NjcmF0Y2hHUFJz
LnNpemUoKSA+PSAyKTsKKyAgICB9CisKKyAgICBHUFJSZWcgcHJvbG9ndWVTY3JhdGNoKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBtX3NjcmF0Y2hHUFJzW2ldLmdwcigpOyB9CisKK3ByaXZhdGU6
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0YWNrRnVuYz4KKyAg
ICB2b2lkIG1hcnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBz
aXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdGdW5jJiByZWdGdW5j
LCBjb25zdCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChj
b3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICByZWdGdW5jKHJlZ0FyZ3NbY291
bnQrK10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY291bnQr
KzsKKyAgICAgICAgc3RhY2tGdW5jKHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgc3RhY2tPZmZzZXQg
PSB1cGRhdGVPZmZzZXQoc3RhY2tPZmZzZXQpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBSZWdGdW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAgdm9pZCBtYXJzaGFsbEFyZ3Vt
ZW50KFR5cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291bnQsIHNpemVfdCYgZnBBcmd1bWVu
dENvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdGdW5jJiByZWdGdW5jLCBjb25z
dCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6Cisg
ICAgICAgICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1lbnRDb3Vu
dCwgc3RhY2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVuYyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAg
ICAgICAgbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0
YWNrT2Zmc2V0LCByZWdGdW5jLCBzdGFja0Z1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGljIHVuc2lnbmVkIGhlYWRlclNp
emVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGxvYWRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBzaXpl
X3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9
IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRlclNpemU7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBncEFy
Z3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsCisgICAgICAgICAgICAg
ICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoQjM6OkFpcjo6
VG1wKHJlZyksIGkpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgWyZdIChz
aXplX3Qgc3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihCMzo6QWly
OjpBcmc6OmFkZHIoQjM6OkFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgc3Rh
Y2tPZmZzZXQpLCBpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3RvciBzZXRzIHRoZSBn
ZW5lcmF0b3IgZm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgc2V0dXBDYWxsKEIzOjpBaXI6OkNvZGUmIGNvZGUsIFR5cGUgcmV0
dXJuVHlwZSwgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCwgY29uc3QgVmVjdG9yPEIz
OjpBaXI6OlRtcD4mIGFyZ3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgewor
ICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJn
dW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRlclNpemUg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgZm9yIChhdXRvIHRtcCA6IGFy
Z3MpIHsKKyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQodG1wLmlzR1AoKSA/IFR5cGU6Okk2
NCA6IFR5cGU6OkY2NCwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zm
c2V0LAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAg
ICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpyZWcocmVnKSk7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09mZnNldCkgeworICAgICAgICAg
ICAgICAgICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0YWNr
T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBjb2Rl
LnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisKKyAgICAgICAgcGF0Y2hwb2lu
dC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lz
dGVyc0ZvckpTQ2FsbCgpKTsKKworICAgICAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICAg
ICAgY2FzZSBUeXBlOjpWb2lkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PnJlc3VsdENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJlZyhGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAg
ICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3Ry
YWludCA9IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxS
ZWc+IG1fZ3ByQXJnczsKKyAgICBjb25zdCBWZWN0b3I8UmVnPiBtX2ZwckFyZ3M7CisgICAgVmVj
dG9yPFJlZz4gbV9zY3JhdGNoR1BSczsKKyAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlZVNh
dmVSZWdpc3RlcnM7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJz
OworfTsKKworaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWduZWQgY3VycmVudE9m
ZnNldCkKIHsKICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNpemVvZihSZWdpc3Rlcik7CiB9
CiAKIGNvbnN0ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0gRXhlY1N0YXRlOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwotdHlwZWRlZiBDYWxsaW5nQ29udmVu
dGlvbjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0NDYWxsaW5nQ29udmVudGlvbjsK
LQotdHlwZWRlZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiAK
K3VzaW5nIEpTQ0NhbGxpbmdDb252ZW50aW9uID0gQ2FsbGluZ0NvbnZlbnRpb248anNjSGVhZGVy
U2l6ZSwgbmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2FsbGluZ0NvbnZlbnRpb24gPSBKU0ND
YWxsaW5nQ29udmVudGlvbjsKIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc2NDYWxsaW5n
Q29udmVudGlvbigpOwogY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKTsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXIgPSBDYWxsaW5nQ29u
dmVudGlvbkFpcjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3VzaW5nIFdhc21DYWxs
aW5nQ29udmVudGlvbkFpciA9IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyOworY29uc3QgSlNDQ2Fs
bGluZ0NvbnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9uQWlyKCk7Citjb25zdCBXYXNt
Q2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpOworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmgJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMTAgKzMzMywxMCBAQCBhdXRv
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgICAgICBhcmdzLnVu
Y2hlY2tlZEFwcGVuZChtX2V4cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCi0gICAgICAgIEV4cHJlc3Npb25U
eXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgRXhwcmVzc2lv
blR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKCk7CiAgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJl
LCBhcmdzLCByZXN1bHQpKTsKIAotICAgICAgICBpZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5
RXhwcmVzc2lvbikKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Np
b24oKSkKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCiAg
ICAgICAgIHJldHVybiB7IH07CkBAIC0zNjIsMTAgKzM2MiwxMCBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVu
ZChtX2V4cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmlu
ayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9
IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKCk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwog
Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQorICAgICAg
ICBpZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbigpKQogICAgICAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsK
QEAgLTQwOSw3ICs0MDksNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlCiAgICAgY2FzZSBCcjoKICAgICBjYXNlIEJySWY6IHsKICAgICAgICAgdWludDMyX3QgdGFy
Z2V0OwotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24gPSBDb250ZXh0OjplbXB0eUV4
cHJlc3Npb247CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiA9IENvbnRleHQ6OmVt
cHR5RXhwcmVzc2lvbigpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YXJnZXQpLCAiY2FuJ3QgZ2V0IGJyIC8gYnJfaWYncyB0YXJnZXQiKTsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRih0YXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpLCAiYnIg
LyBicl9pZidzIHRhcmdldCAiLCB0YXJnZXQsICIgZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUg
IiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudE9wY29kZSA9
PSBCcklmKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7CiAgICAg
dHlwZWRlZiBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT46OkNvbnRyb2xFbnRyeSBDb250cm9sRW50
cnk7CiAKLSAgICBzdGF0aWMgY29uc3QgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0g
Vm9pZDsKKyAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lv
bigpIHsgcmV0dXJuIFZvaWQ7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgog
ICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWls
KEFyZ3MuLi4gYXJncykgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360655</attachid>
            <date>2019-01-30 17:11:41 -0800</date>
            <delta_ts>2019-01-30 18:46:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>179391</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwNzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3MSBA
QAorMjAxOS0wMS0zMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbV2ViQXNzZW1ibHldIENoYW5nZSBCQlEgdG8gZ2VuZXJhdGUgQWlyIElSCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE4MDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3NjUxNzE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBXYXNtIGNvbXBpbGVyIGZvciB0
aGUgQkJRIHRpZXIuIEluc3RlYWQKKyAgICAgICAgb2YgY29tcGlsaW5nIHVzaW5nICBCMy0wMSwg
d2Ugbm93IGdlbmVyYXRlIEFpciBjb2RlIGRpcmVjdGx5LgorICAgICAgICBUaGUgZ29hbCBvZiBk
b2luZyB0aGlzIHdhcyB0byBzcGVlZCB1cCBjb21waWxlIHRpbWVzIGZvciBXYXNtCisgICAgICAg
IHByb2dyYW1zLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBwcm92aWRlcyB1cyB3aXRo
IGEgMjAtMzAlIGNvbXBpbGUgdGltZSBzcGVlZHVwLiBIb3dldmVyLCBJCisgICAgICAgIGhhdmUg
aWRlYXMgb24gaG93IHRvIGltcHJvdmUgY29tcGlsZSB0aW1lcyBldmVuIGZ1cnRoZXIuIEZvciBl
eGFtcGxlLAorICAgICAgICB3ZSBzaG91bGQgcHJvYmFibHkgaW1wbGVtZW50IGEgZmFzdGVyIHJ1
bm5pbmcgcmVnaXN0ZXIgYWxsb2NhdG9yOgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDM2CisgICAgICAgIAorICAgICAgICBXZSBjYW4gYWxzbyBp
bXByb3ZlIG9uIHRoZSBjb2RlIHdlIGdlbmVyYXRlLgorICAgICAgICBXZSBzaG91bGQgZW1pdCBi
ZXR0ZXIgY29kZSBmb3IgU3dpdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MDUzCisgICAgICAgIEFuZCB3ZSBzaG91bGQgZG8gYmV0dGVyIGluc3RydWN0aW9u
IHNlbGVjdGlvbiBpbiB2YXJpb3VzCisgICAgICAgIGFyZWFzOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwu
aDoKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUpOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6
CisgICAgICAgICogYjMvYWlyL0FpclRtcC5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OlRtcCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6Q29uc3RyYWlu
ZWRUbXA6OkNvbnN0cmFpbmVkVG1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6OlR5
cGVkVG1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlZFRtcDo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OlR5cGVkVG1wOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VHlwZWRUbXA6Om9wZXJhdG9yIFRtcCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVkVG1wOjpvcGVyYXRvciBBcmcgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUeXBlZFRtcDo6dG1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6OnR5
cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERh
dGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNv
bnRyb2xEYXRhOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpzaWduYXR1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6Omhhc05vblZvaWRTaWduYXR1cmUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnRh
cmdldEJsb2NrRm9yQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OkNvbnRyb2xEYXRhOjpjb252ZXJ0SWZUb0Jsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpyZXN1bHRGb3JCcmFuY2ggY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmZhaWwgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6c2V0UGFyc2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OnRvVG1wVmVjdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OnJlbGVhc2VUbXApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
dmFsaWRhdGVJbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmV4dHJh
Y3RBcmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YXBwZW5kKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFwcGVuZEVmZmVjdGZ1bCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6ZzMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6Omc2NCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpmMzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZjY0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OnRtcEZvclR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjplbWl0UGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
ZW1pdENDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6Om1vdmVPcEZv
clZhbHVlVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjppbnN0YW5j
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmZpeHVwUG9pbnRl
clBsdXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6cmVzdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6ZW1pdFRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpnZXRMb2Nh
bCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcik6CisgICAgICAgIChKU0M6Oldhc206
OnNpemVPZkxvYWRPcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0
TG9hZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmxvYWQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpzaXplT2ZTdG9yZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmVtaXRTdG9yZU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFNl
bGVjdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hl
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUb3BMZXZlbCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRFbHNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVs
c2VUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZFJldHVybik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRCcmFuY2gp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkU3dpdGNoKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
dW5pZnlWYWx1ZXNXaXRoQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpvcmlnaW4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRNb2RPckRpdik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlM+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVtUz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZVPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
RGl2Uz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRSZW1TPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NERpdlU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0UmVtVT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRQb3BjbnQ+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPEY2NENvbnZlcnRVSTY0Pik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0
Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NE5lYXJlc3Q+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjMyTmVhcmVzdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpGNjRUcnVuYz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJUcnVuYz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjMyPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUY2
ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJUcnVuY1VGMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRTaGlmdCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3ViKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRBYnMpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRpbmdQb2ludEJpbk9wKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJNdWw+KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3Vi
Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NExlPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkRlbW90ZUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpGMzJNaW4+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0TmU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0THQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWF4Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE11bD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJEaXY+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6Pik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvcHlzaWduPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRV
STMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMlJlaW50ZXJwcmV0STMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NEFuZD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0Pik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEdlPik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEd0Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFU+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RXF6Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NERpdj4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBZGQ+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
T3I+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyTGVVPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMkxlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjROZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRDbHo+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyTmVnPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMkFuZD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJMdFU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90cj4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRBYnM+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRTPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NENvcHlzaWduPik6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNv
bnZlcnRTSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFJvdGw+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyTHQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTGU+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR2U+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUkzMj4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJT
aHJTPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMkdlVT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjRDZWlsPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkdlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJTaGw+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0Rmxvb3I+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyWG9yPik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkFicz4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTXVsPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFN1Yj4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZWludGVycHJl
dEYzMj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJBZGQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6RjY0U3ViPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMk9yPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEx0VT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRMdFM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q29udmVydFNJNjQ+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEdlVT4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRNdWw+KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3ViPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFByb21v
dGVGMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0QWRkPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEdlUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk5lPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFJlaW50ZXJwcmV0STY0Pik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkVxPik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxPik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkZsb29yPik6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNv
bnZlcnRTSTMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkVxej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRSZWludGVycHJldEY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJTPik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0U3FydD4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaGw+KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2
ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJSb3RsPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlJvdHI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyR3RVPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NEV4dGVuZFNJMzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RTPik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNYXg+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TGVVPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlUz4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRBZGQ+KToKKyAg
ICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKiB3YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgICog
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpqc2ND
YWxsaW5nQ29udmVudGlvbkFpcik6CisgICAgICAgIChKU0M6Oldhc206Ondhc21DYWxsaW5nQ29u
dmVudGlvbkFpcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OkNhbGxpbmdDb252ZW50aW9uKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnRJ
bXBsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNo
YWxsQXJndW1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlv
bkFpcjo6Q2FsbGluZ0NvbnZlbnRpb25BaXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5n
Q29udmVudGlvbkFpcjo6cHJvbG9ndWVTY3JhdGNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Q2FsbGluZ0NvbnZlbnRpb25BaXI6Om1hcnNoYWxsQXJndW1lbnRJbXBsIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb25BaXI6Om1hcnNoYWxsQXJndW1lbnQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlvbkFpcjo6aGVhZGVy
U2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlvbkFpcjo6
bG9hZEFyZ3VtZW50cyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50
aW9uQWlyOjpzZXR1cENhbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpuZXh0SlNDT2Zm
c2V0KToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRl
OjplbXB0eUV4cHJlc3Npb24pOgorCiAyMDE5LTAxLTMwICBUYWRldSBaYWdhbGxvICA8dHphZ2Fs
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENhY2hlZEJ5dGVjb2RlJ3MgbW92ZSBjb25zdHJ1Y3Rv
ciBzaG91bGQgbm90IGNhbGwgYGZyZWVEYXRhSWZPd25lZGAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcxLDYgKzk3MSw3IEBAIHRvb2xzL0pTRG9s
bGFyVk0uY3BwCiB0b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNwZWN0
b3IuY3BwCiAKK3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBAbm8tdW5pZnkKIHdhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCiB3YXNtL1dhc21CQlFQbGFuLmNwcAogd2FzbS9XYXNtQmluZGlu
Zy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDA2OTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODc3LDEwICs4NzcsMTIgQEAKIAkJNTI2NzhG
OEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZE
IC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxv
d1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFDNEI3MUU5
NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNv
ZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4
NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0
QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdD
IC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBl
TG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYx
QUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGlt
ZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIz
ODYgLyogVHlwZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTJDQTNFQUMyMjAyODE4NTAwRkM5RTY0IC8qIFdhc21BaXJJUkdlbmVy
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCAqLzsgfTsK
IAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1
QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAqLzsgfTsK
IAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwQTY2QjExRkEzRTc3
QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICovOyB9OwogCQk1MzBBNjZCQTFGQTNF
NzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTQtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCODFGQTNFNzdFMDAyNkE1NDUgLyogVW5p
ZmllZFNvdXJjZTQtbW0ubW0gKi87IH07CkBAIC0zMzU4LDYgKzMzNjAsOCBAQAogCQk1MjZBQzRC
NDFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTI2QUM0QjUxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2RlQmxvY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvZGVCbG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjc3NzNERDFBQUY4M0FDMDBCREU3RTggLyogUnVudGlt
ZVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVudGltZVR5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Mjg0N0FEOTIxRkZCODYzMDA2
MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21B
aXJJUkdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyODQ3QURB
MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbUFpcklSR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjMx
MEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyQjMxMEZDMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMzEwRkUxOTc1QjQyNDAwODA4NTdD
IC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVMb2NhdGlv
bkNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MzQsNiArNjQzOCw4
IEBACiAJCQkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICovLAogCQkJCTUzRjQwRThF
MUQ1OTAyODIwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5jcHAgKi8sCiAJCQkJNTNGNDBF
OTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCisJCQkJNTI4NDdB
RDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi8sCisJCQkJNTI4
NDdBREEyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovLAogCQkJCTUz
Q0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8sCiAJCQkJNTNDQTcz
MDgxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggKi8sCiAJCQkJNTNGOEQxRkYxRTgz
ODdENDAwRDIxMTE2IC8qIFdhc21CQlFQbGFuSW5saW5lcy5oICovLApAQCAtODUyOSw2ICs4NTM1
LDcgQEAKIAkJCQk0MzZFNTQ1MzFDNDY4RTc0MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9m
ZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBC
M0xvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzE5REEwNDFDMUJFNDBEMDAxRDI2
MEIgLyogQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDNBQjI2QzYxQzFBNTM1OTAwRDgyQUU2IC8qIEIzTWF0aEV4
dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1NDAsNiArMTA1NDcsNyBAQAogCQkJ
CTUzNkIzMTlBMUY3MzVFNzgwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTUzNkIzMTVGMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE5QjFGNzM1RTc4MDAzN0ZDMzMgLyogVW5pZmll
ZFNvdXJjZTItbW0ubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MkNBM0VBQzIyMDI4MTg1MDBGQzlF
NjQgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTU3
MUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlMi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MzZCMzE1ODFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTMu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNjYsOCArMzM2Niw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBUbXAgcmV0dXJuVmFsdWVGUFIgPSBUbXAoRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOwogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIFZvaWQ6Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIGZv
ciBhIHZvaWQgdmFsdWUgdG8gYmUgdXNlZCBhcyBhIGNoaWxkLiBJZiB3ZSBkaWQgd2FudCB0byBo
YXZlIGEKLSAgICAgICAgICAgICAgICAvLyB2b2lkIHJldHVybiwgd2UnZCBpbnRyb2R1Y2UgYSBk
aWZmZXJlbnQgb3Bjb2RlLCBsaWtlIFJldHVyblZvaWQuCisgICAgICAgICAgICAgICAgLy8gSXQn
cyBpbXBvc3NpYmxlIGZvciBhIHZvaWQgdmFsdWUgdG8gYmUgdXNlZCBhcyBhIGNoaWxkLiBXZSB1
c2UgUmV0Vm9pZAorICAgICAgICAgICAgICAgIC8vIGZvciB2b2lkIHJldHVybnMuCiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyU2V0IGV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKEFpcjo6SW5zdCYpIGZpbmFsOwogICAgIFJlZ2lzdGVyU2V0IGV4dHJhQ2xvYmJl
cmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsKIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMg
bm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2Ug
aGF2ZSBtYW55IHNvbWUKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBn
ZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueQogICAg
IC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KICAgICB2b2lkIGZvckVhY2hBcmdJ
bXBsKAogICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQWlyQXJncywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNw
cAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgQ29kZTo6fkNvZGUoKQog
ewogfQogCit2b2lkIENvZGU6OmVtaXREZWZhdWx0UHJvbG9ndWUoQ0NhbGxIZWxwZXJzJiBqaXQp
Cit7CisgICAgZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yKGppdCwgKnRoaXMpOworfQorCiB2b2lk
IENvZGU6OnNldFJlZ3NJblByaW9yaXR5T3JkZXIoQmFuayBiYW5rLCBjb25zdCBWZWN0b3I8UmVn
PiYgcmVncykKIHsKICAgICByZWdzSW5Qcmlvcml0eU9yZGVySW1wbChiYW5rKSA9IHJlZ3M7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjQwNjk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJTZXQgcGlubmVkUmVn
aXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdzOyB9CiAgICAgCiAgICAgV2Vha1Jh
bmRvbSYgd2Vha1JhbmRvbSgpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbTsgfQorCisgICAgdm9pZCBl
bWl0RGVmYXVsdFByb2xvZ3VlKENDYWxsSGVscGVycyYpOwogICAgIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgOjpKU0M6OkIzOjpQcm9jZWR1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xh
c3MgQ29kZTsKIAogY2xhc3MgVG1wIHsKIHB1YmxpYzoKLSAgICBUbXAoKQorICAgIGNvbnN0ZXhw
ciBUbXAoKQogICAgICAgICA6IG1fdmFsdWUoMCkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjQwNjk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OTUsNiArNDk1LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgog
ICAgIHYoYm9vbCwgY3Jhc2hJZldlYkFzc2VtYmx5Q2FudEZhc3RNZW1vcnksIGZhbHNlLCBOb3Jt
YWwsICJJZiB0cnVlLCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGNhbid0IG9idGFpbiBmYXN0IG1lbW9y
eSBmb3Igd2FzbS4iKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4TnVtV2ViQXNzZW1ibHlGYXN0TWVt
b3JpZXMsIDQsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlRmFzdFRMU0Zvcldh
c21Db250ZXh0LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIHN0b3JlIGNvbnRleHQg
aW4gZmFzdCBUTFMuIElmIGZhbHNlLCB3ZSB3aWxsIHBpbiBpdCB0byBhIHJlZ2lzdGVyLiIpIFwK
KyAgICB2KGJvb2wsIHdhc21CQlFVc2VzQWlyLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHVzZVdlYkFzc2VtYmx5U3RyZWFtaW5nQXBpLCBlbmFibGVXZWJBc3NlbWJseVN0
cmVhbWluZ0FwaSwgTm9ybWFsLCAiQWxsb3cgdG8gcnVuIFdlYkFzc2VtYmx5J3MgU3RyZWFtaW5n
IEFQSSIpIFwKICAgICB2KGJvb2wsIHVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscywg
dHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCB1c2UgQ2FsbExpbmtJbmZvIHRvIGlubGlu
ZSBjYWNoZSBXYXNtIHRvIEpTIGNhbGxzLiIpIFwKICAgICB2KGJvb2wsIHVzZUVhZ2VyV2ViQXNz
ZW1ibHlNb2R1bGVIYXNoaW5nLCBmYWxzZSwgTm9ybWFsLCAiVW5uYW1lZCBXZWJBc3NlbWJseSBt
b2R1bGVzIGFyZSBpZGVudGlmaWVkIGluIGJhY2t0cmFjZXMgdGhyb3VnaCB0aGVpciBoYXNoLCBp
ZiBhdmFpbGFibGUuIikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21BaXJJUkdlbmVyYXRvci5oIgor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1
ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRl
ICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZUlmLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDaGVja1NwZWNp
YWwuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNs
dWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0
aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgIldh
c21JbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtT01H
UGxhbi5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlIDxsaW1p
dHM+CisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKKwordXNpbmcgbmFtZXNwYWNlIEIzOjpBaXI7CisKK3N0cnVjdCBDb25zdHJhaW5lZFRt
cCB7CisgICAgQ29uc3RyYWluZWRUbXAoVG1wIHRtcCkKKyAgICAgICAgOiBDb25zdHJhaW5lZFRt
cCh0bXAsIHRtcC5pc1JlZygpID8gQjM6OlZhbHVlUmVwOjpyZWcodG1wLnJlZygpKSA6IEIzOjpW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgIHsgfQorCisgICAgQ29uc3RyYWluZWRUbXAoVG1w
IHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkKKyAgICAgICAgOiB0bXAodG1wKQorICAgICAgICAsIHJl
cChyZXApCisgICAgeworICAgIH0KKworICAgIFRtcCB0bXA7CisgICAgQjM6OlZhbHVlUmVwIHJl
cDsKK307CisKK2NsYXNzIFR5cGVkVG1wIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgVHlwZWRU
bXAoKQorICAgICAgICA6IG1fdG1wKCkKKyAgICAgICAgLCBtX3R5cGUoVHlwZTo6Vm9pZCkKKyAg
ICB7IH0KKworICAgIFR5cGVkVG1wKFRtcCB0bXAsIFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3Rt
cCh0bXApCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgeyB9CisKKyAgICBUeXBlZFRtcChj
b25zdCBUeXBlZFRtcCYpID0gZGVmYXVsdDsKKyAgICBUeXBlZFRtcChUeXBlZFRtcCYmKSA9IGRl
ZmF1bHQ7CisgICAgVHlwZWRUbXAmIG9wZXJhdG9yPShUeXBlZFRtcCYmKSA9IGRlZmF1bHQ7Cisg
ICAgVHlwZWRUbXAmIG9wZXJhdG9yPShjb25zdCBUeXBlZFRtcCYpID0gZGVmYXVsdDsKKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBUeXBlZFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV90bXAgPT0gb3RoZXIubV90bXAgJiYgbV90eXBlID09IG90aGVyLm1fdHlw
ZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFR5cGVkVG1wJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISF0bXAoKTsgfQorCisg
ICAgb3BlcmF0b3IgVG1wKCkgY29uc3QgeyByZXR1cm4gdG1wKCk7IH0KKyAgICBvcGVyYXRvciBB
cmcoKSBjb25zdCB7IHJldHVybiBBcmcodG1wKCkpOyB9CisgICAgVG1wIHRtcCgpIGNvbnN0IHsg
cmV0dXJuIG1fdG1wOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisKK3ByaXZhdGU6CisKKyAgICBUbXAgbV90bXA7CisgICAgVHlwZSBtX3R5cGU7Cit9OworCitj
bGFzcyBBaXJJUkdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgc3RydWN0IENvbnRyb2xEYXRhIHsK
KyAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIFR5cGUgcmV0dXJuVHlwZSwg
VHlwZWRUbXAgcmVzdWx0VG1wLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0
aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogYmxvY2tU
eXBlKHR5cGUpCisgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCisgICAg
ICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKKyAgICAgICAgICAgICwgcmV0dXJuVHlwZShyZXR1
cm5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsgLy8g
RklYTUU6IFVzZSBvcmlnaW4uCisgICAgICAgICAgICBpZiAocmVzdWx0VG1wKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChyZXN1bHRUbXApOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJldHVyblR5cGUgPT0gVHlwZTo6Vm9pZCk7CisgICAgICAgIH0KKwor
ICAgICAgICBDb250cm9sRGF0YSgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OklmOgorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiSWY6ICAgICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OkJsb2NrOgorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiQmxvY2s6ICAgICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBCbG9ja1R5cGU6Okxvb3A6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJMb29w
OiAgICAgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJsb2Nr
VHlwZTo6VG9wTGV2ZWw6CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJUb3BMZXZlbDogIik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQu
cHJpbnQoIkNvbnRpbnVhdGlvbjogIiwgKmNvbnRpbnVhdGlvbiwgIiwgU3BlY2lhbDogIik7Cisg
ICAgICAgICAgICBpZiAoc3BlY2lhbCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoKnNwZWNp
YWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiTm9uZSIp
OworICAgICAgICB9CisKKyAgICAgICAgQmxvY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBi
bG9ja1R5cGU7IH0KKworICAgICAgICBUeXBlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHJl
dHVyblR5cGU7IH0KKworICAgICAgICBib29sIGhhc05vblZvaWRTaWduYXR1cmUoKSBjb25zdCB7
IHJldHVybiByZXN1bHQuc2l6ZSgpOyB9CisKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0Qmxv
Y2tGb3JCcmFuY2goKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgpID09IEJsb2Nr
VHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlY2lhbDsKKyAgICAgICAgICAg
IHJldHVybiBjb250aW51YXRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNvbnZlcnRJ
ZlRvQmxvY2soKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQodHlwZSgpID09IEJsb2Nr
VHlwZTo6SWYpOworICAgICAgICAgICAgYmxvY2tUeXBlID0gQmxvY2tUeXBlOjpCbG9jazsKKyAg
ICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdXNpbmcg
UmVzdWx0TGlzdCA9IFZlY3RvcjxUeXBlZFRtcCwgMT47CisKKyAgICAgICAgUmVzdWx0TGlzdCBy
ZXN1bHRGb3JCcmFuY2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZSgp
ID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0TGlzdCgp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOworICAgICAgICBCbG9ja1R5cGUg
YmxvY2tUeXBlOworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CisgICAgICAgIEJh
c2ljQmxvY2sqIHNwZWNpYWw7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0OworICAgICAgICBU
eXBlIHJldHVyblR5cGU7CisgICAgfTsKKworICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVHlw
ZWRUbXA7CisgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKKyAgICB1c2luZyBF
eHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT47CisgICAgdXNpbmcgUmVz
dWx0TGlzdCA9IENvbnRyb2xEYXRhOjpSZXN1bHRMaXN0OworICAgIHVzaW5nIENvbnRyb2xFbnRy
eSA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OworCisgICAg
c3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIHsgfTsgfTsK
KworICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmluZzsKKyAgICB1c2luZyBVbmV4cGVjdGVkUmVz
dWx0ID0gVW5leHBlY3RlZDxFcnJvclR5cGU+OworICAgIHVzaW5nIFJlc3VsdCA9IEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPjsKKyAgICB1c2lu
ZyBQYXJ0aWFsUmVzdWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAg
ICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4g
V2FzbVBhcnNlci5oLgorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5n
KCJXZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIl9zLCBtYWtlU3RyaW5nKGFy
Z3MpLi4uKSk7CisgICAgfQorCisjZGVmaW5lIFdBU01fQ09NUElMRV9GQUlMX0lGKGNvbmRpdGlv
biwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAg
ICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBj
b25zdCBTaWduYXR1cmUmKTsKKworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CisgICAgRXhwcmVzc2lvblR5
cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENv
bnN0YW50KEJhc2ljQmxvY2sqLCBUeXBlLCB1aW50NjRfdCk7CisKKyAgICAvLyBMb2NhbHMKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsK
KworICAgIC8vIEdsb2JhbHMKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBn
ZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpOworCisgICAgLy8gTWVtb3J5CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2lu
dGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9u
VHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRHcm93TWVtb3J5KEV4cHJlc3Np
b25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworCisgICAgLy8gQmFzaWMgb3BlcmF0b3JzCisgICAgdGVtcGxhdGU8T3BUeXBlPgorICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgdGVtcGxhdGU8T3BUeXBlPgorICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZE9wKEV4cHJlc3Npb25UeXBlIGxlZnQs
IEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJvLCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIENvbnRyb2wgZmxvdworICAgIENvbnRyb2xE
YXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUb3BMZXZlbChUeXBlIHNpZ25hdHVyZSk7CisgICAg
Q29udHJvbERhdGEgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJsb2NrKFR5cGUgc2lnbmF0dXJlKTsK
KyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9vcChUeXBlIHNpZ25hdHVy
ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkSWYoRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBUeXBlIHNpZ25hdHVyZSwgQ29udHJvbERhdGEmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYs
IGNvbnN0IEV4cHJlc3Npb25MaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKKworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNv
bmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBk
ZWZhdWx0VGFyZ2V0cywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5
JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmKTsKKwor
ICAgIC8vIENhbGxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CisKKyAg
ICBQYXJ0aWFsUmVzdWx0IGFkZFNoaWZ0KFR5cGUsIEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lv
blR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEludGVnZXJTdWIoQjM6OkFpcjo6T3Bjb2RlLCBFeHBy
ZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QWJzKEIzOjpBaXI6Ok9wY29k
ZSwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBh
cnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGUsIEIzOjpBaXI6Ok9wY29kZSwg
RXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpOworCisgICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250
cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBleHByZXNzaW9uU3RhY2spOworICAgIHZv
aWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogcGFyc2VyKSB7IG1f
cGFyc2VyID0gcGFyc2VyOyB9OworCisgICAgc3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9y
KGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIFZlY3RvcjxU
bXA+IHJlc3VsdDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogdmVjdG9yKQorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnRtcCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZhbGlkYXRlSW5z
dChJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAg
ICAgICAgICAgIGlmICghaW5zdC5pc1ZhbGlkRm9ybSgpKSB7CisgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKGluc3QpOworICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGV4dHJhY3RBcmcoY29uc3QgVHlwZWRU
bXAmIHRtcCkgeyByZXR1cm4gdG1wLnRtcCgpOyB9CisgICAgc3RhdGljIEFyZyBleHRyYWN0QXJn
KGNvbnN0IFRtcCYgdG1wKSB7IHJldHVybiBBcmcodG1wKTsgfQorICAgIHN0YXRpYyBBcmcgZXh0
cmFjdEFyZyhjb25zdCBBcmcmIGFyZykgeyByZXR1cm4gYXJnOyB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQmFzaWNCbG9jayogYmxvY2ss
IEtpbmQga2luZCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEZpbnMgYSB3YXkgdG8gdXNlIG9yaWdpbiBoZXJlLgorICAgICAgICBhdXRvJiBpbnN0
ID0gYmxvY2stPmFwcGVuZChraW5kLCBudWxscHRyLCBleHRyYWN0QXJnKGFyZ3VtZW50cykuLi4p
OworICAgICAgICB2YWxpZGF0ZUluc3QoaW5zdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEtpbmQga2luZCwgQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBr
aW5kLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmRFZmZlY3Rm
dWwoQjM6OkFpcjo6T3Bjb2RlIG9wLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBLaW5kIGtpbmQgPSBvcDsKKyAgICAgICAga2luZC5lZmZlY3RzID0gdHJ1ZTsKKyAg
ICAgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBraW5kLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRz
Pihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBUbXAgbmV3VG1wKEIzOjpCYW5rIGJhbmsp
CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICB9CisKKyAg
ICBUeXBlZFRtcCBnMzIoKSB7IHJldHVybiB7IG5ld1RtcChCMzo6R1ApLCBUeXBlOjpJMzIgfTsg
fQorICAgIFR5cGVkVG1wIGc2NCgpIHsgcmV0dXJuIHsgbmV3VG1wKEIzOjpHUCksIFR5cGU6Okk2
NCB9OyB9CisgICAgVHlwZWRUbXAgZjMyKCkgeyByZXR1cm4geyBuZXdUbXAoQjM6OkZQKSwgVHlw
ZTo6RjMyIH07IH0KKyAgICBUeXBlZFRtcCBmNjQoKSB7IHJldHVybiB7IG5ld1RtcChCMzo6RlAp
LCBUeXBlOjpGNjQgfTsgfQorCisgICAgVHlwZWRUbXAgdG1wRm9yVHlwZShUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6Cisg
ICAgICAgICAgICByZXR1cm4gZzMyKCk7CisgICAgICAgIGNhc2UgVHlwZTo6STY0OgorICAgICAg
ICAgICAgcmV0dXJuIGc2NCgpOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAg
IHJldHVybiBmMzIoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICByZXR1
cm4gZjY0KCk7CisgICAgICAgIGNhc2UgVHlwZTo6Vm9pZDoKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogYWRk
UGF0Y2hwb2ludChCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvYy5h
ZGQ8QjM6OlBhdGNocG9pbnRWYWx1ZT4odHlwZSwgQjM6Ok9yaWdpbigpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdzLi4uIHRoZUFyZ3MpCisg
ICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIHJlc3Vs
dCwgc3RkOjpmb3J3YXJkPEFyZ3M+KHRoZUFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sq
IGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBBcmdz
Li4uIHRoZUFyZ3MpCisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBw
YXRjaCwgcmVzdWx0LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIHNpemVvZi4uLihBcmdzKT46OmZy
b20odGhlQXJncy4uLikpOworICAgIH0KKworICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNC
bG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQp
CisgICAgeworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgcmVzdWx0
LCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxzaXpl
X3QgaW5saW5lU2l6ZT4KKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2lj
QmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0LCBWZWN0b3I8Q29u
c3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKKyAgICB7CisgICAgICAgIGlmICghbV9w
YXRjaHBvaW50U3BlY2lhbCkKKyAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwgPSBzdGF0
aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lhbChzdGQ6Om1h
a2VfdW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOworCisgICAgICAgIEluc3QgaW5z
dChQYXRjaCwgcGF0Y2gsIEFyZzo6c3BlY2lhbChtX3BhdGNocG9pbnRTcGVjaWFsKSk7CisgICAg
ICAgIEluc3QgcmVzdWx0TW92OworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBB
U1NFUlQocGF0Y2gtPnR5cGUoKSAhPSBCMzo6Vm9pZCk7CisgICAgICAgICAgICBzd2l0Y2ggKHBh
dGNoLT5yZXN1bHRDb25zdHJhaW50LmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBCMzo6VmFs
dWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKHBh
dGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0TW92
ID0gSW5zdChyZXN1bHQuaXNHUCgpID8gTW92ZSA6IE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChw
YXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAg
ICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBBU1NFUlQocGF0Y2gtPnR5cGUoKSA9PSBCMzo6Vm9pZCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKENvbnN0cmFpbmVkVG1wJiB0bXAgOiBhcmdzKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBsZXNzIHRoYW4gaWRlYWwgdG8gY3JlYXRlIGR1bW15IHZhbHVlcyBqdXN0IHRv
IHNhdGlzZnkgQWlyJ3MKKyAgICAgICAgICAgIC8vIHZhbGlkYXRpb24uIFdlIHNob3VsZCBhYnN0
cmNhdCBQYXRjaCBlbm91Z2ggc28gVmFsdWVSZXAncyBkb24ndCBuZWVkIHRvIGJlCisgICAgICAg
ICAgICAvLyBiYWNrZWQgYnkgVmFsdWVzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA0MAorICAgICAgICAgICAgQjM6OlZhbHVlKiBk
dW1teVZhbHVlID0gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgdG1wLnRtcC5pc0dQ
KCkgPyBCMzo6SW50NjQgOiBCMzo6RG91YmxlLCAwKTsKKyAgICAgICAgICAgIHBhdGNoLT5hcHBl
bmQoZHVtbXlWYWx1ZSwgdG1wLnJlcCk7CisgICAgICAgICAgICBzd2l0Y2ggKHRtcC5yZXAua2lu
ZCgpKSB7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAg
ICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wLnRtcCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAg
ICAgICAgICAgcGF0Y2gtPmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodG1wLnJlcC5yZWcoKSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKGJhc2ljQmxvY2ssIHRtcC50bXAuaXNHUCgpID8gTW92ZSA6
IE1vdmVEb3VibGUsIHRtcC50bXAsIHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGlu
c3QuYXJncy5hcHBlbmQoVG1wKHRtcC5yZXAucmVnKCkpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OiB7CisgICAg
ICAgICAgICAgICAgYXV0byBhcmcgPSBBcmc6OmNhbGxBcmcodG1wLnJlcC5vZmZzZXRGcm9tU1Ao
KSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKGJhc2ljQmxvY2ssIHRtcC50bXAuaXNHUCgpID8g
TW92ZSA6IE1vdmVEb3VibGUsIHRtcC50bXAsIGFyZyk7CisgICAgICAgICAgICAgICAgaW5zdC5h
cmdzLmFwcGVuZChhcmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhdGNo
LT5yZXN1bHRDb25zdHJhaW50LmlzUmVnKCkpCisgICAgICAgICAgICBwYXRjaC0+bGF0ZUNsb2Ji
ZXJlZCgpLmNsZWFyKHBhdGNoLT5yZXN1bHRDb25zdHJhaW50LnJlZygpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gcGF0Y2gtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAg
ICAgICAgIGluc3QuYXJncy5hcHBlbmQoZzY0KCkudG1wKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBwYXRjaC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZChmNjQoKS50bXAoKSk7CisKKyAgICAgICAgdmFsaWRhdGVJbnN0KGlu
c3QpOworICAgICAgICBiYXNpY0Jsb2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgICAg
IGlmIChyZXN1bHRNb3YpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlSW5zdChyZXN1bHRNb3YpOwor
ICAgICAgICAgICAgYmFzaWNCbG9jay0+YXBwZW5kKFdURk1vdmUocmVzdWx0TW92KSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnJhbmNoLCB0eXBlbmFtZSBH
ZW5lcmF0b3I+CisgICAgdm9pZCBlbWl0Q2hlY2soY29uc3QgQnJhbmNoJiBtYWtlQnJhbmNoLCBj
b25zdCBHZW5lcmF0b3ImIGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIC8vIFdlIGZhaWwgYWxv
bmcgdGhlIHRydXRoeSBlZGdlIG9mICdicmFuY2gnLgorICAgICAgICBJbnN0IGJyYW5jaCA9IG1h
a2VCcmFuY2goKTsKKworICAgICAgICAvLyBGSVhNRTogTWFrZSBhIGhhc2htYXAgb2YgdGhlc2Uu
CisgICAgICAgIEIzOjpDaGVja1NwZWNpYWw6OktleSBrZXkoYnJhbmNoKTsKKyAgICAgICAgQjM6
OkNoZWNrU3BlY2lhbCogc3BlY2lhbCA9IHN0YXRpY19jYXN0PEIzOjpDaGVja1NwZWNpYWwqPiht
X2NvZGUuYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDaGVja1NwZWNpYWw+KGtleSkp
KTsKKworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciBkdW1teSB2YWx1ZXMK
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA0
MAorICAgICAgICBCMzo6VmFsdWUqIGR1bW15UHJlZGljYXRlID0gbV9wcm9jLmFkZENvbnN0YW50
KEIzOjpPcmlnaW4oKSwgQjM6OkludDMyLCA0Mik7CisgICAgICAgIEIzOjpDaGVja1ZhbHVlKiBj
aGVja1ZhbHVlID0gbV9wcm9jLmFkZDxCMzo6Q2hlY2tWYWx1ZT4oQjM6OkNoZWNrLCBCMzo6T3Jp
Z2luKCksIGR1bW15UHJlZGljYXRlKTsKKyAgICAgICAgY2hlY2tWYWx1ZS0+c2V0R2VuZXJhdG9y
KGdlbmVyYXRvcik7CisKKyAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6
OnNwZWNpYWwoc3BlY2lhbCkpOworICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kVmVjdG9yKGJyYW5j
aC5hcmdzKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChXVEZNb3ZlKGluc3QpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgLi4uQXJncz4K
KyAgICB2b2lkIGVtaXRDQ2FsbChGdW5jIGZ1bmMsIFR5cGVkVG1wIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgZW1pdENDYWxsKG1fY3VycmVudEJsb2NrLCBmdW5jLCByZXN1
bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jLCB0eXBlbmFtZSAuLi5BcmdzPgorICAgIHZvaWQgZW1pdENDYWxsKEJhc2lj
QmxvY2sqIGJsb2NrLCBGdW5jIGZ1bmMsIFR5cGVkVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdz
KQorICAgIHsKKyAgICAgICAgQjM6OlR5cGUgcmVzdWx0VHlwZSA9IEIzOjpWb2lkOworICAgICAg
ICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgICAgIHJlc3VsdFR5cGUgPSBC
Mzo6SW50MzI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGU6
Okk2NDoKKyAgICAgICAgICAgICAgICByZXN1bHRUeXBlID0gQjM6OkludDY0OworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICAg
ICAgcmVzdWx0VHlwZSA9IEIzOjpGbG9hdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgICAgIHJlc3VsdFR5cGUgPSBCMzo6
RG91YmxlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgYXV0byBtYWtlRHVtbXlWYWx1ZSA9IFsmXSAoVG1wIHRt
cCkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgbGVzcyB0aGFuIGlkZWFsIHRvIGNy
ZWF0ZSBkdW1teSB2YWx1ZXMganVzdCB0byBzYXRpc2Z5IEFpcidzCisgICAgICAgICAgICAvLyB2
YWxpZGF0aW9uLiBXZSBzaG91bGQgYWJzdHJjYXQgQ0NhbGwgZW5vdWdoIHNvIHdlJ3JlIG5vdCBy
ZWxpYW50IG9uIGFyZ3VtZW50cworICAgICAgICAgICAgLy8gdG8gdGhlIEIzOjpDQ2FsbFZhbHVl
LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NDA0MAorICAgICAgICAgICAgaWYgKHRtcC5pc0dQKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQ2NCwgMCk7CisgICAg
ICAgICAgICByZXR1cm4gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwgQjM6OkRvdWJs
ZSwgMCk7CisgICAgICAgIH07CisKKyAgICAgICAgQjM6OlZhbHVlKiBkdW1teUZ1bmMgPSBtX3By
b2MuYWRkQ29uc3RhbnQoQjM6Ok9yaWdpbigpLCBCMzo6SW50NjQsIGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGZ1bmMpKTsKKyAgICAgICAgQjM6OlZhbHVlKiBvcmlnaW4gPSBtX3Byb2MuYWRkPEIz
OjpDQ2FsbFZhbHVlPihyZXN1bHRUeXBlLCBCMzo6T3JpZ2luKCksIEIzOjpFZmZlY3RzOjpub25l
KCksIGR1bW15RnVuYywgbWFrZUR1bW15VmFsdWUodGhlQXJncykuLi4pOworCisgICAgICAgIElu
c3QgaW5zdChDQ2FsbCwgb3JpZ2luKTsKKworICAgICAgICBUbXAgY2FsbGVlID0gZzY0KCk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbVB0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1
bmMsIEIzQ0NhbGxQdHJUYWcpKSwgY2FsbGVlKTsKKyAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChj
YWxsZWUpOworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKHJlc3VsdC50bXAoKSk7CisKKyAgICAgICAgZm9yIChUbXAgdG1wIDogVmVjdG9yPFRtcCwg
c2l6ZW9mLi4uKEFyZ3MpPjo6ZnJvbSh0aGVBcmdzLnRtcCgpLi4uKSkKKyAgICAgICAgICAgIGlu
c3QuYXJncy5hcHBlbmQodG1wKTsKKworICAgICAgICBibG9jay0+YXBwZW5kKFdURk1vdmUoaW5z
dCkpOworICAgIH0KKworICAgIHN0YXRpYyBCMzo6QWlyOjpPcGNvZGUgbW92ZU9wRm9yVmFsdWVU
eXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlMzI7CisgICAgICAgIGNhc2Ug
VHlwZTo6STY0OgorICAgICAgICAgICAgcmV0dXJuIE1vdmU7CisgICAgICAgIGNhc2UgVHlwZTo6
RjMyOgorICAgICAgICAgICAgcmV0dXJuIE1vdmVGbG9hdDsKKyAgICAgICAgY2FzZSBUeXBlOjpG
NjQ6CisgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIGVtaXRUaHJvd0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25U
eXBlKTsKKworICAgIHZvaWQgZW1pdFRpZXJVcENoZWNrKHVpbnQzMl90IGRlY3JlbWVudENvdW50
LCBCMzo6T3JpZ2luKTsKKworICAgIEV4cHJlc3Npb25UeXBlIGVtaXRDaGVja0FuZFByZXBhcmVQ
b2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qg
c2l6ZU9mT3ApOworICAgIEV4cHJlc3Npb25UeXBlIGVtaXRMb2FkT3AoTG9hZE9wVHlwZSwgRXhw
cmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRTdG9y
ZU9wKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKKworICAgIHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lv
blR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUmIHNvdXJjZSk7CisgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIGNvbnN0
IFJlc3VsdExpc3QmIHN0YWNrKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgor
ICAgIHZvaWQgZW1pdENoZWNrc0Zvck1vZE9yRGl2KGJvb2wgaXNTaWduZWREaXYsIEV4cHJlc3Np
b25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBJbnRUeXBlPgorICAgIHZvaWQgZW1pdE1vZE9yRGl2KGJvb2wgaXNEaXYsIEV4cHJlc3Np
b25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KworICAgIGludDMyX3QgV0FSTl9VTlVTRURfUkVUVVJOIGZpeHVwUG9pbnRlclBsdXNPZmZzZXQo
RXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCk7CisKKyAgICB2b2lkIHJlc3RvcmVXYXNtQ29udGV4
dEluc3RhbmNlKEJhc2ljQmxvY2sqLCBUeXBlZFRtcCk7CisgICAgZW51bSBjbGFzcyBSZXN0b3Jl
Q2FjaGVkU3RhY2tMaW1pdCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIHJlc3RvcmVXZWJBc3NlbWJs
eUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBNZW1vcnlJbmZvcm1h
dGlvbiYsIFR5cGVkVG1wIGluc3RhbmNlLCBCYXNpY0Jsb2NrKik7CisKKyAgICBCMzo6T3JpZ2lu
IG9yaWdpbigpOworCisgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBtX3BhcnNl
ciB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAg
IGNvbnN0IE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsK
KyAgICBjb25zdCBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGUgeyBDb21waWxhdGlv
bk1vZGU6OkJCUU1vZGUgfTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXggeyBV
SU5UX01BWCB9OworICAgIGNvbnN0IFRpZXJVcENvdW50KiBtX3RpZXJVcCB7IG51bGxwdHIgfTsK
KworICAgIEIzOjpQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgQmFz
aWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayogbV9y
b290QmxvY2sgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFR5cGVkVG1wPiBtX2xvY2FsczsKKyAg
ICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBh
ZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgR1BSUmVnIG1fbWVtb3J5QmFz
ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52
YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZh
bGlkR1BSUmVnIH07CisgICAgYm9vbCBtX21ha2VzQ2FsbHMgeyBmYWxzZSB9OworCisgICAgVHlw
ZWRUbXAgbV9pbnN0YW5jZVZhbHVlOyAvLyBBbHdheXMgdXNlIHRoZSBhY2Nlc3NvciBiZWxvdyB0
byBlbnN1cmUgdGhlIGluc3RhbmNlIHZhbHVlIGlzIG1hdGVyaWFsaXplZCB3aGVuIHVzZWQuCisg
ICAgYm9vbCBtX3VzZXNJbnN0YW5jZVZhbHVlIHsgZmFsc2UgfTsKKyAgICBUeXBlZFRtcCBpbnN0
YW5jZVZhbHVlKCkKKyAgICB7CisgICAgICAgIG1fdXNlc0luc3RhbmNlVmFsdWUgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gbV9pbnN0YW5jZVZhbHVlOworICAgIH0KKworICAgIHVpbnQzMl90IG1f
bWF4TnVtSlNDYWxsQXJndW1lbnRzIHsgMCB9OworCisgICAgQjM6OlBhdGNocG9pbnRTcGVjaWFs
KiBtX3BhdGNocG9pbnRTcGVjaWFsIHsgbnVsbHB0ciB9OworfTsKKworLy8gTWVtb3J5IGFjY2Vz
c2VzIGluIFdlYkFzc2VtYmx5IGhhdmUgdW5zaWduZWQgMzItYml0IG9mZnNldHMsIHdoZXJlYXMg
dGhleSBoYXZlIHNpZ25lZCAzMi1iaXQgb2Zmc2V0cyBpbiBCMy4KK2ludDMyX3QgQWlySVJHZW5l
cmF0b3I6OmZpeHVwUG9pbnRlclBsdXNPZmZzZXQoRXhwcmVzc2lvblR5cGUmIHB0ciwgdWludDMy
X3Qgb2Zmc2V0KQoreworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4ob2Zmc2V0KSA+IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
IHsKKyAgICAgICAgYXV0byBwcmV2aW91c1B0ciA9IHB0cjsKKyAgICAgICAgcHRyID0gZzY0KCk7
CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YmlnSW1tKG9mZnNldCksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjb25z
dGFudCwgcHJldmlvdXNQdHIsIHB0cik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBy
ZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBibG9jaywgVHlwZWRUbXAgaW5zdGFuY2UpCit7CisgICAg
aWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0g
YWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgICAgIGlmIChDQ2FsbEhlbHBlcnM6OnN0b3Jl
V2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKKyAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVy
cygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGpp
dCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShw
YXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmxv
Y2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogQmVjYXVzZSBXYXNtVG9XYXNtIGNhbGwgY2xvYmJlcnMgd2FzbUNv
bnRleHRJbnN0YW5jZSByZWdpc3RlciBhbmQgZG9lcyBub3QgcmVzdG9yZSBpdCwgd2UgbmVlZCB0
byByZXN0b3JlIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4KKyAgICAvLyBUaGlzIHByZXZlbnRzIHVz
IGZyb20gdXNpbmcgQXJndW1lbnRSZWcgdG8gdGhpcyAobG9naWNhbGx5KSBpbW11dGFibGUgcGlu
bmVkIHJlZ2lzdGVyLgorICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpW
b2lkKTsKKyAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAg
ICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpI
ZWFwUmFuZ2U6OnRvcCgpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOworICAg
IHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0KG1fd2FzbUNvbnRleHRJbnN0YW5j
ZUdQUikpOworICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gbV93YXNtQ29udGV4
dEluc3RhbmNlR1BSOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbSkgewor
ICAgICAgICBqaXQubW92ZShwYXJhbVswXS5ncHIoKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7
CisgICAgfSk7CisgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBp
bnN0YW5jZSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1
bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29t
cGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVw
LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSkKKyAgICA6IG1faW5mbyhpbmZvKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAg
LCBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCisgICAgLCBtX2Z1bmN0aW9uSW5k
ZXgoZnVuY3Rpb25JbmRleCkKKyAgICAsIG1fdGllclVwKHRpZXJVcCkKKyAgICAsIG1fcHJvYyhw
cm9jZWR1cmUpCisgICAgLCBtX2NvZGUobV9wcm9jLmNvZGUoKSkKKyAgICAsIG1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCit7CisgICAgbV9jdXJyZW50
QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBtX3Jvb3RCbG9jayA9IG1fY3VycmVudEJs
b2NrOworCisgICAgLy8gRklYTUUgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGluIHJlZ2lzdGVy
cyBoZXJlIGlmIHRoZXJlJ3Mgbm8gbWVtb3J5LiBJdCBtYWtlcyB3YXNtIC0+IHdhc20gdGh1bmtz
IHNpbXBsZXIgZm9yIG5vdy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NjYyMworICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisKKyAgICBtX21lbW9yeUJhc2VHUFIgPSBwaW5uZWRSZWdz
LmJhc2VNZW1vcnlQb2ludGVyOworICAgIG1fY29kZS5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VH
UFIpOworCisgICAgbV93YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29u
dGV4dEluc3RhbmNlUG9pbnRlcjsKKyAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAg
ICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CisKKyAg
ICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFw
aW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgIG1fbWVtb3J5
U2l6ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7CisgICAg
ICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihyZWdJbmZv
LnNpemVSZWdpc3Rlcik7CisgICAgfQorCisgICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKKyAg
ICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNt
RXhjZXB0aW9uKTsKKworICAgIGlmIChpbmZvLm1lbW9yeSkgeworICAgICAgICBzd2l0Y2ggKG1f
bW9kZSkgeworICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWVtb3J5TW9kZTo6U2lnbmFsaW5nOgorICAgICAg
ICAgICAgLy8gTW9zdCBtZW1vcnkgYWNjZXNzZXMgaW4gc2lnbmFsaW5nIG1vZGUgZG9uJ3QgZG8g
YW4gZXhwbGljaXQKKyAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjayBiZWNhdXNlIHRoZXkg
Y2FuIHJlbHkgb24gZmF1bHQgaGFuZGxpbmcgdG8gZGV0ZWN0CisgICAgICAgICAgICAvLyBvdXQt
b2YtYm91bmRzIGFjY2Vzc2VzLiBGYXVsdFNpZ25hbEhhbmRsZXIgbm9uZXRoZWxlc3MgbmVlZHMg
dGhlCisgICAgICAgICAgICAvLyB0aHVuayB0byBleGlzdCBzbyB0aGF0IGl0IGNhbiBqdW1wIHRv
IHRoYXQgdGh1bmsuCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9u
KCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKKyAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtX2NvZGUuc2V0TnVtRW50cnlwb2ludHMoMSk7CisKKyAgICBHUFJSZWcgY29udGV4dElu
c3RhbmNlID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gd2FzbUNhbGxpbmdDb252ZW50aW9uQWly
KCkucHJvbG9ndWVTY3JhdGNoKDEpIDogbV93YXNtQ29udGV4dEluc3RhbmNlR1BSOworCisgICAg
UmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0
ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgeworICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgIGNvZGUuZW1p
dERlZmF1bHRQcm9sb2d1ZShqaXQpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdQUlJlZyBj
YWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7
CisgICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3Zl
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9j
YXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAg
IGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IENoZWNr
ZWQ8aW50MzJfdD4gd2FzbUZyYW1lU2l6ZSA9IG1fY29kZS5mcmFtZVNpemUoKTsKKyAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1QYXJlbnRDaGVja1NpemUgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCAxMDI0KTsKKyAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGV4dHJhRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc3RkOjptYXg8dWludDMyX3Q+KAorICAgICAgICAgICAgICAg
IC8vIFRoaXMgYWxsb3dzIHVzIHRvIGVsaWRlIHN0YWNrIGNoZWNrcyBmb3IgZnVuY3Rpb25zIHRo
YXQgYXJlIHRlcm1pbmFsIG5vZGVzIGluIHRoZSBjYWxsCisgICAgICAgICAgICAgICAgLy8gdHJl
ZSwgKGUuZyB0aGV5IGRvbid0IG1ha2UgYW55IGNhbGxzKSBhbmQgaGF2ZSBhIHNtYWxsIGVub3Vn
aCBmcmFtZSBzaXplLiBUaGlzIHdvcmtzIGJ5CisgICAgICAgICAgICAgICAgLy8gaGF2aW5nIGFu
eSBzdWNoIHRlcm1pbmFsIG5vZGUgaGF2ZSBpdHMgcGFyZW50IGNhbGxlciBpbmNsdWRlIHNvbWUg
ZXh0cmEgc2l6ZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAvLyBvd24gY2hlY2sgZm9yIGl0LiBU
aGUgZ29hbCBoZXJlIGlzIHR3b2ZvbGQ6CisgICAgICAgICAgICAgICAgLy8gMS4gRW1pdCBsZXNz
IGNvZGUuCisgICAgICAgICAgICAgICAgLy8gMi4gVHJ5IHRvIHNwZWVkIHRoaW5ncyB1cCBieSBz
a2lwcGluZyBzdGFjayBjaGVja3MuCisgICAgICAgICAgICAgICAgbWluaW11bVBhcmVudENoZWNr
U2l6ZSwKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBzdGFjayBj
aGVja3MgaW4gdGhlIFdhc20gLT4gRW1iZWRkZXIgY2FsbCBJQyBzdHViLiBTaW5jZSB0aGVzZSB3
aWxsCisgICAgICAgICAgICAgICAgLy8gc3BpbGwgYWxsIGFyZ3VtZW50cyB0byB0aGUgc3RhY2ss
IHdlIGVuc3VyZSB0aGF0IGEgc3RhY2sgY2hlY2sgaGVyZSBjb3ZlcnMgdGhlCisgICAgICAgICAg
ICAgICAgLy8gc3RhY2sgdGhhdCBzdWNoIGEgc3R1YiB3b3VsZCB1c2UuCisgICAgICAgICAgICAg
ICAgKENoZWNrZWQ8dWludDMyX3Q+KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzKSAqIHNpemVvZihS
ZWdpc3RlcikgKyBqc2NDYWxsaW5nQ29udmVudGlvbigpLmhlYWRlclNpemVJbkJ5dGVzKCkpLnVu
c2FmZUdldCgpCisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGNvbnN0IGludDMyX3QgY2hl
Y2tTaXplID0gbV9tYWtlc0NhbGxzID8gKHdhc21GcmFtZVNpemUgKyBleHRyYUZyYW1lU2l6ZSku
dW5zYWZlR2V0KCkgOiB3YXNtRnJhbWVTaXplLnVuc2FmZUdldCgpOworICAgICAgICAgICAgYm9v
bCBuZWVkVW5kZXJmbG93Q2hlY2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hlY2tTaXplKSA+
IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZHNPdmVy
Zmxvd0NoZWNrID0gbV9tYWtlc0NhbGxzIHx8IHdhc21GcmFtZVNpemUgPj0gbWluaW11bVBhcmVu
dENoZWNrU2l6ZSB8fCBuZWVkVW5kZXJmbG93Q2hlY2s7CisKKyAgICAgICAgICAgIC8vIFRoaXMg
YWxsb3dzIGxlYWYgZnVuY3Rpb25zIHRvIG5vdCBkbyBzdGFjayBjaGVja3MgaWYgdGhlaXIgZnJh
bWUgc2l6ZSBpcyB3aXRoaW4KKyAgICAgICAgICAgIC8vIGNlcnRhaW4gbGltaXRzIHNpbmNlIHRo
ZWlyIGNhbGxlciB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGUgY2hlY2suCisgICAgICAgICAg
ICBpZiAobmVlZHNPdmVyZmxvd0NoZWNrKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNo
KDApOworCisgICAgICAgICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGNvbnRleHRJbnN0YW5j
ZSk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKC1jaGVja1NpemUpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaCk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OworICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShuZWVkVW5kZXJmbG93Q2hlY2spKQorICAgICAgICAgICAg
ICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3Zl
LCBzY3JhdGNoLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpOworICAgICAgICAgICAgICAg
IG92ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIHNjcmF0
Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhjb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soW292ZXJmbG93XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsob3ZlcmZsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5r
UHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dTdGFja092ZXJmbG93RnJvbVdh
c21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fdXNlc0luc3RhbmNlVmFsdWUgJiYgQ29udGV4dDo6dXNlRmFzdFRM
UygpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gb3ZlcmZsb3cgY2hlY2sgaXMgbmVlZGVkLCBi
dXQgdGhlIGluc3RhbmNlIHZhbHVlcyBzdGlsbCBuZWVkcyB0byBiZSBjb3JyZWN0LgorICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChq
aXQsIENDYWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRj
aFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5j
ZShjb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisK
KyAgICBtX2NvZGUuc2V0UHJvbG9ndWVGb3JFbnRyeXBvaW50KDAsIFdURk1vdmUocHJvbG9ndWVH
ZW5lcmF0b3IpKTsKKworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKKyAgICAgICAg
bV9pbnN0YW5jZVZhbHVlID0gZzY0KCk7CisgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNl
IHRvIG9ubHkgZG8gdGhpcyBpZiB3ZSB1c2UgaW5zdGFuY2UgdmFsdWUuCisgICAgICAgIGFwcGVu
ZChNb3ZlLCBUbXAoY29udGV4dEluc3RhbmNlKSwgbV9pbnN0YW5jZVZhbHVlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9pbnN0YW5jZVZhbHVlID0geyBUbXAoY29udGV4dEluc3RhbmNlKSwgVHlw
ZTo6STY0IH07CisKKyAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CisgICAgbV9sb2NhbHMu
Z3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlw
ZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgbV9sb2NhbHNbaV0gPSB0bXBGb3JU
eXBlKHR5cGUpOworICAgIH0KKworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLmxvYWRB
cmd1bWVudHMoc2lnbmF0dXJlLCBbJl0gKGNvbnN0IEFyZyYgYXJnLCB1bnNpZ25lZCBpKSB7Cisg
ICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2UgVHlw
ZTo6STMyOgorICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgYXJnLCBtX2xvY2Fsc1tpXSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICBh
cHBlbmQoTW92ZSwgYXJnLCBtX2xvY2Fsc1tpXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICBhcHBlbmQoTW92ZUZsb2F0LCBhcmcsIG1f
bG9jYWxzW2ldKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoK
KyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBhcmcsIG1fbG9jYWxzW2ldKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgZW1pdFRpZXJVcENo
ZWNrKFRpZXJVcENvdW50OjpmdW5jdGlvbkVudHJ5RGVjcmVtZW50KCksIEIzOjpPcmlnaW4oKSk7
Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRl
KFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcmVDYWNoZWRTdGFja0xpbWl0LCBjb25zdCBN
ZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBUeXBlZFRtcCBpbnN0YW5jZSwgQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgcmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmxvY2ssIGluc3RhbmNl
KTsKKworICAgIGlmIChyZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCA9PSBSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdDo6WWVzKSB7CisgICAgICAgIC8vIFRoZSBJbnN0YW5jZSBjYWNoZXMgdGhlIHN0YWNr
IGxpbWl0LCBidXQgYWxzbyBrbm93cyB3aGVyZSBpdHMgY2Fub25pY2FsIGxvY2F0aW9uIGlzLgor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxJbnN0YW5j
ZSo+KG51bGxwdHIpLT5jYWNoZWRTdGFja0xpbWl0KCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAi
Iik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFu
Y2U6Om9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpLCBCMzo6V2lkdGg2NCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRTdGFja0xpbWl0KCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIGF1dG8gdGVt
cCA9IGc2NCgpOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YWRkcihpbnN0YW5j
ZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQoKSks
IHRlbXApOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YWRkcih0ZW1wKSwgdGVt
cCk7CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwgdGVtcCwgQXJnOjphZGRyKGluc3RhbmNl
VmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgfQor
CisgICAgaWYgKCEhbWVtb3J5KSB7CisgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyog
cGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgICAgICBSZWdpc3Rl
clNldCBjbG9iYmVyczsKKyAgICAgICAgY2xvYmJlcnMuc2V0KHBpbm5lZFJlZ3MtPmJhc2VNZW1v
cnlQb2ludGVyKTsKKyAgICAgICAgZm9yIChhdXRvIGluZm8gOiBwaW5uZWRSZWdzLT5zaXplUmVn
aXN0ZXJzKQorICAgICAgICAgICAgY2xvYmJlcnMuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsKKwor
ICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAg
ICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBl
ZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6
SGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7
CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlcnMpOworCisgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEdQ
UlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7Cisg
ICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAgICAgICAgQVNT
RVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3Vt
ZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVy
cyByZWxhdGl2ZSB0byAwLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6
ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRP
ZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFk
ZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwg
c2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAg
ICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1w
KCksIGluc3RhbmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRUaHJv
d0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9uVHlwZSB0eXBlKQoreworICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90
Pih0eXBlKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgYXV0byBqdW1wVG9FeGNlcHRp
b25TdHViID0gaml0Lmp1bXAoKTsKKworICAgIGppdC5hZGRMaW5rVGFzayhbanVtcFRvRXhjZXB0
aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFn
PihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkpKTsKKyAgICB9KTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
TG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IGNv
dW50OworICAgIHRvdGFsQnl0ZXNDaGVja2VkICs9IG1fbG9jYWxzLnNpemUoKTsKKyAgICB1aW50
MzJfdCB0b3RhbEJ5dGVzOworICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCh0b3RhbEJ5dGVzQ2hl
Y2tlZC5zYWZlR2V0KHRvdGFsQnl0ZXMpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHx8
ICFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxCeXRlcyksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIHRvdGFsQnl0ZXMsICIgbG9jYWxzIik7CisKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvIGxvY2FsID0gdG1wRm9y
VHlwZSh0eXBlKTsKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKGxvY2FsKTsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBj
YXNlIFR5cGU6Okk2NDogeworICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCBsb2NhbCwgbG9jYWwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6
CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OiB7CisgICAgICAgICAgICBhdXRvIHRlbXAgPSBnNjQo
KTsKKyAgICAgICAgICAgIC8vIElFRUUgNzU0ICIwIiBpcyBqdXN0IGludDMyLzY0IHplcm8uCisg
ICAgICAgICAgICBhcHBlbmQoWG9yNjQsIHRlbXAsIHRlbXApOworICAgICAgICAgICAgYXBwZW5k
KHR5cGUgPT0gVHlwZTo6RjMyID8gTW92ZTMyVG9GbG9hdCA6IE1vdmU2NFRvRG91YmxlLCB0ZW1w
LCBsb2NhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDb25z
dGFudChUeXBlIHR5cGUsIHVpbnQ2NF90IHZhbHVlKSAtPiBFeHByZXNzaW9uVHlwZQoreworICAg
IHJldHVybiBhZGRDb25zdGFudChtX2N1cnJlbnRCbG9jaywgdHlwZSwgdmFsdWUpOworfQorCith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRDb25zdGFudChCYXNpY0Jsb2NrKiBibG9jaywgVHlwZSB0
eXBlLCB1aW50NjRfdCB2YWx1ZSkgLT4gRXhwcmVzc2lvblR5cGUKK3sKKyAgICBhdXRvIHJlc3Vs
dCA9IHRtcEZvclR5cGUodHlwZSk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBl
OjpJMzI6CisgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgIGFwcGVuZChibG9jaywgTW92ZSwg
QXJnOjpiaWdJbW0odmFsdWUpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5
cGU6OkYzMjoKKyAgICBjYXNlIFR5cGU6OkY2NDogeworICAgICAgICBhdXRvIHRtcCA9IGc2NCgp
OworICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKHZhbHVlKSwgdG1wKTsK
KyAgICAgICAgYXBwZW5kKGJsb2NrLCB0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRvRmxvYXQg
OiBNb3ZlNjRUb0RvdWJsZSwgdG1wLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9jYWxzLnNpemUoKSA9PSBzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpKTsgLy8gV2UgaGFuZGxlIGFyZ3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VS
VChtX2xvY2Fsc1tpbmRleF0udG1wKCkpOworICAgIHJlc3VsdCA9IHRtcEZvclR5cGUobV9sb2Nh
bHNbaW5kZXhdLnR5cGUoKSk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZShtX2xvY2Fs
c1tpbmRleF0udHlwZSgpKSwgbV9sb2NhbHNbaW5kZXhdLnRtcCgpLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVucmVhY2hhYmxlID0g
YWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgdW5yZWFjaGFibGUtPnNldEdlbmVyYXRvcihb
dGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25U
eXBlOjpVbnJlYWNoYWJsZSk7CisgICAgfSk7CisgICAgdW5yZWFjaGFibGUtPmVmZmVjdHMudGVy
bWluYWwgPSB0cnVlOworICAgIGVtaXRQYXRjaHBvaW50KHVucmVhY2hhYmxlLCBUbXAoKSk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShF
eHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIGludDMyX3QgKCpncm93TWVtb3J5KSh2b2lkKiwgSW5zdGFuY2UqLCBpbnQz
Ml90KSA9IFtdICh2b2lkKiBjYWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBk
ZWx0YSkgLT4gaW50MzJfdCB7CisgICAgICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShj
YWxsRnJhbWUpOworCisgICAgICAgIGlmIChkZWx0YSA8IDApCisgICAgICAgICAgICByZXR1cm4g
LTE7CisKKyAgICAgICAgYXV0byBncm93biA9IGluc3RhbmNlLT5tZW1vcnkoKS0+Z3JvdyhQYWdl
Q291bnQoZGVsdGEpKTsKKyAgICAgICAgaWYgKCFncm93bikgeworICAgICAgICAgICAgc3dpdGNo
IChncm93bi5lcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFz
b246OkludmFsaWREZWx0YToKKyAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNv
bjo6SW52YWxpZEdyb3dTaXplOgorICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVh
c29uOjpXb3VsZEV4Y2VlZE1heGltdW06CisgICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0Zh
aWxSZWFzb246Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKKyAgICB9
OworCisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdENDYWxsKGdyb3dNZW1vcnksIHJlc3Vs
dCwgVHlwZWRUbXAgeyBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBUeXBlOjpJNjQg
fSwgaW5zdGFuY2VWYWx1ZSgpLCBkZWx0YSk7CisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFs
U3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Ok5vLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5j
ZVZhbHVlKCksIG1fY3VycmVudEJsb2NrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0
YXRpY19jYXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3Qp
LCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7CisKKyAgICBhdXRvIHRlbXAxID0gZzY0
KCk7CisgICAgYXV0byB0ZW1wMiA9IGc2NCgpOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjpp
c1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpLCBCMzo6
V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCB0ZW1wMSk7CisgICAgY29uc3Rl
eHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKKyAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3Vu
dDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRo
ZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1t
KDE2KSwgdGVtcDIpOworICAgIGFkZFNoaWZ0KFR5cGU6OkkzMiwgVXJzaGlmdDY0LCB0ZW1wMSwg
dGVtcDIsIHJlc3VsdCk7CisgICAgYXBwZW5kKE1vdmUzMiwgcmVzdWx0LCByZXN1bHQpOworCisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
QVNTRVJUKG1fbG9jYWxzW2luZGV4XS50bXAoKSk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVl
VHlwZShtX2xvY2Fsc1tpbmRleF0udHlwZSgpKSwgdmFsdWUsIG1fbG9jYWxzW2luZGV4XS50bXAo
KSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgVHlwZSB0eXBlID0gbV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisKKyAgICBy
ZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgYXV0byB0ZW1wID0gZzY0KCk7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0YW5jZTo6b2Zmc2V0T2ZH
bG9iYWxzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihpbnN0
YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSksIHRlbXApOworCisgICAg
aW50MzJfdCBvZmZzZXQgPSBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3Rl
cikpOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5
cGUodG9CM1R5cGUodHlwZSkpKSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0
eXBlKSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAg
ICAgIGF1dG8gdGVtcDIgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1t
KG9mZnNldCksIHRlbXAyKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwgdGVtcCwgdGVt
cCk7CisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6YWRkcih0
ZW1wKSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdl
bmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gdGVtcCA9IGc2NCgpOworCisgICAgUkVMRUFT
RV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygp
LCBCMzo6V2lkdGg2NCkpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1
ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpLCB0ZW1wKTsKKworICAgIFR5cGUgdHlw
ZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOworCisgICAgaW50MzJfdCBvZmZzZXQgPSBz
YWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpOworICAgIGlmIChBcmc6
OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjp3aWR0aEZvclR5cGUodG9CM1R5cGUodHlwZSkp
KSkKKyAgICAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6
YWRkcih0ZW1wLCBvZmZzZXQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byB0ZW1wMiA9IGc2
NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0ob2Zmc2V0KSwgdGVtcDIpOwor
ICAgICAgICBhcHBlbmQoQWRkNjQsIHRlbXAyLCB0ZW1wLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5k
KG1vdmVPcEZvclZhbHVlVHlwZSh0eXBlKSwgdmFsdWUsIEFyZzo6YWRkcih0ZW1wKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHsgfTsKK30KKworaW5saW5lIEFpcklSR2VuZXJhdG9yOjpFeHByZXNz
aW9uVHlwZSBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVz
c2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcGVyYXRp
b24pCit7CisgICAgQVNTRVJUKG1fbWVtb3J5QmFzZUdQUik7CisKKyAgICBhdXRvIHJlc3VsdCA9
IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIsIHBvaW50ZXIsIHJlc3VsdCk7CisKKyAgICBzd2l0
Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsKKyAg
ICAgICAgLy8gV2UncmUgbm90IHVzaW5nIHNpZ25hbCBoYW5kbGluZyBhdCBhbGwsIHdlIG11c3Qg
dGhlcmVmb3JlIGNoZWNrIHRoYXQgbm8gbWVtb3J5IGFjY2VzcyBleGNlZWRzIHRoZSBjdXJyZW50
IG1lbW9yeSBzaXplLgorICAgICAgICBBU1NFUlQobV9tZW1vcnlTaXplR1BSKTsKKyAgICAgICAg
QVNTRVJUKHNpemVPZk9wZXJhdGlvbiArIG9mZnNldCA+IG9mZnNldCk7CisgICAgICAgIGF1dG8g
dGVtcCA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHNpemVPZk9wZXJhdGlvbikgKyBvZmZzZXQgLSAxKSwgdGVtcCk7CisgICAg
ICAgIGFwcGVuZChBZGQ2NCwgcmVzdWx0LCB0ZW1wKTsKKworICAgICAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDY0LCBudWxscHRyLCBBcmc6OnJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIHRlbXAsIFRtcChtX21lbW9yeVNpemVH
UFIpKTsKKyAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2Vw
dGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVtb3J5TW9kZTo6U2ln
bmFsaW5nOiB7CisgICAgICAgIC8vIFdlJ3ZlIHZpcnR1YWxseSBtYXBwZWQgNEdpQityZWR6b25l
IGZvciB0aGlzIG1lbW9yeS4gT25seSB0aGUgdXNlci1hbGxvY2F0ZWQgcGFnZXMgYXJlIGFkZHJl
c3NhYmxlLCBjb250aWd1b3VzbHkgaW4gcmFuZ2UgWzAsIGN1cnJlbnRdLAorICAgICAgICAvLyBh
bmQgZXZlcnl0aGluZyBhYm92ZSBpcyBtYXBwZWQgUFJPVF9OT05FLiBXZSBkb24ndCBuZWVkIHRv
IHBlcmZvcm0gYW55IGV4cGxpY2l0IGJvdW5kcyBjaGVjayBpbiB0aGUgNEdpQiByYW5nZSBiZWNh
dXNlIFdlYkFzc2VtYmx5IHJlZ2lzdGVyCisgICAgICAgIC8vIG1lbW9yeSBhY2Nlc3NlcyBhcmUg
MzItYml0LiBIb3dldmVyIFdlYkFzc2VtYmx5IHJlZ2lzdGVyICsgb2Zmc2V0IGFjY2Vzc2VzIHBl
cmZvcm0gdGhlIGFkZGl0aW9uIGluIDY0LWJpdCB3aGljaCBjYW4gcHVzaCBhbiBhY2Nlc3MgYWJv
dmUKKyAgICAgICAgLy8gdGhlIDMyLWJpdCBsaW1pdCAodGhlIG9mZnNldCBpcyB1bnNpZ25lZCAz
Mi1iaXQpLiBUaGUgcmVkem9uZSB3aWxsIGNhdGNoIG1vc3Qgc21hbGwgb2Zmc2V0cywgYW5kIHdl
J2xsIGV4cGxpY2l0bHkgYm91bmRzIGNoZWNrIGFueQorICAgICAgICAvLyByZWdpc3RlciArIGxh
cmdlIG9mZnNldCBhY2Nlc3MuIFdlIGRvbid0IHRoaW5rIHRoaXMgd2lsbCBiZSBnZW5lcmF0ZWQg
ZnJlcXVlbnRseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgdGhhdCBy
ZWdpc3RlciArIGxhcmdlIG9mZnNldCBkb2Vzbid0IGV4Y2VlZCA0R2lCK3JlZHpvbmUgc2luY2Ug
dGhhdCdzIHRlY2huaWNhbGx5IHRoZSBsaW1pdCB3ZSBuZWVkIHRvIGF2b2lkIG92ZXJmbG93aW5n
IHRoZQorICAgICAgICAvLyBQUk9UX05PTkUgcmVnaW9uLCBidXQgaXQncyBiZXR0ZXIgaWYgd2Ug
dXNlIGEgc21hbGxlciBpbW1lZGlhdGUgYmVjYXVzZSBpdCBjYW4gY29kZWdlbnMgYmV0dGVyLiBX
ZSBrbm93IHRoYXQgYW55dGhpbmcgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICAvLyB0aGFu
IHRoZSBkZWNsYXJlZCAnbWF4aW11bScgd2lsbCB0cmFwLCBzbyB3ZSBjYW4gY29tcGFyZSBhZ2Fp
bnN0IHRoYXQgbnVtYmVyLiBJZiB0aGVyZSB3YXMgbm8gZGVjbGFyZWQgJ21heGltdW0nIHRoZW4g
d2Ugc3RpbGwga25vdyB0aGF0CisgICAgICAgIC8vIGFueSBhY2Nlc3MgZXF1YWwgdG8gb3IgZ3Jl
YXRlciB0aGFuIDRHaUIgd2lsbCB0cmFwLCBubyBuZWVkIHRvIGFkZCB0aGUgcmVkem9uZS4KKyAg
ICAgICAgaWYgKG9mZnNldCA+PSBNZW1vcnk6OmZhc3RNYXBwZWRSZWR6b25lQnl0ZXMoKSkgewor
ICAgICAgICAgICAgdWludDY0X3QgbWF4aW11bSA9IG1faW5mby5tZW1vcnkubWF4aW11bSgpID8g
bV9pbmZvLm1lbW9yeS5tYXhpbXVtKCkuYnl0ZXMoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKTsKKyAgICAgICAgICAgIGF1dG8gdGVtcCA9IGc2NCgpOworICAgICAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzaXplT2ZP
cGVyYXRpb24pICsgb2Zmc2V0IC0gMSksIHRlbXApOworICAgICAgICAgICAgYXBwZW5kKEFkZDY0
LCByZXN1bHQsIHRlbXApOworICAgICAgICAgICAgYXV0byBzaXplTWF4ID0gYWRkQ29uc3RhbnQo
VHlwZTo6STY0LCBtYXhpbXVtKTsKKworICAgICAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoNjQsIG51bGxwdHIsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKSwgdGVtcCwgc2l6ZU1heCk7CisgICAgICAgICAg
ICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBhcHBlbmQo
QWRkNjQsIFRtcChtX21lbW9yeUJhc2VHUFIpLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2lubGluZSB1aW50MzJfdCBzaXplT2ZMb2FkT3AoTG9hZE9wVHlwZSBvcCkKK3sKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CisgICAgY2Fz
ZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6CisgICAgICAgIHJldHVybiAxOworICAg
IGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2UzoKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExv
YWQxNlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOgorICAgIGNhc2UgTG9hZE9w
VHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKKyAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOgorICAg
ICAgICByZXR1cm4gNDsKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgY2FzZSBM
b2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFR5cGVkVG1wIEFpcklSR2VuZXJh
dG9yOjplbWl0TG9hZE9wKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVp
bnQzMl90IHVvZmZzZXQpCit7CisgICAgdWludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVyUGx1
c09mZnNldChwb2ludGVyLCB1b2Zmc2V0KTsKKworICAgIFR5cGVkVG1wIGltbVRtcDsKKyAgICBU
eXBlZFRtcCBuZXdQdHI7CisgICAgVHlwZWRUbXAgcmVzdWx0OworCisgICAgYXV0byBsb2FkQXJn
ID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6
OndpZHRoRm9yQnl0ZXMoc2l6ZU9mTG9hZE9wKG9wKSkpKQorICAgICAgICAgICAgcmV0dXJuIEFy
Zzo6YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgICAgICBpbW1UbXAgPSBnNjQoKTsKKyAgICAg
ICAgbmV3UHRyID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZz
ZXQpLCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIGltbVRtcCwgcG9pbnRlciwgbmV3
UHRyKTsKKyAgICAgICAgcmV0dXJuIEFyZzo6YWRkcihuZXdQdHIpOworICAgIH07CisKKyAgICBz
d2l0Y2ggKG9wKSB7CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6IHsKKyAgICAgICAg
cmVzdWx0ID0gZzMyKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOFNpZ25lZEV4dGVu
ZFRvMzIsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6IHsKKyAgICAgICAgcmVzdWx0ID0gZzY0KCk7Cisg
ICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGxvYWRBcmcoKSwg
cmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDhVOiB7CisgICAgICAgIHJlc3VsdCA9IGczMigpOworICAgICAgICBhcHBlbmRFZmZlY3RmdWwo
TG9hZDgsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFU6IHsKKyAgICAgICAgcmVzdWx0ID0gZzY0KCk7Cisg
ICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOCwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTZTaWdu
ZWRFeHRlbmRUbzMyLCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzogeworICAgICAgICByZXN1bHQgPSBn
NjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGxv
YWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1
bHQsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STMyTG9hZDE2VTogeworICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAgICAgYXBwZW5k
RWZmZWN0ZnVsKExvYWQxNiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAgcmVzdWx0
ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTYsIGxvYWRBcmcoKSwgcmVz
dWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJM
b2FkOgorICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1v
dmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDMyVTogeworICAgICAgICByZXN1bHQgPSBnNjQoKTsKKyAgICAgICAg
YXBwZW5kRWZmZWN0ZnVsKE1vdmUzMiwgbG9hZEFyZygpLCByZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6IHsKKyAgICAgICAg
cmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChNb3ZlMzIsIGxvYWRBcmco
KSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKFNpZ25FeHRlbmQzMlRvUHRyLCByZXN1bHQsIHJl
c3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0
TG9hZDogeworICAgICAgICByZXN1bHQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVs
KE1vdmUsIGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOiB7CisgICAgICAgIHJlc3VsdCA9IGYzMigpOworICAg
ICAgICBhcHBlbmRFZmZlY3RmdWwoTW92ZUZsb2F0LCBsb2FkQXJnKCksIHJlc3VsdCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDogeworICAg
ICAgICByZXN1bHQgPSBmNjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmVEb3VibGUs
IGxvYWRBcmcoKSwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmxvYWQoTG9hZE9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWlu
dDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBvaW50ZXIudG1w
KCkuaXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+KG9m
ZnNldCwgc2l6ZU9mTG9hZE9wKG9wKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBFdmVuIHRob3Vn
aCB0aGlzIGlzIHByb3ZhYmx5IG91dCBvZiBib3VuZHMsIGl0J3Mgbm90IGEgdmFsaWRhdGlvbiBl
cnJvciwgc28gd2UgaGF2ZSB0byBoYW5kbGUgaXQKKyAgICAgICAgLy8gYXMgYSBydW50aW1lIGV4
Y2VwdGlvbi4gSG93ZXZlciwgdGhpcyBtYXkgY2hhbmdlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDM1CisgICAgICAgIGF1dG8qIHBhdGNoID0gYWRkUGF0Y2hw
b2ludChCMzo6Vm9pZCk7CisgICAgICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBv
aW50KHBhdGNoLCBUbXAoKSk7CisKKyAgICAgICAgLy8gV2Ugd29uJ3QgcmVhY2ggaGVyZSwgc28g
d2UganVzdCBwaWNrIGEgcmFuZG9tIHJlZy4KKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAg
ICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJ
MzJMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ6CisgICAgICAgIGNh
c2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJM
b2FkOFU6CisgICAgICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkT3BU
eXBlOjpJNjRMb2FkOFU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2UzoKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgICAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQzMlM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDoKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgorICAgICAgICAgICAgcmVzdWx0ID0gZzY0
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2Fk
OgorICAgICAgICAgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMb2FkT3BUeXBlOjpGNjRMb2FkOgorICAgICAgICAgICAgcmVzdWx0ID0gZjY0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXN1
bHQgPSBlbWl0TG9hZE9wKG9wLCBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihwb2ludGVyLCBv
ZmZzZXQsIHNpemVPZkxvYWRPcChvcCkpLCBvZmZzZXQpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KworaW5saW5lIHVpbnQzMl90IHNpemVPZlN0b3JlT3AoU3RvcmVPcFR5cGUgb3ApCit7CisgICAg
c3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlODoKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkkzMlN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUxNjoK
KyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU6CisgICAg
Y2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJT
dG9yZToKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmU6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3RvcmU6CisgICAgICAgIHJldHVybiA4OworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisKK2lubGluZSB2b2lk
IEFpcklSR2VuZXJhdG9yOjplbWl0U3RvcmVPcChTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IHVvZmZzZXQpCit7Cisg
ICAgdWludDMyX3Qgb2Zmc2V0ID0gZml4dXBQb2ludGVyUGx1c09mZnNldChwb2ludGVyLCB1b2Zm
c2V0KTsKKworICAgIFR5cGVkVG1wIGltbVRtcDsKKyAgICBUeXBlZFRtcCBuZXdQdHI7CisKKyAg
ICBhdXRvIHN0b3JlQXJnID0gWyZdICgpIHsKKyAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJG
b3JtKG9mZnNldCwgQjM6OndpZHRoRm9yQnl0ZXMoc2l6ZU9mU3RvcmVPcChvcCkpKSkKKyAgICAg
ICAgICAgIHJldHVybiBBcmc6OmFkZHIocG9pbnRlciwgb2Zmc2V0KTsKKyAgICAgICAgaW1tVG1w
ID0gZzY0KCk7CisgICAgICAgIG5ld1B0ciA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjpiaWdJbW0ob2Zmc2V0KSwgaW1tVG1wKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBpbW1U
bXAsIHBvaW50ZXIsIG5ld1B0cik7CisgICAgICAgIHJldHVybiBBcmc6OmFkZHIobmV3UHRyKTsK
KyAgICB9OworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0
b3JlODoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAgICAgIGFwcGVuZChT
dG9yZTgsIHZhbHVlLCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTE2
OgorICAgICAgICBhcHBlbmQoU3RvcmUxNiwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTMyOgorICAgIGNhc2UgU3Rv
cmVPcFR5cGU6OkkzMlN0b3JlOgorICAgICAgICBhcHBlbmQoTW92ZTMyLCB2YWx1ZSwgc3RvcmVB
cmcoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3Jl
OgorICAgICAgICBhcHBlbmQoTW92ZSwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpGMzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1v
dmVGbG9hdCwgdmFsdWUsIHN0b3JlQXJnKCkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IFN0b3JlT3BUeXBlOjpGNjRTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHZhbHVl
LCBzdG9yZUFyZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnN0b3JlKFN0b3Jl
T3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
dWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHBvaW50ZXIu
dG1wKCkuaXNHUCgpKTsKKworICAgIGlmIChVTkxJS0VMWShzdW1PdmVyZmxvd3M8dWludDMyX3Q+
KG9mZnNldCwgc2l6ZU9mU3RvcmVPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZlbiB0
aG91Z2ggdGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRp
b24gZXJyb3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVudGlt
ZSBleGNlcHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBhdXRvKiB0aHJvd0V4Y2VwdGlv
biA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbi0+c2V0
R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24o
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0p
OworICAgICAgICBlbWl0UGF0Y2hwb2ludCh0aHJvd0V4Y2VwdGlvbiwgVG1wKCkpOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0U3RvcmVPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIo
cG9pbnRlciwgb2Zmc2V0LCBzaXplT2ZTdG9yZU9wKG9wKSksIHZhbHVlLCBvZmZzZXQpOworCisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU2VsZWN0KEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5
cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IEFTU0VSVChub25aZXJvLnR5cGUoKSA9PSB6ZXJvLnR5cGUoKSk7CisgICAgcmVzdWx0ID0gdG1w
Rm9yVHlwZShub25aZXJvLnR5cGUoKSk7CisgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZShu
b25aZXJvLnR5cGUoKSksIG5vblplcm8sIHJlc3VsdCk7CisKKyAgICBCYXNpY0Jsb2NrKiBpc1pl
cm8gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1
cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc1plcm8sIGNvbnRpbnVhdGlvbik7CisKKyAgICBh
cHBlbmQoaXNaZXJvLCBtb3ZlT3BGb3JWYWx1ZVR5cGUoemVyby50eXBlKCkpLCB6ZXJvLCByZXN1
bHQpOworICAgIGFwcGVuZChpc1plcm8sIEp1bXApOworICAgIGlzWmVyby0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisK
KyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0VGllclVwQ2hl
Y2sodWludDMyX3QgZGVjcmVtZW50Q291bnQsIEIzOjpPcmlnaW4gb3JpZ2luKQoreworICAgIFVO
VVNFRF9QQVJBTShvcmlnaW4pOworCisgICAgaWYgKCFtX3RpZXJVcCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBjb3VudGRvd25QdHIgPSBnNjQoKTsKKyAgICBhdXRvIG9sZENvdW50ZG93
biA9IGc2NCgpOworICAgIGF1dG8gbmV3Q291bnRkb3duID0gZzY0KCk7CisKKyAgICBhcHBlbmQo
TW92ZSwgQXJnOjpiaWdJbW0ocmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obV90aWVyVXApKSwg
Y291bnRkb3duUHRyKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBBcmc6OmFkZHIoY291bnRkb3duUHRy
KSwgb2xkQ291bnRkb3duKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEltbUZv
cm0oZGVjcmVtZW50Q291bnQpKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBvbGRDb3VudGRvd24sIG5l
d0NvdW50ZG93bik7CisgICAgYXBwZW5kKFN1YjMyLCBBcmc6OmltbShkZWNyZW1lbnRDb3VudCks
IG5ld0NvdW50ZG93bik7CisgICAgYXBwZW5kKE1vdmUzMiwgbmV3Q291bnRkb3duLCBBcmc6OmFk
ZHIoY291bnRkb3duUHRyKSk7CisKKyAgICBhdXRvKiBwYXRjaCA9IGFkZFBhdGNocG9pbnQoQjM6
OlZvaWQpOworICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOwor
ICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBlZmZlY3RzLndy
aXRlcyA9IEIzOjpIZWFwUmFuZ2U6OnRvcCgpOworICAgIHBhdGNoLT5lZmZlY3RzID0gZWZmZWN0
czsKKworICAgIHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHRpZXJVcCA9IGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIHRpZXJVcFJlc3VtZSA9IGppdC5sYWJlbCgpOworCisgICAgICAgIHBhcmFt
cy5hZGRMYXRlUGF0aChbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICB0aWVy
VXAubGluaygmaml0KTsKKworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgZXh0cmFQYWRkaW5n
Qnl0ZXMgPSAwOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbCA9IHsg
fTsKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGwuYWRkKEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0
ZXJQcmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBleHRyYVBhZGRpbmdCeXRl
cyk7CisKKyAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bV9mdW5jdGlvbkluZGV4KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2Fs
bChqaXQsIHJlZ2lzdGVyc1RvU3BpbGwsIFJlZ2lzdGVyU2V0KCksIG51bWJlck9mU3RhY2tCeXRl
c1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiwgZXh0cmFQYWRkaW5nQnl0ZXMpOworICAgICAg
ICAgICAgaml0Lmp1bXAodGllclVwUmVzdW1lKTsKKworICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
Tm9QdHJUYWc+KGNhbGwpLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtz
OjpzaW5nbGV0b24oKS5zdHViKHRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7CisKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGVtaXRQ
YXRjaHBvaW50KHBhdGNoLCBUbXAoKSwgbmV3Q291bnRkb3duLCBvbGRDb3VudGRvd24pOworfQor
CitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoVHlw
ZSBzaWduYXR1cmUpCit7CisgICAgQmFzaWNCbG9jayogYm9keSA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisg
ICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkp
OworCisgICAgbV9jdXJyZW50QmxvY2sgPSBib2R5OworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVy
VXBDb3VudDo6bG9vcERlY3JlbWVudCgpLCBvcmlnaW4oKSk7CisKKyAgICByZXR1cm4gQ29udHJv
bERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5
cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250
cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoVHlwZSBzaWduYXR1cmUpCit7Cisg
ICAgcmV0dXJuIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBGb3JUeXBl
KHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6VG9wTGV2ZWwsIG1fY29kZS5hZGRCbG9jaygpKTsKK30K
KworQWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhU
eXBlIHNpZ25hdHVyZSkKK3sKKyAgICByZXR1cm4gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25h
dHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OkJsb2NrLCBtX2NvZGUuYWRk
QmxvY2soKSk7Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgCisgICAgLy8gV2Fz
bSBib29scyBhcmUgaTMyLgorICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICBtX2N1
cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YWtlbiwgbm90VGFrZW4pOworCisgICAgbV9jdXJy
ZW50QmxvY2sgPSB0YWtlbjsKKyAgICByZXN1bHQgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2ln
bmF0dXJlLCB0bXBGb3JUeXBlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6SWYsIGNvbnRpbnVhdGlv
biwgbm90VGFrZW4pOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZEVsc2UoQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBjdXJyZW50
U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJy
ZW50U3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBhcHBlbmQoSnVtcCk7CisgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOworICAgIHJldHVybiBhZGRF
bHNlVG9VbnJlYWNoYWJsZShkYXRhKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxz
ZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBBU1NFUlQoZGF0YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpJZik7CisgICAgbV9jdXJyZW50Qmxv
Y2sgPSBkYXRhLnNwZWNpYWw7CisgICAgZGF0YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRy
b2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKHJldHVyblZhbHVlcy5zaXplKCkgPD0gMSk7CisgICAg
aWYgKHJldHVyblZhbHVlcy5zaXplKCkpIHsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlR1BSID0g
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgVG1wIHJldHVyblZhbHVlRlBS
ID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgc3dpdGNoIChkYXRhLnNp
Z25hdHVyZSgpKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgYXBwZW5k
KE1vdmUzMiwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBh
cHBlbmQoUmV0MzIsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCByZXR1cm5WYWx1ZXNb
MF0sIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGFwcGVuZChSZXQ2NCwgcmV0dXJuVmFs
dWVHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAg
ICAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUZQ
Uik7CisgICAgICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJldHVyblZhbHVlRlBSKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGFwcGVu
ZChNb3ZlRG91YmxlLCByZXR1cm5WYWx1ZXNbMF0sIHJldHVyblZhbHVlRlBSKTsKKyAgICAgICAg
ICAgIGFwcGVuZChSZXRGbG9hdCwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGFwcGVuZChSZXRWb2lkKTsKKyAg
ICByZXR1cm4geyB9OworfQorCisvLyBOT1RFOiBBbGwgYnJhbmNoZXMgaW4gV2FzbSBhcmUgb24g
MzItYml0IGludHMKKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKENvbnRyb2xEYXRh
JiBkYXRhLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiBy
ZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhyZXR1cm5WYWx1ZXMsIGRhdGEucmVzdWx0Rm9yQnJhbmNoKCkpOworCisgICAgQmFzaWNCbG9j
ayogdGFyZ2V0ID0gZGF0YS50YXJnZXRCbG9ja0ZvckJyYW5jaCgpOworICAgIGlmIChjb25kaXRp
b24pIHsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgICAgIGFwcGVuZChCcmFuY2hUZXN0MzIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybyksIGNvbmRpdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0LCBjb250aW51YXRpb24pOworICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBlbmQo
SnVtcCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRhcmdldCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkU3dp
dGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
IHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKQorICAgICAgICB1bmlmeVZhbHVlc1dpdGhC
bG9jayhleHByZXNzaW9uU3RhY2ssIHRhcmdldHNbaV0tPnJlc3VsdEZvckJyYW5jaCgpKTsKKyAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRlZmF1bHRUYXJnZXQucmVz
dWx0Rm9yQnJhbmNoKCkpOworCisgICAgLy8gRklYTUU6IEVtaXQgZWl0aGVyIGEganVtcCB0YWJs
ZSBvciBhIGJpbmFyeSBzd2l0Y2ggaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDUzCisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
cmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gdGFyZ2V0
c1tpXS0+dGFyZ2V0QmxvY2tGb3JCcmFuY2goKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGlu
dWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBnNjQo
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKGkpLCBjb25zdGFudCk7CisgICAg
ICAgIGFwcGVuZChCcmFuY2gzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCks
IGNvbnN0YW50LCBjb25kaXRpb24pOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyh0YXJnZXQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBj
b250aW51YXRpb247CisgICAgfQorCisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJs
b2NrLT5zZXRTdWNjZXNzb3JzKGRlZmF1bHRUYXJnZXQudGFyZ2V0QmxvY2tGb3JCcmFuY2goKSk7
CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjplbmRCbG9jayhD
b250cm9sRW50cnkmIGVudHJ5LCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0
YTsKKworICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YS5yZXN1
bHQpOworICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29y
cyhkYXRhLmNvbnRpbnVhdGlvbik7CisKKyAgICByZXR1cm4gYWRkRW5kVG9VbnJlYWNoYWJsZShl
bnRyeSk7Cit9CisKKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShD
b250cm9sRW50cnkmIGVudHJ5KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ29udHJvbERhdGEm
IGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuY29u
dGludWF0aW9uOworCisgICAgaWYgKGRhdGEudHlwZSgpID09IEJsb2NrVHlwZTo6SWYpIHsKKyAg
ICAgICAgYXBwZW5kKGRhdGEuc3BlY2lhbCwgSnVtcCk7CisgICAgICAgIGRhdGEuc3BlY2lhbC0+
c2V0U3VjY2Vzc29ycyhtX2N1cnJlbnRCbG9jayk7CisgICAgfQorCisgICAgZm9yIChjb25zdCBh
dXRvJiByZXN1bHQgOiBkYXRhLnJlc3VsdCkKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisKKyAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZl
IGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJl
dHVybiBoZXJlLgorICAgIGlmIChkYXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsKQor
ICAgICAgICByZXR1cm4gYWRkUmV0dXJuKGRhdGEsIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBh
cmdzLnNpemUoKSk7CisKKyAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOworCisgICAgVHlwZSByZXR1
cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKKyAgICBpZiAocmV0dXJuVHlwZSAhPSBU
eXBlOjpWb2lkKQorICAgICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHJldHVyblR5cGUpOworCisg
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOworCisgICAgaWYgKG1faW5mby5pc0ltcG9y
dGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CisgICAg
ICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1
bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOworCisgICAgICAgIGF1
dG8gY3VycmVudEluc3RhbmNlID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBpbnN0YW5j
ZVZhbHVlKCksIGN1cnJlbnRJbnN0YW5jZSk7CisKKyAgICAgICAgYXV0byB0YXJnZXRJbnN0YW5j
ZSA9IGc2NCgpOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBiZXR0ZXIgaXNl
bCBoZXJlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkzOTk5CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShJbnN0YW5jZTo6b2Zm
c2V0T2ZUYXJnZXRJbnN0YW5jZShmdW5jdGlvbkluZGV4KSksIHRhcmdldEluc3RhbmNlKTsKKyAg
ICAgICAgYXBwZW5kKEFkZDY0LCBpbnN0YW5jZVZhbHVlKCksIHRhcmdldEluc3RhbmNlKTsKKyAg
ICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcih0YXJnZXRJbnN0YW5jZSksIHRhcmdldEluc3Rh
bmNlKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBpc1dhc21CbG9jayA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgICAgICBCYXNpY0Jsb2NrKiBpc0VtYmVkZGVyQmxvY2sgPSBtX2NvZGUuYWRkQmxv
Y2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXNDb25kKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvKSwgdGFyZ2V0SW5zdGFuY2UsIHRhcmdldEluc3RhbmNlKTsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNXYXNtQmxvY2ssIGlzRW1iZWRkZXJC
bG9jayk7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBh
dGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2Ji
ZXIgYWxsIHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZp
bmcgdGhlIGluc3RhbmNlLgorICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3Vt
ZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2lu
Zy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2
ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisgICAgICAgICAgICBWZWN0b3I8Q29u
c3RyYWluZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlv
bkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIHRvVG1wVmVj
dG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAg
ICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBj
YWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAg
ICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBl
bWl0UGF0Y2hwb2ludChpc1dhc21CbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBh
dGNoQXJncykpOworICAgICAgICAgICAgYXBwZW5kKGlzV2FzbUJsb2NrLCBKdW1wKTsKKyAgICAg
ICAgICAgIGlzV2FzbUJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGp1bXBEZXN0aW5hdGlvbiA9IGc2NCgp
OworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgTW92ZSwgQXJnOjpiaWdJbW0o
SW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0aW9uSW5kZXgpKSwganVt
cERlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGFwcGVuZChpc0VtYmVkZGVyQmxvY2ssIEFkZDY0
LCBpbnN0YW5jZVZhbHVlKCksIGp1bXBEZXN0aW5hdGlvbik7CisgICAgICAgICAgICBhcHBlbmQo
aXNFbWJlZGRlckJsb2NrLCBNb3ZlLCBBcmc6OmFkZHIoanVtcERlc3RpbmF0aW9uKSwganVtcERl
c3RpbmF0aW9uKTsKKworICAgICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5y
ZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb2JiZXIgYWxs
IHBvdGVudGlhbCBwaW5uZWQgcmVnaXN0ZXJzIHNpbmNlIHdlIG1pZ2h0IGJlIGxlYXZpbmcgdGhl
IGluc3RhbmNlLgorICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBj
b3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgICAgICBwYXRj
aHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykpOworCisgICAgICAgICAgICBWZWN0b3I8Q29uc3RyYWlu
ZWRUbXA+IHBhdGNoQXJnczsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoanVtcERlc3Rp
bmF0aW9uKTsKKworICAgICAgICAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBD
YWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2hwb2ludCwgdG9UbXBWZWN0b3IoYXJncyksIFsm
XSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgeworICAgICAgICAgICAgICAgIHBhdGNoQXJn
cy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3JldHVyblR5cGVdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwor
ICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDog
MV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgZW1pdFBhdGNocG9pbnQoaXNFbWJlZGRlckJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdU
Rk1vdmUocGF0Y2hBcmdzKSk7CisgICAgICAgICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBK
dW1wKTsKKyAgICAgICAgICAgIGlzRW1iZWRkZXJCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51
YXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b247CisgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFz
c2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnku
CisgICAgICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFj
a0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGN1cnJlbnRJbnN0YW5jZSwgY29udGludWF0aW9u
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2lu
dCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3Jp
dGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5l
ZCA9IHRydWU7CisKKyAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7Cisg
ICAgICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVy
blR5cGUsIHBhdGNocG9pbnQsIHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpW
YWx1ZVJlcCByZXApIHsKKyAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxs
KCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0p
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGVtaXRQYXRjaHBvaW50
KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CisgICAg
QVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAg
bV9tYWtlc0NhbGxzID0gdHJ1ZTsKKyAgICAvLyBOb3RlOiBjYWxsIGluZGlyZWN0IGNhbiBjYWxs
IGVpdGhlciBXZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LiBCZWNhdXNlCisgICAgLy8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gaXMgbGlrZSBjYWxs
aW5nIGludG8gdGhlIGVtYmVkZGVyLCB3ZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgYWxsIGNhbGwg
aW5kaXJlY3RzCisgICAgLy8gY2FuIGJlIHRvIHRoZSBlbWJlZGRlciBmb3Igb3VyIHN0YWNrIGNo
ZWNrIGNhbGN1bGF0aW9uLgorICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgo
bV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUo
KSkpOworCisgICAgYXV0byBjdXJyZW50SW5zdGFuY2UgPSBnNjQoKTsKKyAgICBhcHBlbmQoTW92
ZSwgaW5zdGFuY2VWYWx1ZSgpLCBjdXJyZW50SW5zdGFuY2UpOworCisgICAgRXhwcmVzc2lvblR5
cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IGc2NCgpOworICAgIEV4cHJlc3Npb25UeXBlIGlu
c3RhbmNlc0J1ZmZlciA9IGc2NCgpOworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXJMZW5ndGggPSBnNjQoKTsKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFy
Zzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCksIEIzOjpXaWR0aDY0
KSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKFRhYmxlOjpv
ZmZzZXRPZkZ1bmN0aW9ucygpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSwgQjM6Oldp
ZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0oVGFi
bGU6Om9mZnNldE9mTGVuZ3RoKCksIEIzOjpXaWR0aDY0KSk7CisKKyAgICAgICAgYXBwZW5kKE1v
dmUsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkp
LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0T2ZGdW5j
dGlvbnMoKSksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIpOworICAgICAgICBhcHBlbmQoTW92ZSwg
QXJnOjphZGRyKGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZklu
c3RhbmNlcygpKSwgaW5zdGFuY2VzQnVmZmVyKTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgQXJn
OjphZGRyKGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgsIFRhYmxlOjpvZmZzZXRPZkxlbmd0
aCgpKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfQorCisgICAgYXBwZW5k
KE1vdmUzMiwgY2FsbGVlSW5kZXgsIGNhbGxlZUluZGV4KTsKKworICAgIC8vIENoZWNrIHRoZSBp
bmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCisgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDMyLCBudWxscHRyLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGNhbGxlZUluZGV4LCBjYWxsYWJsZUZ1bmN0aW9uQnVm
ZmVyTGVuZ3RoKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRp
b24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc0NhbGxJbmRpcmVjdCk7CisgICAgfSk7
CisKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gZzY0KCk7CisgICAgeworICAgICAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGc2NCgpOworICAgICAgICAv
LyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29r
aW5nIGZvci4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKHNpemVvZihXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBw
ZW5kKE11bDY0LCBjYWxsZWVJbmRleCwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBh
cHBlbmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIGNhbGxlZVNpZ25hdHVyZUluZGV4
KTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0
dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2lu
dExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29kZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVlIGNvZGUu
CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25h
dHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0aWFsaXplZC4KKyAgICAgICAgLy8gRklY
TUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwg
ZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNp
emVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4gYXNzdW1lcyBpNjQiKTsKKworICAgICAgICAv
LyBGSVhNRTogVGhpcyBzZWVtcyBkdW1iIHRvIGRvIHR3byBjaGVja3MganVzdCBmb3IgYSBuaWNl
ciBlcnJvciBtZXNzYWdlLgorICAgICAgICAvLyBXZSBzaG91bGQgbW92ZSBqdXN0IHRvIHVzZSBh
IHNpbmdsZSBicmFuY2ggYW5kIHRoZW4gZmlndXJlIG91dCB3aGF0CisgICAgICAgIC8vIGVycm9y
IHRvIHVzZSBpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuCisKKyAgICAgICAgYXBwZW5kKE1vdmUs
IEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOwor
CisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChTaWdu
YXR1cmU6OmludmFsaWRJbmRleCA9PSAwLCAiIik7CisgICAgICAgICAgICByZXR1cm4gSW5zdChC
cmFuY2hUZXN0NjQsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyks
IGNhbGxlZVNpZ25hdHVyZUluZGV4LCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIH0s
IFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CisgICAgICAgIH0pOworCisgICAgICAgIEV4cHJlc3Np
b25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1v
dmUsIEFyZzo6YmlnSW1tKFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSksIGV4
cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAg
ICAgIHJldHVybiBJbnN0KEJyYW5jaDY0LCBudWxscHRyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVkU2lnbmF0dXJl
SW5kZXgpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhj
ZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6QmFkU2lnbmF0dXJlKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgLy8gRG8gYSBjb250ZXh0IHN3aXRjaCBpZiBuZWVkZWQuCisgICAgeworICAg
ICAgICBhdXRvIG5ld0NvbnRleHRJbnN0YW5jZSA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjppbmRleChpbnN0YW5jZXNCdWZmZXIsIGNhbGxlZUluZGV4LCA4LCAwKSwgbmV3Q29u
dGV4dEluc3RhbmNlKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBt
X2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9j
b2RlLmFkZEJsb2NrKCk7CisKKyAgICAgICAgYXBwZW5kKEJyYW5jaDY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVl
KCkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24s
IGRvQ29udGV4dFN3aXRjaCk7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNo
cG9pbnQoQjM6OlZvaWQpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CisgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgY2Fs
bGluZyBzb21ldGhpbmcgd2l0aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcp
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNo
UmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0gcGFyYW1z
WzBdLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0YW5jZSA9IHBhcmFt
c1sxXS5ncHIoKTsKKyAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVk
UmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgICAgICBjb25zdCBhdXRv
JiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEdQUlJl
ZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAgICAg
IEFTU0VSVChuZXdDb250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29u
dGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNl
KTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1l
bW9yeSk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFu
IG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlcgorICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAgICAgIEFTU0VS
VChzaXplUmVncy5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQo
IXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNp
emUuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29u
dGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOyAvLyBNZW1vcnk6OnZvaWQqLgorICAgICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hw
b2ludChkb0NvbnRleHRTd2l0Y2gsIHBhdGNocG9pbnQsIFRtcCgpLCBuZXdDb250ZXh0SW5zdGFu
Y2UsIGluc3RhbmNlVmFsdWUoKSk7CisgICAgICAgIGFwcGVuZChkb0NvbnRleHRTd2l0Y2gsIEp1
bXApOworICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9u
KTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9CisKKyAg
ICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZUNvZGUpLCBjYWxsZWVDb2RlKTsKKworICAg
IFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CisgICAgaWYgKHJldHVy
blR5cGUgIT0gVHlwZTo6Vm9pZCkKKyAgICAgICAgcmVzdWx0ID0gdG1wRm9yVHlwZShyZXR1cm5U
eXBlKTsKKworICAgIGF1dG8qIHBhdGNoID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5U
eXBlKSk7CisgICAgcGF0Y2gtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICBwYXRj
aC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVy
IGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5n
IHRoZSBpbnN0YW5jZS4KKyAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGFs
d2F5cyBjYWxsaW5nIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZyBzbworICAgIC8v
IGJlY2F1c2UgdGhlIHdhc20tPndhc20gdGh1bmsgdW5jb25kaXRpb25hbGx5IG92ZXJyaWRlcyB0
aGUgc2l6ZSByZWdpc3RlcnMuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgaGF2ZSB0byBk
byB0aGlzLCBidXQgdGhlIHdhc20tPndhc20gc3R1YiBhc3N1bWVzIGl0IGNhbgorICAgIC8vIHVz
ZSBhbGwgdGhlIHBpbm5lZCByZWdpc3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgIHBhdGNoLT5jbG9iYmVyTGF0ZShQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykp
OworCisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBlbWl0QXJnczsKKyAgICBlbWl0QXJncy5h
cHBlbmQoY2FsbGVlQ29kZSk7CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBD
YWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2gsIHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRt
cCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKKyAgICAgICAgZW1pdEFyZ3MuYXBwZW5kKHsgdG1w
LCByZXAgfSk7CisgICAgfSk7CisgICAgcGF0Y2gtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OworICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdw
cigpLCBXYXNtRW50cnlQdHJUYWcpOworICAgIH0pOworCisgICAgZW1pdFBhdGNocG9pbnQobV9j
dXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIFdURk1vdmUoZW1pdEFyZ3MpKTsKKworICAgIC8v
IFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNl
LCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCisgICAgcmVzdG9yZVdl
YkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZv
Lm1lbW9yeSwgY3VycmVudEluc3RhbmNlLCBtX2N1cnJlbnRCbG9jayk7CisKKyAgICByZXR1cm4g
eyB9OworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeShjb25zdCBFeHByZXNzaW9uVHlw
ZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKQoreworICAgIEFTU0VSVChkc3Qu
dHlwZSgpID09IHNvdXJjZS50eXBlKCkpOworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUo
ZHN0LnR5cGUoKSksIHNvdXJjZSwgZHN0KTsKK30KKwordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5p
ZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBjb25z
dCBSZXN1bHRMaXN0JiByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPD0gcmVz
dWx0U3RhY2suc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNp
emUoKTsgKytpKQorICAgICAgICB1bmlmeShyZXN1bHRbcmVzdWx0LnNpemUoKSAtIDEgLSBpXSwg
cmVzdWx0U3RhY2tbcmVzdWx0U3RhY2suc2l6ZSgpIC0gMSAtIGldKTsKK30KKwordm9pZCBBaXJJ
UkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IEV4cHJl
c3Npb25MaXN0KikKK3sKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gQjM6
Ok9yaWdpbgoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW1wbGVtZW50IGEgd2F5IHRvIGdp
dmUgSW5zdCdzIGFuIG9yaWdpbi4KKyAgICByZXR1cm4gQjM6Ok9yaWdpbigpOworfQorCitFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1
aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9k
ZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQoreworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5h
bEZ1bmN0aW9uPigpOworCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2lu
dEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJzPigpOworICAgIGNvbXBpbGF0aW9u
Q29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxIZWxwZXJz
PigpOworCisgICAgQjM6OlByb2NlZHVyZSBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZSA9IHBy
b2NlZHVyZS5jb2RlKCk7CisKKyAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJp
bnRTdHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKKyAgICAgICAgaWYgKG9yaWdpbi5k
YXRhKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNv
ZGVPcmlnaW4+KG9yaWdpbikpOworICAgIH0pOworICAgIAorICAgIC8vIFRoaXMgbWVhbnMgd2Ug
Y2Fubm90IHVzZSBlaXRoZXIgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJz
KCkgb3IKKyAgICAvLyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCkuIEluIGV4Y2hhbmdlIGZvciB0aGlzIGNvbmNlc3Npb24sIHdlCisgICAgLy8gZG9uJ3Qg
c3RyaWN0bHkgbmVlZCB0byBydW4gQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCksIHdoaWNoIHNh
dmVzIGEgYml0IG9mIENQVSB0aW1lIGF0CisgICAgLy8gb3B0TGV2ZWw9MS4KKyAgICBwcm9jZWR1
cmUuc2V0TmVlZHNVc2VkUmVnaXN0ZXJzKGZhbHNlKTsKKyAgICAKKyAgICBwcm9jZWR1cmUuc2V0
T3B0TGV2ZWwoY29tcGlsYXRpb25Nb2RlID09IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZQorICAg
ICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwoKQorICAgICAg
ICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CisKKyAgICBB
aXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25J
bmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgRnVuY3Rp
b25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CisgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CisKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bVN1
Y2Nlc3NvcnMoKTsgKytpKQorICAgICAgICAgICAgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpLT5h
ZGRQcmVkZWNlc3NvcihibG9jayk7CisgICAgfQorCisgICAgeworICAgICAgICBCMzo6QWlyOjpw
cmVwYXJlRm9yR2VuZXJhdGlvbihjb2RlKTsKKyAgICAgICAgQjM6OkFpcjo6Z2VuZXJhdGUoY29k
ZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CisgICAgICAgIGNvbXBp
bGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFz
ZUJ5cHJvZHVjdHMoKTsKKyAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdp
c3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgIH0KKwor
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRU
eXBlPgordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdENoZWNrc0Zvck1vZE9yRGl2KGJvb2wgaXNT
aWduZWREaXYsIEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0KQorewor
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09IDQgfHwgc2l6ZW9mKEludFR5cGUp
ID09IDgsICIiKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICByZXR1cm4gSW5zdChz
aXplb2YoSW50VHlwZSkgPT0gNCA/IEJyYW5jaFRlc3QzMiA6IEJyYW5jaFRlc3Q2NCwgbnVsbHB0
ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgcmlnaHQsIHJpZ2h0KTsKKyAg
ICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRp
b25UeXBlOjpEaXZpc2lvbkJ5WmVybyk7CisgICAgfSk7CisKKyAgICBpZiAoaXNTaWduZWREaXYp
IHsKKyAgICAgICAgQVNTRVJUKHN0ZDo6aXNfc2lnbmVkPEludFR5cGU+Ojp2YWx1ZSk7CisgICAg
ICAgIEludFR5cGUgbWluID0gc3RkOjpudW1lcmljX2xpbWl0czxJbnRUeXBlPjo6bWluKCk7CisK
KyAgICAgICAgLy8gRklYTUU6IEJldHRlciBpc2VsIGZvciBjb21wYXJlIHdpdGggaW1tcyBoZXJl
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkz
OTk5CisgICAgICAgIGF1dG8gbWluVG1wID0gc2l6ZW9mKEludFR5cGUpID09IDQgPyBnMzIoKSA6
IGc2NCgpOworICAgICAgICBhdXRvIG5lZ09uZSA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gZzMy
KCkgOiBnNjQoKTsKKworICAgICAgICBCMzo6QWlyOjpPcGNvZGUgb3AgPSBzaXplb2YoSW50VHlw
ZSkgPT0gNCA/IENvbXBhcmUzMiA6IENvbXBhcmU2NDsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YmlnSW1tKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtaW4pKSwgbWluVG1wKTsKKyAgICAgICAg
YXBwZW5kKG9wLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKSwgbGVmdCwgbWlu
VG1wLCBtaW5UbXApOworCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSgtMSksIG5lZ09u
ZSk7CisgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCksIHJpZ2h0LCBuZWdPbmUsIG5lZ09uZSk7CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIG1pblRtcCwgbmVnT25lKTsKKyAgICAgICAgfSwK
KyAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6OkludGVnZXJPdmVyZmxvdyk7CisgICAgICAgIH0pOworICAgIH0KK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+Cit2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0
TW9kT3JEaXYoYm9vbCBpc0RpdiwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSBy
aHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
SW50VHlwZSkgPT0gNCB8fCBzaXplb2YoSW50VHlwZSkgPT0gOCwgIiIpOworCisgICAgcmVzdWx0
ID0gc2l6ZW9mKEludFR5cGUpID09IDQgPyBnMzIoKSA6IGc2NCgpOworCisgICAgYm9vbCBpc1Np
Z25lZCA9IHN0ZDo6aXNfc2lnbmVkPEludFR5cGU+Ojp2YWx1ZTsKKworICAgIGlmIChpc0FSTTY0
KCkpIHsKKyAgICAgICAgQjM6OkFpcjo6T3Bjb2RlIGRpdjsKKyAgICAgICAgc3dpdGNoIChzaXpl
b2YoSW50VHlwZSkpIHsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgZGl2ID0gaXNTaWdu
ZWQgPyBEaXYzMiA6IFVEaXYzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6
CisgICAgICAgICAgICBkaXYgPSBpc1NpZ25lZCA/IERpdjY0IDogVURpdjY0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoZGl2LCBsaHMsIHJocywgcmVz
dWx0KTsKKworICAgICAgICBpZiAoIWlzRGl2KSB7CisgICAgICAgICAgICBhcHBlbmQoc2l6ZW9m
KEludFR5cGUpID09IDQgPyBNdWwzMiA6IE11bDY0LCByZXN1bHQsIHJocywgcmVzdWx0KTsKKyAg
ICAgICAgICAgIGFwcGVuZChzaXplb2YoSW50VHlwZSkgPT0gNCA/IFN1YjMyIDogU3ViNjQsIGxo
cywgcmVzdWx0LCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgVG1wIGVheChYODZSZWdpc3RlcnM6
OmVheCk7CisgICAgVG1wIGVkeChYODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICBpZiAoaXNTaWdu
ZWQpIHsKKyAgICAgICAgQjM6OkFpcjo6T3Bjb2RlIGNvbnZlcnRUb0RvdWJsZVdvcmQ7CisgICAg
ICAgIEIzOjpBaXI6Ok9wY29kZSBkaXY7CisgICAgICAgIHN3aXRjaCAoc2l6ZW9mKEludFR5cGUp
KSB7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGNvbnZlcnRUb0RvdWJsZVdvcmQgPSBY
ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzI7CisgICAgICAgICAgICBkaXYgPSBYODZEaXYzMjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBjb252ZXJ0VG9E
b3VibGVXb3JkID0gWDg2Q29udmVydFRvUXVhZFdvcmQ2NDsKKyAgICAgICAgICAgIGRpdiA9IFg4
NkRpdjY0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
V2UgaW1wbGVtZW50ICJyZXMgPSBEaXY8Q2hpbGw+L01vZDxDaGlsbD4obnVtLCBkZW4pIiBhcyBm
b2xsb3dzOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgaWYgKGRlbiArIDEgPD1fdW5zaWdu
ZWQgMSkgeworICAgICAgICAvLyAgICAgICAgIGlmICghZGVuKSB7CisgICAgICAgIC8vICAgICAg
ICAgICAgIHJlcyA9IDA7CisgICAgICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAg
ICAgLy8gICAgICAgICB9CisgICAgICAgIC8vICAgICAgICAgaWYgKG51bSA9PSAtMjE0NzQ4MzY0
OCkgeworICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSBpc0RpdiA/IG51bSA6IDA7CisgICAg
ICAgIC8vICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAg
ICAgIC8vICAgICB9CisgICAgICAgIC8vICAgICByZXMgPSBudW0gKC8gb3IgJSkgZGV2OworICAg
ICAgICAvLyBkb25lOgorCisgICAgICAgIEJhc2ljQmxvY2sqIGRlbklzR29vZCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkZW5NYXlCZUJhZCA9IG1fY29kZS5hZGRC
bG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkZW5Ob3RaZXJvID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygp
OworCisgICAgICAgIGF1dG8gdGVtcCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gZzMyKCkgOiBn
NjQoKTsKKyAgICAgICAgYXV0byBvbmUgPSBhZGRDb25zdGFudChzaXplb2YoSW50VHlwZSkgPT0g
NCA/IFR5cGU6OkkzMiA6IFR5cGU6Okk2NCwgMSk7CisKKyAgICAgICAgYXBwZW5kKHNpemVvZihJ
bnRUeXBlKSA9PSA0ID8gQWRkMzIgOiBBZGQ2NCwgcmhzLCBvbmUsIHRlbXApOworICAgICAgICBh
cHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBCcmFuY2gzMiA6IEJyYW5jaDY0LCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgdGVtcCwgb25lKTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGVuSXNHb29kLCBkZW5NYXlCZUJhZCk7CisKKyAgICAg
ICAgYXBwZW5kKGRlbk1heUJlQmFkLCBYb3I2NCwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBh
cHBlbmQoZGVuTWF5QmVCYWQsIHNpemVvZihJbnRUeXBlKSA9PSA0ID8gQnJhbmNoVGVzdDMyIDog
QnJhbmNoVGVzdDY0LCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCByaHMsIHJo
cyk7CisgICAgICAgIGRlbk1heUJlQmFkLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZGVu
Tm90WmVybyk7CisKKyAgICAgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChkZW5Ob3RaZXJvLCBz
aXplb2YoSW50VHlwZSkgPT0gNCA/IFR5cGU6OkkzMiA6IFR5cGU6Okk2NCwgc3RkOjpudW1lcmlj
X2xpbWl0czxJbnRUeXBlPjo6bWluKCkpOworICAgICAgICBpZiAoaXNEaXYpCisgICAgICAgICAg
ICBhcHBlbmQoZGVuTm90WmVybywgc2l6ZW9mKEludFR5cGUpID09IDQgPyBNb3ZlMzIgOiBNb3Zl
LCBtaW4sIHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gUmVzdWx0IGlz
IHplcm8sIGFzIHNldCBhYm92ZS4uLgorICAgICAgICB9CisgICAgICAgIGFwcGVuZChkZW5Ob3Ra
ZXJvLCBzaXplb2YoSW50VHlwZSkgPT0gNCA/IEJyYW5jaDMyIDogQnJhbmNoNjQsIEFyZzo6cmVs
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBsaHMsIG1pbik7CisgICAgICAgIGRlbk5vdFpl
cm8tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBkZW5Jc0dvb2QpOworCisgICAgICAgIGF1
dG8gZGl2UmVzdWx0ID0gaXNEaXYgPyBlYXggOiBlZHg7CisgICAgICAgIGFwcGVuZChkZW5Jc0dv
b2QsIE1vdmUsIGxocywgZWF4KTsKKyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwgY29udmVydFRv
RG91YmxlV29yZCwgZWF4LCBlZHgpOworICAgICAgICBhcHBlbmQoZGVuSXNHb29kLCBkaXYsIGVh
eCwgZWR4LCByaHMpOworICAgICAgICBhcHBlbmQoZGVuSXNHb29kLCBzaXplb2YoSW50VHlwZSkg
PT0gNCA/IE1vdmUzMiA6IE1vdmUsIGRpdlJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5k
KGRlbklzR29vZCwgSnVtcCk7CisgICAgICAgIGRlbklzR29vZC0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24pOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQjM6OkFpcjo6T3Bjb2RlIGRpdiA9IHNpemVvZihJ
bnRUeXBlKSA9PSA0ID8gWDg2VURpdjMyIDogWDg2VURpdjY0OworCisgICAgVG1wIGRpdlJlc3Vs
dCA9IGlzRGl2ID8gZWF4IDogZWR4OworCisgICAgYXBwZW5kKE1vdmUsIGxocywgZWF4KTsKKyAg
ICBhcHBlbmQoWG9yNjQsIGVkeCwgZWR4KTsKKyAgICBhcHBlbmQoZGl2LCBlYXgsIGVkeCwgcmhz
KTsKKyAgICBhcHBlbmQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBNb3ZlMzIgOiBNb3ZlLCBkaXZS
ZXN1bHQsIHJlc3VsdCk7CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjZW5kaWYKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJEaXZTPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVj
a3NGb3JNb2RPckRpdjxpbnQzMl90Pih0cnVlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9y
RGl2PGludDMyX3Q+KHRydWUsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
UmVtUz4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9k
T3JEaXY8aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JEaXY8aW50
MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4o
RXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8
dWludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PHVpbnQzMl90
Pih0cnVlLCBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVU+KEV4cHJl
c3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQz
Ml90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjx1aW50MzJfdD4oZmFs
c2UsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0RGl2Uz4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50NjRfdD4o
dHJ1ZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjxpbnQ2NF90Pih0cnVlLCBsZWZ0
LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJlbVM+KEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PGludDY0X3Q+KGZhbHNlLCBs
ZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PGludDY0X3Q+KGZhbHNlLCBsZWZ0LCByaWdo
dCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4
cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQ2NF90PihmYWxzZSwgbGVmdCwg
cmlnaHQpOworICAgIGVtaXRNb2RPckRpdjx1aW50NjRfdD4odHJ1ZSwgbGVmdCwgcmlnaHQsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjx1aW50NjRfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0
KTsKKyAgICBlbWl0TW9kT3JEaXY8dWludDY0X3Q+KGZhbHNlLCBsZWZ0LCByaWdodCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMkN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFk
ZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVm
ZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3MzMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFt
c1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Q3R6PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6SW50NjQpOworICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmda
ZXJvczY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICBy
ZXN1bHQgPSBnNjQoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFy
Zyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOwor
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzQ291bnRQ
b3B1bGF0aW9uKCkpIHsKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQo
QjM6OkludDMyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpu
b25lKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgICAgIGppdC5jb3VudFBvcHVsYXRpb24zMihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1sw
XS5ncHIoKSk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50
LCByZXN1bHQsIGFyZyk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCisKKyAg
ICB1aW50MzJfdCAoKnBvcGNvdW50KShpbnQzMl90KSA9IFtdIChpbnQzMl90IHZhbHVlKSAtPiB1
aW50MzJfdCB7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUpOyB9OworICAgIGVtaXRD
Q2FsbChwb3Bjb3VudCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBnNjQoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaWYgKE1hY3Jv
QXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAgIGF1dG8qIHBh
dGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1bGF0aW9uNjQo
cGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKyNlbmRpZgorCisgICAgdWludDY0X3QgKCpwb3Bjb3VudCkoaW50NjRfdCkg
PSBbXSAoaW50NjRfdCB2YWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gX19idWlsdGluX3BvcGNv
dW50bGwodmFsdWUpOyB9OworICAgIGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0LCBhcmcpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPEY2NENvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0
Y2hwb2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVj
dHM6Om5vbmUoKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BT
Y3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0
OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNvbnZlcnRVSW50
NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5mcHIoKSwgcGFyYW1zLmdwU2Ny
YXRjaCgwKSk7CisjZWxzZQorICAgICAgICBqaXQuY29udmVydFVJbnQ2NFRvRG91YmxlKHBhcmFt
c1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAgIHJlc3Vs
dCA9IGY2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludChCMzo6RmxvYXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBC
Mzo6RWZmZWN0czo6bm9uZSgpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuY29u
dmVydFVJbnQ2NFRvRmxvYXQocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFt
cy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0
KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyNlbmRpZgorICAgIH0pOworICAg
IHJlc3VsdCA9IGYzMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lYXJlc3Q+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9p
bnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkTmVhcmVzdEludERvdWJsZShwYXJhbXNb
MV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZjY0KCk7
CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjMyTmVhcmVzdD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9p
bnQoQjM6OkZsb2F0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5v
bmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
IGppdC5yb3VuZFRvd2FyZE5lYXJlc3RJbnRGbG9hdChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1sw
XS5mcHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgZW1pdFBhdGNocG9p
bnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KEV4cHJl
c3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpEb3VibGUpOworICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5kVG93YXJkWmVy
b0RvdWJsZShwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CisgICAgfSk7CisgICAg
cmVzdWx0ID0gZjY0KCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBh
cmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIz
OjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICBqaXQucm91bmRUb3dhcmRaZXJvRmxvYXQocGFyYW1zWzFdLmZwcigpLCBw
YXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGVtaXRQ
YXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5j
U0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkpKSk7CisgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpG
NjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKworICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsK
KyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCksIGFy
ZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBh
cmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAg
ZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaFRlc3QzMiwgbnVsbHB0
ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsK
KyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNl
cHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNo
cG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKHBhcmFtc1sxXS5m
cHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAg
ICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkkzMlRydW5jU0YzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpG
MzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oLXN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkpKTsKKyAgICBhdXRvIG1pbiA9IGFkZENvbnN0YW50
KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpKSk7CisKKyAgICBhdXRvIHRlbXAxID0g
ZzMyKCk7CisgICAgYXV0byB0ZW1wMiA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlRmxvYXQs
IEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3Vi
bGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisK
KyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBu
dWxscHRyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVt
cDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQs
IEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0byog
cGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9JbnQzMihwYXJhbXNb
MV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZzMyKCk7
CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVy
biB7IH07Cit9CisKKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJUcnVuY1VGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRkQ29uc3RhbnQoVHlw
ZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpICogLTIuMCkpOworICAgIGF1dG8gbWluID0g
YWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC0xLjApKTsKKwor
ICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAgYXBw
ZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVu
ZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBhcHBl
bmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICBy
ZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CisgICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6
SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOwor
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnRy
dW5jYXRlRG91YmxlVG9VaW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwor
ICAgIH0pOworICAgIHJlc3VsdCA9IGczMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9p
bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jVUYzMj4oRXhwcmVzc2lvblR5
cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
YXV0byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSAq
IHN0YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIGF1dG8gbWluID0gYWRkQ29uc3RhbnQo
VHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4w
KSkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAxKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAg
ICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAg
ICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3Vu
ZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2lu
dChCMzo6SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9u
ZSgpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
aml0LnRydW5jYXRlRmxvYXRUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIo
KSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0
Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4K
K2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjY0PihFeHByZXNz
aW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBhdXRvIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2
NF90Pigtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+Ojpt
aW4oKSkpKTsKKyAgICBhdXRvIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9j
YXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
NjRfdD46Om1pbigpKSkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVt
cDIgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSwgYXJnLCBtaW4sIHRlbXAx
KTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1w
Mik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBudWxscHRyLCBBcmc6OnJlc0Nv
bmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91
dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBh
dGNocG9pbnQoQjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVj
dHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNb
MF0uZ3ByKCkpOworICAgIH0pOworCisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgZW1pdFBhdGNo
cG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0
PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBhdXRvIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9j
YXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
NjRfdD46Om1pbigpKSAqIC0yLjApKTsKKyAgICBhdXRvIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6
OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CisgICAgCisgICAgYXV0byB0ZW1w
MSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURv
dWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVEb3Vi
bGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVx
dWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1w
MSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0KEJy
YW5jaFRlc3QzMiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
KSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dF
eGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsK
KworICAgIFR5cGVkVG1wIHNpZ25CaXRDb25zdGFudDsKKyAgICBpZiAoaXNYODYoKSkgeworICAg
ICAgICAvLyBTaW5jZSB4ODYgZG9lc24ndCBoYXZlIGFuIGluc3RydWN0aW9uIHRvIGNvbnZlcnQg
ZmxvYXRpbmcgcG9pbnRzIHRvIHVuc2lnbmVkIGludGVnZXJzLCB3ZSBhdCBsZWFzdCB0cnkgdG8g
ZG8gdGhlIHNtYXJ0IHRoaW5nIGlmCisgICAgICAgIC8vIHRoZSBudW1iZXJzIGFyZSB3b3VsZCBi
ZSBwb3NpdGl2ZSBhbnl3YXkgYXMgYSBzaWduZWQgaW50ZWdlci4gU2luY2Ugd2UgY2Fubm90IG1h
dGVyaWFsaXplIGNvbnN0YW50cyBpbnRvIGZwcnMgd2UgaGF2ZSBiMyBkbyBpdAorICAgICAgICAv
LyBzbyB3ZSBjYW4gcG9vbCB0aGVtIGlmIG5lZWRlZC4KKyAgICAgICAgc2lnbkJpdENvbnN0YW50
ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19j
YXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpIC0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQorCisgICAgVmVjdG9yPENv
bnN0cmFpbmVkVG1wPiBhcmdzOworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50
KEIzOjpJbnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25l
KCk7CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBh
cmdzLmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNj
cmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOwor
ICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNY
ODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAg
ICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBq
aXQudHJ1bmNhdGVEb3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIo
KSwgc2NyYXRjaCwgY29uc3RhbnQpOworICAgIH0pOworCisgICAgcmVzdWx0ID0gZzY0KCk7Cisg
ICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RG
TW92ZShhcmdzKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8g
bWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0
aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7Cisg
ICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KSkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVu
ZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVu
ZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJl
dHVybiBJbnN0KEJyYW5jaFRlc3QzMiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlz
LT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5j
KTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJ
bnQ2NCk7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Cisg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1
bmNhdGVGbG9hdFRvSW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAg
IH0pOworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQs
IHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUg
YXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0
byBtYXggPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIHN0
YXRpY19jYXN0PGZsb2F0PigtMi4wKSkpOworICAgIGF1dG8gbWluID0gYWRkQ29uc3RhbnQoVHlw
ZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkp
OworICAgIAorICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7
CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7Cisg
ICAgYXBwZW5kKENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7Cisg
ICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAg
ICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBudWxscHRyLCBBcmc6OnJlc0NvbmQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91
bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgVHlwZWRUbXAgc2lnbkJpdENvbnN0YW50OworICAg
IGlmIChpc1g4NigpKSB7CisgICAgICAgIC8vIFNpbmNlIHg4NiBkb2Vzbid0IGhhdmUgYW4gaW5z
dHJ1Y3Rpb24gdG8gY29udmVydCBmbG9hdGluZyBwb2ludHMgdG8gdW5zaWduZWQgaW50ZWdlcnMs
IHdlIGF0IGxlYXN0IHRyeSB0byBkbyB0aGUgc21hcnQgdGhpbmcgaWYKKyAgICAgICAgLy8gdGhl
IG51bWJlcnMgd291bGQgYmUgcG9zaXRpdmUgYW55d2F5IGFzIGEgc2lnbmVkIGludGVnZXIuIFNp
bmNlIHdlIGNhbm5vdCBtYXRlcmlhbGl6ZSBjb25zdGFudHMgaW50byBmcHJzIHdlIGhhdmUgYjMg
ZG8gaXQKKyAgICAgICAgLy8gc28gd2UgY2FuIHBvb2wgdGhlbSBpZiBuZWVkZWQuCisgICAgICAg
IHNpZ25CaXRDb25zdGFudCA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0PHVp
bnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46
Om1heCgpIC0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSk7CisgICAgfQor
CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBWZWN0b3I8Q29u
c3RyYWluZWRUbXA+IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNYODYo
KSkgeworICAgICAgICBhcmdzLmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAgICAgICBwYXRj
aHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJ
bnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOwor
ICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNj
cmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAg
ICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5mcHIoKSwg
cGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisKKyAgICByZXN1
bHQgPSBnNjQoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2lu
dCwgcmVzdWx0LCBXVEZNb3ZlKGFyZ3MpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KFR5cGUgdHlwZSwgQjM6OkFpcjo6T3Bjb2RlIG9wLCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQodHlwZSA9PSBUeXBlOjpJ
NjQgfHwgdHlwZSA9PSBUeXBlOjpJMzIpOworICAgIHJlc3VsdCA9IHRtcEZvclR5cGUodHlwZSk7
CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXAp
KSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKyAgICAKKyNpZiBDUFUoWDg2XzY0KQorICAgIFRtcCBlY3ggPSBU
bXAoWDg2UmVnaXN0ZXJzOjplY3gpOworICAgIGFwcGVuZChNb3ZlLCB2YWx1ZSwgcmVzdWx0KTsK
KyAgICBhcHBlbmQoTW92ZSwgc2hpZnQsIGVjeCk7CisgICAgYXBwZW5kKG9wLCBlY3gsIHJlc3Vs
dCk7CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3ViKEIz
OjpBaXI6Ok9wY29kZSBvcCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQo
b3AgPT0gU3ViMzIgfHwgb3AgPT0gU3ViNjQpOworCisgICAgcmVzdWx0ID0gb3AgPT0gU3ViMzIg
PyBnMzIoKSA6IGc2NCgpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwgQXJn
OjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIGxocywgcmhzLCByZXN1bHQp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2
KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBTdWIgYQor
ICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKG9wLCByaHMsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxvYXRp
bmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9BU1NF
UlQob3AgPT0gQWJzRmxvYXQgfHwgb3AgPT0gQWJzRG91YmxlKTsKKworICAgIHJlc3VsdCA9IG9w
ID09IEFic0Zsb2F0ID8gZjMyKCkgOiBmNjQoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShvcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIHZhbHVlLCByZXN1bHQp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlzWDg2
KCkpOworCisgICAgaWYgKG9wID09IEFic0Zsb2F0KSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQg
PSBnMzIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih+KDF1bGwgPDwgMzEpKSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmUzMlRv
RmxvYXQsIGNvbnN0YW50LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoQW5kRmxvYXQsIHZhbHVl
LCByZXN1bHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBnNjQoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKH4oMXVsbCA8PCA2MykpLCBjb25zdGFu
dCk7CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgY29uc3RhbnQsIHJlc3VsdCk7Cisg
ICAgICAgIGFwcGVuZChBbmREb3VibGUsIHZhbHVlLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QmluT3Ao
VHlwZSB0eXBlLCBCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVz
c2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6RjMyIHx8IHR5cGUgPT0gVHlwZTo6RjY0KTsKKyAg
ICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBB
cmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIGxocywg
cmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUKGlzWDg2KCkpOworCisgICAgLy8gT3AgYSwgYgorICAgIC8vIG1lYW5zCisgICAgLy8g
YiA9IGIgT3AgYQorICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIGxocywgcmVz
dWx0KTsKKyAgICBhcHBlbmQob3AsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2VpbD4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGFwcGVuZChDZWlsRmxvYXQsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVu
ZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxl
c3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRlbW90
ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGFwcGVuZChDb252ZXJ0RG91
YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2Nv
ZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxvYXQs
IEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcx
KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7
CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhjb250
aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJlc3Vs
dCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFs
LT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAg
IGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9yRXF1
YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2NrID0g
Y29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFy
Zzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEx0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3Vi
bGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNYXg+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAg
ICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50Qmxv
Y2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1
YWwsIEFuZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFsLCBK
dW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBh
cHBlbmQobm90RXF1YWwsIE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQobm90
RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVz
c1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVGbG9hdCwg
YXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAgIGxlc3NUaGFu
LT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNv
bnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGU6OkY2NCwgTXVsRG91
YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChUeXBlOjpGMzIsIERpdkZsb2F0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAg
YXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYz
MkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gRklYTUU6IFdl
IGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3BlcmFu
ZCBmb3JtcyBvbiB4ODYKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkzOTk5CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXV0byB0ZW1wMSA9IGczMigp
OworICAgIGF1dG8gc2lnbiA9IGczMigpOworICAgIGF1dG8gdmFsdWUgPSBnMzIoKTsKKworICAg
IC8vIEZJWE1FOiBUcnkgdG8gdXNlIEltbSB3aGVyZSBwb3NzaWJsZToKKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisgICAgYXBwZW5kKE1vdmVG
bG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oMHg4
MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEsIHNpZ24sIHNpZ24pOwor
CisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5kKE1v
dmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDMyLCB0
ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjMyLCBzaWduLCB2YWx1ZSwgdmFs
dWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGF1
dG8gdGVtcCA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHRlbXApOworICAgIGFw
cGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMy
UmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQo
TW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QW5kPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKEFu
ZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJl
RmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEd0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENv
bXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRl
clRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0PihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Np
b25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQo
TWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxej4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChUZXN0NjQsIEFyZzo6cmVzQ29uZChN
YWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2
NERpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9hdGlu
Z1BvaW50QmluT3AoVHlwZTo6RjY0LCBEaXZEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBZGQ+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBh
cHBlbmQoQWRkRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE9yPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBw
ZW5kKE9yNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlVT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChD
b21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTGVTPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcxLCBy
ZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVy
biB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRDbHo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoQ291bnRM
ZWFkaW5nWmVyb3M2NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVnPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKE5lZ2F0ZUZsb2F0LCBB
cmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoTmVnYXRlRmxvYXQsIGFyZzAsIHJl
c3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBhZGRDb25zdGFudChU
eXBlOjpJMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0wLjAp
KSk7CisgICAgICAgIGF1dG8gdGVtcCA9IGczMigpOworICAgICAgICBhcHBlbmQoTW92ZUZsb2F0
VG8zMiwgYXJnMCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChYb3IzMiwgY29uc3RhbnQsIHRlbXAp
OworICAgICAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdGVtcCwgcmVzdWx0KTsKKyAgICB9Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMkFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGczMigpOworICAgIGFwcGVuZChBbmQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyTHRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0g
ZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJvdHI+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STY0LCBS
b3RhdGVSaWdodDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWJzPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJu
IGFkZEZsb2F0aW5nUG9pbnRBYnMoQWJzRG91YmxlLCBhcmcwLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRTPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENv
bXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiksIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NENvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gRklY
TUU6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28g
b3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkzOTk5CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXV0byB0ZW1wMSA9
IGc2NCgpOworICAgIGF1dG8gc2lnbiA9IGc2NCgpOworICAgIGF1dG8gdmFsdWUgPSBnNjQoKTsK
KworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMSwgdGVtcDEpOworICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwMDAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBlbmQo
QW5kNjQsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwg
YXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZmZmZm
ZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsK
KworICAgIGFwcGVuZChPcjY0LCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChNb3Zl
NjRUb0RvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJNjQ+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0VG9G
bG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90bD4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgLy8gQVJNNjQgZG9l
c24ndCBoYXZlIGEgcm90YXRlIGxlZnQuCisgICAgICAgIGF1dG8gbmV3U2hpZnQgPSBnNjQoKTsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIGFyZzEsIG5ld1NoaWZ0KTsKKyAgICAgICAgYXBwZW5kKE5l
ZzY0LCBuZXdTaGlmdCk7CisgICAgICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJNjQsIFJvdGF0
ZVJpZ2h0NjQsIGFyZzAsIG5ld1NoaWZ0LCByZXN1bHQpOworICAgIH0gZWxzZQorICAgICAgICBy
ZXR1cm4gYWRkU2hpZnQoVHlwZTo6STY0LCBSb3RhdGVMZWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOwor
ICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252
ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDb252ZXJ0
SW50MzJUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxlPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9h
dCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwp
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHZT4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlRmxv
YXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVx
dWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJMzIsIFVyc2hp
ZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTMyPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZjMyKCk7CisgICAgYXV0byB0ZW1wID0gZzY0KCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJn
MCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQsIHRlbXAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXR1cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBSc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkdl
VT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAg
IGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q2VpbD4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDZWlsRG91YmxlLCBhcmcwLCByZXN1bHQp
OworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJHZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBh
ZGRTaGlmdChUeXBlOjpJMzIsIExzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Rmxvb3I+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoRmxvb3JEb3VibGUsIGFyZzAs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlhvcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChYb3IzMiwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5n
UG9pbnRBYnMoQWJzRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1YWwg
PSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9IG1fY29kZS5h
ZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6ZG91
YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAgICBh
cHBlbmQoaXNFcXVhbCwgT3JEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBwZW5k
KGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9u
KTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAg
ICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5zZXRT
dWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFwcGVu
ZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBw
ZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFsLT5z
ZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRp
bnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoTXVsRmxvYXQsIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJldHVybiBhZGRJbnRlZ2VyU3ViKFN1YjY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVp
bnRlcnByZXRGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoTW92
ZUZsb2F0VG8zMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQWRkPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKEFkZDMy
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTdWI+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGU6OkY2
NCwgU3ViRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyT3I+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoT3IzMiwgYXJnMCwgYXJn
MSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0THRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxD
b25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NEx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGcz
MigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0U0k2
ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDb252ZXJ0SW50NjRU
b0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKFhvcjY0LCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVU+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lv
blR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChNdWw2NCwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlw
ZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZjMyKCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKFN1YkZsb2F0LCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4NigpKTsK
KyAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5k
KFN1YkZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UHJvbW90ZUYz
Mj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDb252ZXJ0RmxvYXRU
b0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWRkPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXBwZW5kKEFkZERvdWJs
ZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VTPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2
NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcw
LCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
cmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyTmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
MzIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhcmcwICYmIGFyZzEpOworICAgIGFwcGVuZChDb21w
YXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRSZWludGVycHJldEk2ND4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIo
KTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRmxvb3I+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoRmxvb3JGbG9hdCwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIo
KTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyRXF6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKFRl
c3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVpbnRlcnByZXRGNjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBnNjQoKTsKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4g
YWRkU2hpZnQoVHlwZTo6STY0LCBSc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STY0
LCBVcnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTcXJ0PihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZjY0KCk7CisgICAgYXBwZW5kKFNxcnREb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRT
aGlmdChUeXBlOjpJNjQsIExzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KEV4cHJlc3Np
b25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29t
cGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJU
aGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2ND4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMlJvdGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBp
ZiAoaXNBUk02NCgpKSB7CisgICAgICAgIC8vIEFSTTY0IGRvZXNuJ3QgaGF2ZSBhIHJvdGF0ZSBs
ZWZ0LgorICAgICAgICBhdXRvIG5ld1NoaWZ0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3Zl
LCBhcmcxLCBuZXdTaGlmdCk7CisgICAgICAgIGFwcGVuZChOZWc2NCwgbmV3U2hpZnQpOworICAg
ICAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBSb3RhdGVSaWdodDMyLCBhcmcwLCBuZXdT
aGlmdCwgcmVzdWx0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGFkZFNoaWZ0KFR5cGU6
OkkzMiwgUm90YXRlTGVmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90cj4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJMzIsIFJvdGF0ZVJp
Z2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1
cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVu
ZChTaWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RTPihF
eHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBw
ZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiks
IGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4oRXhwcmVzc2lvblR5cGUg
YXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGY2NCgpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVEb3VibGUsIEFyZzo6VG1w
LCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAsIHJlc3VsdCk7
CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpJ
NjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPigtMC4wKSkpOwor
ICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0
LCBhcmcwLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBjb25zdGFudCwgdGVtcCk7Cisg
ICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICB9CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGY2NCgpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9j
aywgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVx
dWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNF
cXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZERvdWJsZSwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+
c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3Zl
RG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91Ymxl
LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJnMCwg
YXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNvbnRpbnVhdGlv
bik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29ycyhj
b250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRM
ZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAg
ICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
T3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVt
cGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFkZD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChB
ZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNv
bnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBDb250cm9sRGF0YTo6UmVzdWx0TGlzdCBSZXN1bHRMaXN0OwogICAgIHR5
cGVkZWYgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeSBDb250cm9s
RW50cnk7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVz
c2lvbiA9IG51bGxwdHI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0
eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB0eXBlZGVmIFN0cmluZyBF
cnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlwZT4gVW5leHBlY3RlZFJl
c3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJ
KHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtQWly
SVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUg
Ildhc21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtMjcxLDcgKzI3Miwx
MSBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpCiAKICAgICAgICAg
bV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9u
czo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0g
OiBudWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5k
Q29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLmRh
dGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBt
X21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBt
X3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQ7CisgICAgICAg
IGlmIChPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICAgICAgcGFyc2VBbmRDb21w
aWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XSwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBz
aWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBm
dW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1f
Y29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24uZGF0YS5kYXRhKCks
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29t
cGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNt
RXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3Vs
dCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50
aW9uLmNwcAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMzYg
QEAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZwogICAgIHJldHVybiBz
dGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiB9CiAKK2NvbnN0IEpTQ0NhbGxpbmdDb252ZW50
aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxKU0NDYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGljSlNDQ2FsbGluZ0NvbnZl
bnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50
aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbkZs
YWcsIFtdICgpIHsKKyAgICAgICAgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb24uY29uc3RydWN0
KFZlY3RvcjxSZWc+KCksIFZlY3RvcjxSZWc+KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50
aW9uOworfQorCitjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29u
dmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxXYXNtQ2FsbGlu
Z0NvbnZlbnRpb25BaXI+IHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uRmxhZzsKKyAgICBzdGQ6
OmNhbGxfb25jZShzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnLCBbXSAoKSB7CisgICAg
ICAgIFZlY3RvcjxSZWc+IGdwckFyZ3VtZW50UmVnaXN0ZXJzKEdQUkluZm86Om51bWJlck9mQXJn
dW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5m
bzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAgICAgICAgZ3ByQXJndW1l
bnRSZWdpc3RlcnNbaV0gPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisKKyAgICAg
ICAgVmVjdG9yPFJlZz4gZnByQXJndW1lbnRSZWdpc3RlcnMoRlBSSW5mbzo6bnVtYmVyT2ZBcmd1
bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZv
OjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBmcHJBcmd1bWVu
dFJlZ2lzdGVyc1tpXSA9IEZQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKworICAgICAg
ICBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY29uc3RydWN0KFdURk1vdmUoZ3ByQXJndW1l
bnRSZWdpc3RlcnMpLCBXVEZNb3ZlKGZwckFyZ3VtZW50UmVnaXN0ZXJzKSwgUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RhdGljV2Fz
bUNhbGxpbmdDb252ZW50aW9uOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAyNDA2OTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZS5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQmFz
aWNCbG9jay5oIgpAQCAtNDQsMjcgKzQ1LDI3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKLXR5cGVkZWYgdW5zaWduZWQgKCpOZXh0T2Zmc2V0KSh1bnNpZ25lZCBjdXJy
ZW50T2Zmc2V0LCBCMzo6VHlwZSB0eXBlKTsKK3R5cGVkZWYgdW5zaWduZWQgKCpOZXh0T2Zmc2V0
KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KTsKIAogdGVtcGxhdGU8dW5zaWduZWQgaGVhZGVyU2l6
ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CiBjbGFzcyBDYWxsaW5nQ29udmVudGlvbiB7CiBw
dWJsaWM6CiAgICAgQ2FsbGluZ0NvbnZlbnRpb24oVmVjdG9yPFJlZz4mJiBncHJBcmdzLCBWZWN0
b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lzdGVycykKLSAg
ICAgICAgOiBtX2dwckFyZ3MoZ3ByQXJncykKLSAgICAgICAgLCBtX2ZwckFyZ3MoZnByQXJncykK
LSAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoY2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAg
ICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBtX2ZwckFyZ3Mo
V1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92
ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEIz
OjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0b3I8UmVnPiByZWdBcmdzLCBCMzo6
VHlwZSB0eXBlLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAorICAg
IEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChjb25zdCBWZWN0b3I8UmVnPiYgcmVn
QXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIEIz
OjpWYWx1ZVJlcDo6cmVnKHJlZ0FyZ3NbY291bnQrK10pOwogCiAgICAgICAgIGNvdW50Kys7CiAg
ICAgICAgIEIzOjpWYWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQo
c3RhY2tPZmZzZXQpOwotICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFja09m
ZnNldCwgdHlwZSk7CisgICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zm
c2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTczLDEwICs3NCwxMCBA
QCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBCMzo6SW50
MzI6CiAgICAgICAgIGNhc2UgQjM6OkludDY0OgotICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxs
QXJndW1lbnRJbXBsKG1fZ3ByQXJncywgdHlwZSwgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNl
dCk7CisgICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdzLCBn
cEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAgICAgY2FzZSBCMzo6RmxvYXQ6CiAg
ICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFyZ3Vt
ZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpOwor
ICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgZnBBcmd1
bWVudENvdW50LCBzdGFja09mZnNldCk7CiAgICAgICAgIGNhc2UgQjM6OlZvaWQ6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTg5LDE5ICsxOTAsMTQ2IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7CiB9OwogCi1pbmxpbmUg
dW5zaWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlwZSkK
Ky8vIEZJWE1FOiBTaGFyZSBtb3JlIGNvZGUgd2l0aCBDYWxsaW5nQ29udmVudGlvbiBhYm92ZToK
Ky8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQwNjUKK3RlbXBs
YXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgorY2xhc3Mg
Q2FsbGluZ0NvbnZlbnRpb25BaXIgeworcHVibGljOgorICAgIENhbGxpbmdDb252ZW50aW9uQWly
KFZlY3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3RlclNl
dCYmIGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKFdURk1vdmUoZ3By
QXJncykpCisgICAgICAgICwgbV9mcHJBcmdzKFdURk1vdmUoZnByQXJncykpCisgICAgICAgICwg
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUoY2FsbGVlU2F2ZVJlZ2lzdGVycykpCisgICAg
eworICAgICAgICBSZWdpc3RlclNldCBzY3JhdGNoID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKTsK
KyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJk
d2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9ncHJBcmdzKQorICAg
ICAgICAgICAgc2NyYXRjaC5jbGVhcihyZWcpOworICAgICAgICBmb3IgKFJlZyByZWcgOiBtX2Nh
bGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgICAgICBzY3JhdGNoLmNsZWFyKHJlZyk7CisgICAg
ICAgIGZvciAoUmVnIHJlZyA6IHNjcmF0Y2gpCisgICAgICAgICAgICBtX3NjcmF0Y2hHUFJzLmFw
cGVuZChyZWcpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NjcmF0Y2hHUFJzLnNpemUoKSA+
PSAyKTsKKyAgICB9CisKKyAgICBHUFJSZWcgcHJvbG9ndWVTY3JhdGNoKHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBtX3NjcmF0Y2hHUFJzW2ldLmdwcigpOyB9CisKK3ByaXZhdGU6CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0YWNrRnVuYz4KKyAgICB2b2lkIG1h
cnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBzaXplX3QmIGNv
dW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdGdW5jJiByZWdGdW5jLCBjb25zdCBT
dGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IHJl
Z0FyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICByZWdGdW5jKHJlZ0FyZ3NbY291bnQrK10pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgc3RhY2tGdW5jKHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRhdGVP
ZmZzZXQoc3RhY2tPZmZzZXQpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWdG
dW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAgdm9pZCBtYXJzaGFsbEFyZ3VtZW50KFR5cGUg
dHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291bnQsIHNpemVfdCYgZnBBcmd1bWVudENvdW50LCBz
aXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdGdW5jJiByZWdGdW5jLCBjb25zdCBTdGFja0Z1
bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAg
ICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgbWFy
c2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0
LCByZWdGdW5jLCBzdGFja0Z1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVz
KCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGxvYWRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BBcmd1
bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7CisgICAg
ICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRlclNpemU7CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
ICAgIG1hcnNoYWxsQXJndW1lbnQoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50Q291
bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsCisgICAgICAgICAgICAgICAgWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoQjM6OkFpcjo6VG1wKHJlZyks
IGkpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgWyZdIChzaXplX3Qgc3Rh
Y2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihCMzo6QWlyOjpBcmc6OmFk
ZHIoQjM6OkFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgc3RhY2tPZmZzZXQp
LCBpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEl0
J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0b3Ig
Zm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgc2V0dXBDYWxsKEIzOjpBaXI6OkNvZGUmIGNvZGUsIFR5cGUgcmV0dXJuVHlwZSwg
QjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCwgY29uc3QgVmVjdG9yPEIzOjpBaXI6OlRt
cD4mIGFyZ3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBz
aXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3Vu
dCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRlclNpemUgLSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgZm9yIChhdXRvIHRtcCA6IGFyZ3MpIHsKKyAg
ICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQodG1wLmlzR1AoKSA/IFR5cGU6Okk2NCA6IFR5cGU6
OkY2NCwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LAorICAg
ICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9y
KHRtcCwgQjM6OlZhbHVlUmVwOjpyZWcocmVnKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09mZnNldCkgeworICAgICAgICAgICAgICAgICAg
ICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBjb2RlLnJlcXVlc3RD
YWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdu
bWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpT
Q2FsbCgpKTsKKworICAgICAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICAgICAgY2FzZSBU
eXBlOjpWb2lkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgor
ICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENv
bnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJlZyhGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNhc2Ug
VHlwZTo6STY0OgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IEIz
OjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1fZ3By
QXJnczsKKyAgICBjb25zdCBWZWN0b3I8UmVnPiBtX2ZwckFyZ3M7CisgICAgVmVjdG9yPFJlZz4g
bV9zY3JhdGNoR1BSczsKKyAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3Rl
cnM7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJzOworfTsKKwor
aW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWduZWQgY3VycmVudE9mZnNldCkKIHsK
ICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNpemVvZihSZWdpc3Rlcik7CiB9CiAKIGNvbnN0
ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0gRXhlY1N0YXRlOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwotdHlwZWRlZiBDYWxsaW5nQ29udmVudGlvbjxqc2NI
ZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0NDYWxsaW5nQ29udmVudGlvbjsKLQotdHlwZWRl
ZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiAKK3VzaW5nIEpT
Q0NhbGxpbmdDb252ZW50aW9uID0gQ2FsbGluZ0NvbnZlbnRpb248anNjSGVhZGVyU2l6ZSwgbmV4
dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2FsbGluZ0NvbnZlbnRpb24gPSBKU0NDYWxsaW5nQ29u
dmVudGlvbjsKIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVudGlv
bigpOwogY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KTsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXIgPSBDYWxsaW5nQ29udmVudGlvbkFp
cjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3VzaW5nIFdhc21DYWxsaW5nQ29udmVu
dGlvbkFpciA9IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyOworY29uc3QgSlNDQ2FsbGluZ0NvbnZl
bnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9uQWlyKCk7Citjb25zdCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpOworCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHJldmlz
aW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMTAgKzMzMywxMCBAQCBhdXRvIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFw
cGVuZChtX2V4cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNo
cmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3Vs
dCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVz
dWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKCk7CiAgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCBy
ZXN1bHQpKTsKIAotICAgICAgICBpZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lv
bikKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24oKSkKICAg
ICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCiAgICAgICAgIHJl
dHVybiB7IH07CkBAIC0zNjIsMTAgKzM2MiwxMCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChtX2V4cHJl
c3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFy
Z3VtZW50SW5kZXgpOwogCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6
OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4
dDo6ZW1wdHlFeHByZXNzaW9uKCk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFk
ZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCi0gICAgICAg
IGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQorICAgICAgICBpZiAocmVz
dWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbigpKQogICAgICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwOSw3
ICs0MDksNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAg
Y2FzZSBCcjoKICAgICBjYXNlIEJySWY6IHsKICAgICAgICAgdWludDMyX3QgdGFyZ2V0OwotICAg
ICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24gPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247
CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiA9IENvbnRleHQ6OmVtcHR5RXhwcmVz
c2lvbigpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YXJn
ZXQpLCAiY2FuJ3QgZ2V0IGJyIC8gYnJfaWYncyB0YXJnZXQiKTsKICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRih0YXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpLCAiYnIgLyBicl9pZidz
IHRhcmdldCAiLCB0YXJnZXQsICIgZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250
cm9sU3RhY2suc2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudE9wY29kZSA9PSBCcklmKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7CiAgICAgdHlwZWRlZiBG
dW5jdGlvblBhcnNlcjxWYWxpZGF0ZT46OkNvbnRyb2xFbnRyeSBDb250cm9sRW50cnk7CiAKLSAg
ICBzdGF0aWMgY29uc3QgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gVm9pZDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0
dXJuIFZvaWQ7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgogICAgIE5FVkVS
X0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4g
YXJncykgY29uc3QK
</data>
<flag name="review"
          id="377356"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360669</attachid>
            <date>2019-01-30 18:46:27 -0800</date>
            <delta_ts>2019-01-30 18:46:27 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>178539</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwNzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3MSBA
QAorMjAxOS0wMS0zMCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbV2ViQXNzZW1ibHldIENoYW5nZSBCQlEgdG8gZ2VuZXJhdGUgQWlyIElSCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE4MDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3NjUxNzE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxl
ci4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgV2FzbSBjb21waWxlciBmb3IgdGhl
IEJCUSB0aWVyLiBJbnN0ZWFkCisgICAgICAgIG9mIGNvbXBpbGluZyB1c2luZyAgQjMtMDEsIHdl
IG5vdyBnZW5lcmF0ZSBBaXIgY29kZSBkaXJlY3RseS4KKyAgICAgICAgVGhlIGdvYWwgb2YgZG9p
bmcgdGhpcyB3YXMgdG8gc3BlZWQgdXAgY29tcGlsZSB0aW1lcyBmb3IgV2FzbQorICAgICAgICBw
cm9ncmFtcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggcHJvdmlkZXMgdXMgd2l0aCBh
IDIwLTMwJSBjb21waWxlIHRpbWUgc3BlZWR1cC4gSG93ZXZlciwgSQorICAgICAgICBoYXZlIGlk
ZWFzIG9uIGhvdyB0byBpbXByb3ZlIGNvbXBpbGUgdGltZXMgZXZlbiBmdXJ0aGVyLiBGb3IgZXhh
bXBsZSwKKyAgICAgICAgd2Ugc2hvdWxkIHByb2JhYmx5IGltcGxlbWVudCBhIGZhc3RlciBydW5u
aW5nIHJlZ2lzdGVyIGFsbG9jYXRvcjoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NDAzNgorICAgICAgICAKKyAgICAgICAgV2UgY2FuIGFsc28gaW1w
cm92ZSBvbiB0aGUgY29kZSB3ZSBnZW5lcmF0ZS4KKyAgICAgICAgV2Ugc2hvdWxkIGVtaXQgYmV0
dGVyIGNvZGUgZm9yIFN3aXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NDA1MworICAgICAgICBBbmQgd2Ugc2hvdWxkIGRvIGJldHRlciBpbnN0cnVjdGlvbiBz
ZWxlY3Rpb24gaW4gdmFyaW91cworICAgICAgICBhcmVhczogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5Mzk5OQorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6
CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
b2RlOjplbWl0RGVmYXVsdFByb2xvZ3VlKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5oOgor
ICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpU
bXApOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHdhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkNvbnN0cmFpbmVk
VG1wOjpDb25zdHJhaW5lZFRtcCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVkVG1wOjpUeXBl
ZFRtcCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVkVG1wOjpvcGVyYXRvcj09IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZWRUbXA6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUeXBlZFRtcDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OlR5cGVkVG1wOjpvcGVyYXRvciBUbXAgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUeXBlZFRtcDo6b3BlcmF0b3IgQXJnIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VHlwZWRUbXA6OnRtcCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVkVG1wOjp0eXBl
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRh
OjpDb250cm9sRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6dHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjpDb250cm9sRGF0YTo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpoYXNOb25Wb2lkU2lnbmF0dXJlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjp0YXJn
ZXRCbG9ja0ZvckJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpD
b250cm9sRGF0YTo6Y29udmVydElmVG9CbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6cmVzdWx0Rm9yQnJhbmNoIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtcHR5RXhwcmVzc2lvbik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpmYWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OnNldFBhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjp0b1RtcFZlY3Rvcik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjpyZWxlYXNlVG1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnZh
bGlkYXRlSW5zdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpleHRyYWN0
QXJnKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFwcGVuZCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphcHBlbmRFZmZlY3RmdWwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6bmV3VG1wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmczMik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjpnNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZjMyKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmY2NCk6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjp0bXBGb3JUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6ZW1pdFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6ZW1pdENoZWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVt
aXRDQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjptb3ZlT3BGb3JW
YWx1ZVR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6aW5zdGFuY2VW
YWx1ZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQ
bHVzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnJlc3RvcmVX
YXNtQ29udGV4dEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OkFpcklSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmVtaXRUaHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Z2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeSk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpz
aXplT2ZMb2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdExv
YWRPcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpsb2FkKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6c2l6ZU9mU3RvcmVPcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjplbWl0U3RvcmVPcCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRTZWxl
Y3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNr
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkRWxzZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRFbHNl
VG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRS
ZXR1cm4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFN3aXRjaCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OnVuaWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnVu
aWZ5VmFsdWVzV2l0aEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6b3JpZ2luKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlQWlyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0TW9kT3JEaXYpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJEaXZTPik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2VT4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPik6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NERp
dlM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STY0UmVtUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjREaXZVPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFJlbVU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STMyQ3R6Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0ej4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250Pik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0VUk2ND4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRO
ZWFyZXN0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkYzMk5lYXJlc3Q+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6RjY0VHJ1bmM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyVHJ1bmM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNTRjY0Pik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydW5jU0YzMj4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1VGNjQ+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
VHJ1bmNVRjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFRydW5jU0Y2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNTRjMyPik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkU2hpZnQpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkSW50ZWdlclN1Yik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50QWJzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEZsb2F0aW5nUG9pbnRCaW5PcCk6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNlaWw+KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTXVsPik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlN1Yj4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRM
ZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJEZW1vdGVGNjQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6RjMyTWluPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NE5lPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkY2NEx0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkYzMk1heD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNdWw+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2Pik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkNsej4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb3B5c2lnbj4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0VUkz
Mj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpG
MzJSZWludGVycHJldEkzMj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRBbmQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0R3Q+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3FydD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRHZT4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R3RVPik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxej4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjREaXY+KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWRkPik6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE9y
Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkxlVT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJMZVM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0TmU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0Q2x6Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkYzMk5lZz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJBbmQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRVPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJvdHI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWJzPik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkx0Uz4pOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJFcT4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb3B5c2lnbj4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252
ZXJ0U0k2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRSb3RsPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkYzMkx0Pik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEVxPik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxlPik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkdlPik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlNoclU+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFVJMzI+KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hy
Uz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJHZVU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlw
ZTo6RjY0Q2VpbD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJHZVM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STMyU2hsPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkY2NEZsb29yPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlhvcj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJBYnM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWluPik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk11bD4pOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTdWI+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUmVpbnRlcnByZXRG
MzI+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
STMyQWRkPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkY2NFN1Yj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJPcj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRMdFU+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6STY0THRTPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NENvbnZlcnRTSTY0Pik6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFhvcj4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVU+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0TXVsPik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlN1Yj4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRQcm9tb3Rl
RjMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NEFkZD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRHZVM+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0RXh0ZW5kVUkzMj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJOZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRSZWludGVycHJldEk2ND4pOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJFcT4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFcT4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJGbG9vcj4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252
ZXJ0U0kzMj4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJMzJFcXo+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0UmVpbnRlcnByZXRGNjQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hyUz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRTaHJVPik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NFNxcnQ+KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0U2hsPik6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkd0Pik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMldyYXBJNjQ+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
Um90bD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJMzJSb3RyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMkd0VT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRFeHRlbmRTSTMyPik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkd0Uz4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjROZWc+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0TWF4Pik6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NExlVT4pOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRMZVM+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QWRkPik6CisgICAg
ICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgICogd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmVtcHR5RXhwcmVzc2lvbik6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAqIHdh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6anNjQ2Fs
bGluZ0NvbnZlbnRpb25BaXIpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtQ2FsbGluZ0NvbnZl
bnRpb25BaXIpOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAg
ICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50aW9uOjpDYWxsaW5nQ29udmVudGlvbik6Cisg
ICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50aW9uOjptYXJzaGFsbEFyZ3VtZW50SW1w
bCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50aW9uOjptYXJzaGFs
bEFyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb25B
aXI6OkNhbGxpbmdDb252ZW50aW9uQWlyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0Nv
bnZlbnRpb25BaXI6OnByb2xvZ3VlU2NyYXRjaCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkNhbGxpbmdDb252ZW50aW9uQWlyOjptYXJzaGFsbEFyZ3VtZW50SW1wbCBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50aW9uQWlyOjptYXJzaGFsbEFyZ3VtZW50IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb25BaXI6OmhlYWRlclNp
emVJbkJ5dGVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb25BaXI6Omxv
YWRBcmd1bWVudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsaW5nQ29udmVudGlv
bkFpcjo6c2V0dXBDYWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bmV4dEpTQ09mZnNl
dCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAg
ICogd2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
ZW1wdHlFeHByZXNzaW9uKToKKwogMjAxOS0wMS0zMCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBDYWNoZWRCeXRlY29kZSdzIG1vdmUgY29uc3RydWN0b3Ig
c2hvdWxkIG5vdCBjYWxsIGBmcmVlRGF0YUlmT3duZWRgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk3MSw2ICs5NzEsNyBAQCB0b29scy9KU0RvbGxh
clZNLmNwcAogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKIHRvb2xzL1ZNSW5zcGVjdG9y
LmNwcAogCit3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgQG5vLXVuaWZ5CiB3YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAogd2FzbS9XYXNtQkJRUGxhbi5jcHAKIHdhc20vV2FzbUJpbmRpbmcu
Y3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQwNjk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg3NCw5ICs4NzQsMTEgQEAKIAkJNTIxMzIyNDYx
RUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMjI0NDFFQ0JDRTgyMDBGNjU2
MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCAqLzsgfTsKIAkJNTI1MEQyRDIxRThEQTA1
QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI1QzBE
REExRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNUMwREQ4MUU5MzU4NDcwMDIxODRDRCAvKiBXYXNt
Q2FsbGVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTI1QzlDREYyMjAyODU4MzAwODJEQkZEIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Mjg0N0FEOTIxRkZC
ODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCAqLzsgfTsKIAkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8q
IEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1By
b2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFDNEI3MUU5NzdD
NUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVC
bG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyODQ3QURBMjFGRkI4NjMw
MDYxQTlEQiAvKiBXYXNtQWlySVJHZW5lcmF0b3IuaCAqLzsgfTsKIAkJNTJCMzEwRkIxOTc0QUU2
MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8q
IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9j
YXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1
MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzM1OCw2ICszMzYwLDggQEAKIAkJNTI2QUM0QjQxRTk3N0M1RDAwMzUwMEUxIC8qIFdhc21Db2Rl
QmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvZGVC
bG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNkFDNEI1MUU5NzdDNUQw
MDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI3Nzcz
REQxQUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklS
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQzE5NzRBRTg3MDA4
MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyQjMxMEZFMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02NDM0LDYgKzY0MzgsOCBAQAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIz
RTczNiAvKiBqcyAqLywKIAkJCQk1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwICovLAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJ
UkdlbmVyYXRvci5oICovLAorCQkJCTUyODQ3QUQ5MjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNtQWly
SVJHZW5lcmF0b3IuY3BwICovLAorCQkJCTUyODQ3QURBMjFGRkI4NjMwMDYxQTlEQiAvKiBXYXNt
QWlySVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0NBNzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2Fz
bUJCUVBsYW4uY3BwICovLAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJR
UGxhbi5oICovLAogCQkJCTUzRjhEMUZGMUU4Mzg3RDQwMEQyMTExNiAvKiBXYXNtQkJRUGxhbklu
bGluZXMuaCAqLywKQEAgLTg1MjksNiArODUzNSw3IEBACiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAw
QjVBRjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjMzOEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGlt
aXphdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyODQ3QURDMjFGRkI4NjkwMDYxQTlEQiAv
KiBXYXNtQWlySVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFFMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzQUIyNkM2
MUMxQTUzNTkwMEQ4MkFFNiAvKiBCM01hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwNTQwLDYgKzEwNTQ3LDcgQEAKIAkJCQk1MzZCMzE5QTFGNzM1RTc4MDAzN0ZDMzMgLyog
VW5pZmllZFNvdXJjZTEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1RjFGNzFDNTk5
MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMx
OUIxRjczNUU3ODAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UyLW1tLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJNTI1QzlDREYyMjAyODU4MzAwODJEQkZEIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE1NzFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNv
dXJjZTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8q
IFVuaWZpZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTgxRjcxQzU5
OTAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2UzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0MDY5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzY2LDggKzMzNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgVG1wIHJldHVy
blZhbHVlRlBSID0gVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgICAgIHN3
aXRjaCAodmFsdWUtPnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICAg
ICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVlIHRvIGJlIHVzZWQgYXMg
YSBjaGlsZC4gSWYgd2UgZGlkIHdhbnQgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgLy8gdm9p
ZCByZXR1cm4sIHdlJ2QgaW50cm9kdWNlIGEgZGlmZmVyZW50IG9wY29kZSwgbGlrZSBSZXR1cm5W
b2lkLgorICAgICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSBmb3IgYSB2b2lkIHZhbHVl
IHRvIGJlIHVzZWQgYXMgYSBjaGlsZC4gV2UgdXNlIFJldFZvaWQKKyAgICAgICAgICAgICAgICAv
LyBmb3Igdm9pZCByZXR1cm5zLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEludDMy
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJ
KHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHByb3RlY3RlZDoKICAg
ICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBmaW5hbDsK
ICAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0JikgZmluYWw7CiAK
LSAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1
bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gTm90ZSB0
aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBE
dW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkKICAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50
IHRoYXQuCiAgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKICAgICAgICAgdW5zaWduZWQgbnVtSWdu
b3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDYgKzk3LDExIEBAIENvZGU6On5Db2RlKCkKIHsKIH0KIAordm9pZCBDb2RlOjplbWl0RGVmYXVs
dFByb2xvZ3VlKENDYWxsSGVscGVycyYgaml0KQoreworICAgIGRlZmF1bHRQcm9sb2d1ZUdlbmVy
YXRvcihqaXQsICp0aGlzKTsKK30KKwogdm9pZCBDb2RlOjpzZXRSZWdzSW5Qcmlvcml0eU9yZGVy
KEJhbmsgYmFuaywgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MpCiB7CiAgICAgcmVnc0luUHJpb3Jp
dHlPcmRlckltcGwoYmFuaykgPSByZWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNiArMzM1LDggQEAgcHVibGlj
OgogICAgIFJlZ2lzdGVyU2V0IHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGlu
bmVkUmVnczsgfQogICAgIAogICAgIFdlYWtSYW5kb20mIHdlYWtSYW5kb20oKSB7IHJldHVybiBt
X3dlYWtSYW5kb207IH0KKworICAgIHZvaWQgZW1pdERlZmF1bHRQcm9sb2d1ZShDQ2FsbEhlbHBl
cnMmKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIDo6SlNDOjpCMzo6UHJvY2Vk
dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAy
NDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIENvZGU7CiAKIGNsYXNzIFRtcCB7CiBwdWJs
aWM6Ci0gICAgVG1wKCkKKyAgICBjb25zdGV4cHIgVG1wKCkKICAgICAgICAgOiBtX3ZhbHVlKDAp
CiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGNvbnN0ZXhwciBib29s
IGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KGJvb2wsIGNyYXNoSWZXZWJBc3NlbWJs
eUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBjcmFzaCBp
ZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBtZW1vcnkgZm9yIHdhc20uIikgXAogICAgIHYodW5zaWdu
ZWQsIG1heE51bVdlYkFzc2VtYmx5RmFzdE1lbW9yaWVzLCA0LCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIHVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCwgdHJ1ZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgd2Ugd2lsbCBzdG9yZSBjb250ZXh0IGluIGZhc3QgVExTLiBJZiBmYWxzZSwgd2Ugd2ls
bCBwaW4gaXQgdG8gYSByZWdpc3Rlci4iKSBcCisgICAgdihib29sLCB3YXNtQkJRVXNlc0Fpciwg
dHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VXZWJBc3NlbWJseVN0cmVh
bWluZ0FwaSwgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGksIE5vcm1hbCwgIkFsbG93IHRv
IHJ1biBXZWJBc3NlbWJseSdzIFN0cmVhbWluZyBBUEkiKSBcCiAgICAgdihib29sLCB1c2VDYWxs
SUNzRm9yV2ViQXNzZW1ibHlUb0pTQ2FsbHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdp
bGwgdXNlIENhbGxMaW5rSW5mbyB0byBpbmxpbmUgY2FjaGUgV2FzbSB0byBKUyBjYWxscy4iKSBc
CiAgICAgdihib29sLCB1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZywgZmFsc2UsIE5v
cm1hbCwgIlVubmFtZWQgV2ViQXNzZW1ibHkgbW9kdWxlcyBhcmUgaWRlbnRpZmllZCBpbiBiYWNr
dHJhY2VzIHRocm91Z2ggdGhlaXIgaGFzaCwgaWYgYXZhaWxhYmxlLiIpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXYXNtQWlySVJHZW5lcmF0b3IuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUg
IkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZi5oIgorI2luY2x1ZGUgIkIzQ0NhbGxWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzQ2hlY2tTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVl
LmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzUHJvY2Vk
dXJlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5j
bHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxp
bmVzLmgiCisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXYXNtRnVu
Y3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2Rl
T3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJX
YXNtVGh1bmtzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIG5hbWVzcGFjZSBCMzo6
QWlyOworCitzdHJ1Y3QgQ29uc3RyYWluZWRUbXAgeworICAgIENvbnN0cmFpbmVkVG1wKFRtcCB0
bXApCisgICAgICAgIDogQ29uc3RyYWluZWRUbXAodG1wLCB0bXAuaXNSZWcoKSA/IEIzOjpWYWx1
ZVJlcDo6cmVnKHRtcC5yZWcoKSkgOiBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcikKKyAgICB7
IH0KKworICAgIENvbnN0cmFpbmVkVG1wKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApCisgICAg
ICAgIDogdG1wKHRtcCkKKyAgICAgICAgLCByZXAocmVwKQorICAgIHsKKyAgICB9CisKKyAgICBU
bXAgdG1wOworICAgIEIzOjpWYWx1ZVJlcCByZXA7Cit9OworCitjbGFzcyBUeXBlZFRtcCB7Citw
dWJsaWM6CisgICAgY29uc3RleHByIFR5cGVkVG1wKCkKKyAgICAgICAgOiBtX3RtcCgpCisgICAg
ICAgICwgbV90eXBlKFR5cGU6OlZvaWQpCisgICAgeyB9CisKKyAgICBUeXBlZFRtcChUbXAgdG1w
LCBUeXBlIHR5cGUpCisgICAgICAgIDogbV90bXAodG1wKQorICAgICAgICAsIG1fdHlwZSh0eXBl
KQorICAgIHsgfQorCisgICAgVHlwZWRUbXAoY29uc3QgVHlwZWRUbXAmKSA9IGRlZmF1bHQ7Cisg
ICAgVHlwZWRUbXAoVHlwZWRUbXAmJikgPSBkZWZhdWx0OworICAgIFR5cGVkVG1wJiBvcGVyYXRv
cj0oVHlwZWRUbXAmJikgPSBkZWZhdWx0OworICAgIFR5cGVkVG1wJiBvcGVyYXRvcj0oY29uc3Qg
VHlwZWRUbXAmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZWRU
bXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdG1wID09IG90aGVyLm1f
dG1wICYmIG1fdHlwZSA9PSBvdGhlci5tX3R5cGU7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBUeXBlZFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhdG1wKCk7IH0KKworICAgIG9wZXJhdG9yIFRtcCgpIGNvbnN0IHsgcmV0
dXJuIHRtcCgpOyB9CisgICAgb3BlcmF0b3IgQXJnKCkgY29uc3QgeyByZXR1cm4gQXJnKHRtcCgp
KTsgfQorICAgIFRtcCB0bXAoKSBjb25zdCB7IHJldHVybiBtX3RtcDsgfQorICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCitwcml2YXRlOgorCisgICAgVG1wIG1fdG1w
OworICAgIFR5cGUgbV90eXBlOworfTsKKworY2xhc3MgQWlySVJHZW5lcmF0b3IgeworcHVibGlj
OgorICAgIHN0cnVjdCBDb250cm9sRGF0YSB7CisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmln
aW4gb3JpZ2luLCBUeXBlIHJldHVyblR5cGUsIFR5cGVkVG1wIHJlc3VsdFRtcCwgQmxvY2tUeXBl
IHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51
bGxwdHIpCisgICAgICAgICAgICA6IGJsb2NrVHlwZSh0eXBlKQorICAgICAgICAgICAgLCBjb250
aW51YXRpb24oY29udGludWF0aW9uKQorICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCisg
ICAgICAgICAgICAsIHJldHVyblR5cGUocmV0dXJuVHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7IC8vIEZJWE1FOiBVc2Ugb3JpZ2luLgorICAgICAgICAg
ICAgaWYgKHJlc3VsdFRtcCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlICE9
IFR5cGU6OlZvaWQpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVzdWx0VG1wKTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVChyZXR1cm5UeXBlID09
IFR5cGU6OlZvaWQpOworICAgICAgICB9CisKKyAgICAgICAgQ29udHJvbERhdGEoKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQmxvY2tUeXBlOjpJZjoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIklmOiAgICAg
ICAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBl
OjpCbG9jazoKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkJsb2NrOiAgICAiKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmxvY2tUeXBlOjpMb29wOgorICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiTG9vcDogICAgICIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBCbG9ja1R5cGU6OlRvcExldmVsOgorICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiVG9wTGV2ZWw6ICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCJDb250aW51YXRpb246ICIsICpjb250
aW51YXRpb24sICIsIFNwZWNpYWw6ICIpOworICAgICAgICAgICAgaWYgKHNwZWNpYWwpCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCpzcGVjaWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIk5vbmUiKTsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2Nr
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gYmxvY2tUeXBlOyB9CisKKyAgICAgICAgVHlwZSBz
aWduYXR1cmUoKSBjb25zdCB7IHJldHVybiByZXR1cm5UeXBlOyB9CisKKyAgICAgICAgYm9vbCBo
YXNOb25Wb2lkU2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gcmVzdWx0LnNpemUoKTsgfQorCisg
ICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrRm9yQnJhbmNoKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAg
cmV0dXJuIHNwZWNpYWw7CisgICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBjb252ZXJ0SWZUb0Jsb2NrKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKHR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKKyAgICAgICAgICAgIGJsb2Nr
VHlwZSA9IEJsb2NrVHlwZTo6QmxvY2s7CisgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsK
KyAgICAgICAgfQorCisgICAgICAgIHVzaW5nIFJlc3VsdExpc3QgPSBWZWN0b3I8VHlwZWRUbXAs
IDE+OworCisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0Rm9yQnJhbmNoKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHR5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFJlc3VsdExpc3QoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdl
bmVyYXRvcjsKKyAgICAgICAgQmxvY2tUeXBlIGJsb2NrVHlwZTsKKyAgICAgICAgQmFzaWNCbG9j
ayogY29udGludWF0aW9uOworICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOworICAgICAgICBS
ZXN1bHRMaXN0IHJlc3VsdDsKKyAgICAgICAgVHlwZSByZXR1cm5UeXBlOworICAgIH07CisKKyAg
ICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFR5cGVkVG1wOworICAgIHVzaW5nIENvbnRyb2xUeXBl
ID0gQ29udHJvbERhdGE7CisgICAgdXNpbmcgRXhwcmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVz
c2lvblR5cGUsIDE+OworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBDb250cm9sRGF0YTo6UmVzdWx0
TGlzdDsKKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVy
YXRvcj46OkNvbnRyb2xFbnRyeTsKKworICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4
cHJlc3Npb24oKSB7IHJldHVybiB7IH07IH07CisKKyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJp
bmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsK
KyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIEVycm9yVHlwZT47CisgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVjdGVkPHZv
aWQsIEVycm9yVHlwZT47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KKyAgICBO
RVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdz
Li4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhl
bHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBj
b21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOworICAgIH0KKworI2RlZmluZSBX
QVNNX0NPTVBJTEVfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAgIGlmIChV
TkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVy
biBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyAg
ICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUm
LCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVt
b3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBD
b3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJl
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwg
dWludDMyX3QpOworICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90
KTsKKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChCYXNpY0Jsb2NrKiwgVHlwZSwgdWlu
dDY0X3QpOworCisgICAgLy8gTG9jYWxzCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKKyAgICAvLyBHbG9iYWxzCisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKKworICAg
IC8vIE1lbW9yeQorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGxvYWQoTG9h
ZE9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwg
dWludDMyX3Qgb2Zmc2V0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBz
dG9yZShTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUg
dmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ3VycmVu
dE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIC8vIEJhc2ljIG9wZXJhdG9y
cworICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRPcChFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIHRlbXBsYXRlPE9wVHlwZT4KKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRPcChFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVy
bywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICAv
LyBDb250cm9sIGZsb3cKKyAgICBDb250cm9sRGF0YSBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVG9w
TGV2ZWwoVHlwZSBzaWduYXR1cmUpOworICAgIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRCbG9jayhUeXBlIHNpZ25hdHVyZSk7CisgICAgQ29udHJvbERhdGEgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZExvb3AoVHlwZSBzaWduYXR1cmUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgVHlwZSBzaWduYXR1
cmUsIENvbnRyb2xEYXRhJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xEYXRhJik7CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFs
dWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29u
dHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0
JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0
YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IEV4cHJlc3Np
b25MaXN0JiBleHByZXNzaW9uU3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9u
U3RhY2spOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7CisKKyAgICAvLyBDYWxscworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJ
bmRpcmVjdChjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRVbnJlYWNoYWJsZSgpOworCisgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChUeXBl
LCBCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBz
aGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRl
Z2VyU3ViKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlw
ZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxv
YXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRC
aW5PcChUeXBlLCBCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lv
blR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKworICAgIHZvaWQgZHVtcChjb25z
dCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlz
dCogZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIHNldFBhcnNlcihGdW5jdGlvblBhcnNlcjxB
aXJJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKKworICAgIHN0
YXRpYyBWZWN0b3I8VG1wPiB0b1RtcFZlY3Rvcihjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiB2ZWN0
b3IpCisgICAgeworICAgICAgICBWZWN0b3I8VG1wPiByZXN1bHQ7CisgICAgICAgIGZvciAoY29u
c3QgYXV0byYgaXRlbSA6IHZlY3RvcikKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS50
bXAoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCB2YWxpZGF0ZUluc3QoSW5zdCYgaW5zdCkKKyAgICB7CisgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBpZiAoIWluc3QuaXNWYWxpZEZv
cm0oKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbihpbnN0KTsKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBleHRyYWN0QXJnKGNvbnN0IFR5cGVkVG1wJiB0bXApIHsgcmV0dXJuIHRtcC50bXAoKTsg
fQorICAgIHN0YXRpYyBBcmcgZXh0cmFjdEFyZyhjb25zdCBUbXAmIHRtcCkgeyByZXR1cm4gQXJn
KHRtcCk7IH0KKyAgICBzdGF0aWMgQXJnIGV4dHJhY3RBcmcoY29uc3QgQXJnJiBhcmcpIHsgcmV0
dXJuIGFyZzsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZv
aWQgYXBwZW5kKEJhc2ljQmxvY2sqIGJsb2NrLCBLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHVzZSBvcmln
aW4gaGVyZS4KKyAgICAgICAgYXV0byYgaW5zdCA9IGJsb2NrLT5hcHBlbmQoa2luZCwgbnVsbHB0
ciwgZXh0cmFjdEFyZyhhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgdmFsaWRhdGVJbnN0KGluc3Qp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lk
IGFwcGVuZChLaW5kIGtpbmQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAg
ICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywga2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4o
YXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIHZvaWQgYXBwZW5kRWZmZWN0ZnVsKEIzOjpBaXI6Ok9wY29kZSBvcCwgQXJndW1l
bnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgS2luZCBraW5kID0gb3A7CisgICAg
ICAgIGtpbmQuZWZmZWN0cyA9IHRydWU7CisgICAgICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywg
a2luZCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisg
ICAgVG1wIG5ld1RtcChCMzo6QmFuayBiYW5rKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29k
ZS5uZXdUbXAoYmFuayk7CisgICAgfQorCisgICAgVHlwZWRUbXAgZzMyKCkgeyByZXR1cm4geyBu
ZXdUbXAoQjM6OkdQKSwgVHlwZTo6STMyIH07IH0KKyAgICBUeXBlZFRtcCBnNjQoKSB7IHJldHVy
biB7IG5ld1RtcChCMzo6R1ApLCBUeXBlOjpJNjQgfTsgfQorICAgIFR5cGVkVG1wIGYzMigpIHsg
cmV0dXJuIHsgbmV3VG1wKEIzOjpGUCksIFR5cGU6OkYzMiB9OyB9CisgICAgVHlwZWRUbXAgZjY0
KCkgeyByZXR1cm4geyBuZXdUbXAoQjM6OkZQKSwgVHlwZTo6RjY0IH07IH0KKworICAgIFR5cGVk
VG1wIHRtcEZvclR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgcmV0dXJuIGczMigpOworICAg
ICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVybiBnNjQoKTsKKyAgICAgICAg
Y2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICByZXR1cm4gZjMyKCk7CisgICAgICAgIGNhc2Ug
VHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0dXJuIGY2NCgpOworICAgICAgICBjYXNlIFR5cGU6
OlZvaWQ6CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGFkZFBhdGNocG9pbnQoQjM6OlR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3Byb2MuYWRkPEIzOjpQYXRjaHBvaW50VmFsdWU+KHR5cGUs
IEIzOjpPcmlnaW4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+
CisgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1w
IHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQo
bV9jdXJyZW50QmxvY2ssIHBhdGNoLCByZXN1bHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPih0aGVBcmdz
KS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9p
ZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQorICAgIHsKKyAgICAgICAg
ZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFp
bmVkVG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsKKyAgICB9CisKKyAg
ICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBv
aW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0KQorICAgIHsKKyAgICAgICAgZW1pdFBhdGNocG9p
bnQoYmFzaWNCbG9jaywgcGF0Y2gsIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wPigpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGlubGluZVNpemU+CisgICAgdm9pZCBlbWl0
UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBw
YXRjaCwgVG1wIHJlc3VsdCwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBpbmxpbmVTaXplPiYmIGFy
Z3MpCisgICAgeworICAgICAgICBpZiAoIW1fcGF0Y2hwb2ludFNwZWNpYWwpCisgICAgICAgICAg
ICBtX3BhdGNocG9pbnRTcGVjaWFsID0gc3RhdGljX2Nhc3Q8QjM6OlBhdGNocG9pbnRTcGVjaWFs
Kj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxCMzo6UGF0Y2hwb2ludFNwZWNp
YWw+KCkpKTsKKworICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIHBhdGNoLCBBcmc6OnNwZWNpYWwo
bV9wYXRjaHBvaW50U3BlY2lhbCkpOworICAgICAgICBJbnN0IHJlc3VsdE1vdjsKKyAgICAgICAg
aWYgKHJlc3VsdCkgeworICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50eXBlKCkgIT0gQjM6OlZv
aWQpOworICAgICAgICAgICAgc3dpdGNoIChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgQjM6OlZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5yZWcoKSkp
OworICAgICAgICAgICAgICAgIHJlc3VsdE1vdiA9IEluc3QocmVzdWx0LmlzR1AoKSA/IE1vdmUg
OiBNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAocGF0Y2gtPnJlc3VsdENvbnN0cmFpbnQucmVnKCkp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKHBhdGNoLT50eXBlKCkgPT0g
QjM6OlZvaWQpOworICAgICAgICAKKyAgICAgICAgZm9yIChDb25zdHJhaW5lZFRtcCYgdG1wIDog
YXJncykgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgbGVzcyB0aGFuIGlkZWFsIHRv
IGNyZWF0ZSBkdW1teSB2YWx1ZXMganVzdCB0byBzYXRpc2Z5IEFpcidzCisgICAgICAgICAgICAv
LyB2YWxpZGF0aW9uLiBXZSBzaG91bGQgYWJzdHJjYXQgUGF0Y2ggZW5vdWdoIHNvIFZhbHVlUmVw
J3MgZG9uJ3QgbmVlZCB0byBiZQorICAgICAgICAgICAgLy8gYmFja2VkIGJ5IFZhbHVlcy4KKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQw
NDAKKyAgICAgICAgICAgIEIzOjpWYWx1ZSogZHVtbXlWYWx1ZSA9IG1fcHJvYy5hZGRDb25zdGFu
dChCMzo6T3JpZ2luKCksIHRtcC50bXAuaXNHUCgpID8gQjM6OkludDY0IDogQjM6OkRvdWJsZSwg
MCk7CisgICAgICAgICAgICBwYXRjaC0+YXBwZW5kKGR1bW15VmFsdWUsIHRtcC5yZXApOworICAg
ICAgICAgICAgc3dpdGNoICh0bXAucmVwLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBCMzo6
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KHRtcC50bXApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCMzo6
VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgICAgIHBhdGNoLT5lYXJseUNsb2JiZXJl
ZCgpLmNsZWFyKHRtcC5yZXAucmVnKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChiYXNpY0Js
b2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCB0bXAucmVw
LnJlZygpKTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcCh0bXAucmVwLnJl
ZygpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEIzOjpWYWx1
ZVJlcDo6U3RhY2tBcmd1bWVudDogeworICAgICAgICAgICAgICAgIGF1dG8gYXJnID0gQXJnOjpj
YWxsQXJnKHRtcC5yZXAub2Zmc2V0RnJvbVNQKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChi
YXNpY0Jsb2NrLCB0bXAudG1wLmlzR1AoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCB0bXAudG1wLCBh
cmcpOworICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChwYXRjaC0+cmVzdWx0Q29uc3RyYWludC5pc1JlZygpKQor
ICAgICAgICAgICAgcGF0Y2gtPmxhdGVDbG9iYmVyZWQoKS5jbGVhcihwYXRjaC0+cmVzdWx0Q29u
c3RyYWludC5yZWcoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNoLT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKGc2NCgp
LnRtcCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0Y2gtPm51bUZQU2NyYXRjaFJl
Z2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoZjY0KCkudG1wKCkp
OworCisgICAgICAgIHZhbGlkYXRlSW5zdChpbnN0KTsKKyAgICAgICAgYmFzaWNCbG9jay0+YXBw
ZW5kKFdURk1vdmUoaW5zdCkpOworICAgICAgICBpZiAocmVzdWx0TW92KSB7CisgICAgICAgICAg
ICB2YWxpZGF0ZUluc3QocmVzdWx0TW92KTsKKyAgICAgICAgICAgIGJhc2ljQmxvY2stPmFwcGVu
ZChXVEZNb3ZlKHJlc3VsdE1vdikpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJyYW5jaCwgdHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdENoZWNr
KGNvbnN0IEJyYW5jaCYgbWFrZUJyYW5jaCwgY29uc3QgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCisg
ICAgeworICAgICAgICAvLyBXZSBmYWlsIGFsb25nIHRoZSB0cnV0aHkgZWRnZSBvZiAnYnJhbmNo
Jy4KKyAgICAgICAgSW5zdCBicmFuY2ggPSBtYWtlQnJhbmNoKCk7CisKKyAgICAgICAgLy8gRklY
TUU6IE1ha2UgYSBoYXNobWFwIG9mIHRoZXNlLgorICAgICAgICBCMzo6Q2hlY2tTcGVjaWFsOjpL
ZXkga2V5KGJyYW5jaCk7CisgICAgICAgIEIzOjpDaGVja1NwZWNpYWwqIHNwZWNpYWwgPSBzdGF0
aWNfY2FzdDxCMzo6Q2hlY2tTcGVjaWFsKj4obV9jb2RlLmFkZFNwZWNpYWwoc3RkOjptYWtlX3Vu
aXF1ZTxCMzo6Q2hlY2tTcGVjaWFsPihrZXkpKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFJlbW92
ZSB0aGUgbmVlZCBmb3IgZHVtbXkgdmFsdWVzCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQwNDAKKyAgICAgICAgQjM6OlZhbHVlKiBkdW1teVBy
ZWRpY2F0ZSA9IG1fcHJvYy5hZGRDb25zdGFudChCMzo6T3JpZ2luKCksIEIzOjpJbnQzMiwgNDIp
OworICAgICAgICBCMzo6Q2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fcHJvYy5hZGQ8QjM6OkNo
ZWNrVmFsdWU+KEIzOjpDaGVjaywgQjM6Ok9yaWdpbigpLCBkdW1teVByZWRpY2F0ZSk7CisgICAg
ICAgIGNoZWNrVmFsdWUtPnNldEdlbmVyYXRvcihnZW5lcmF0b3IpOworCisgICAgICAgIEluc3Qg
aW5zdChQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpKTsKKyAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZFZlY3RvcihicmFuY2guYXJncyk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmQoV1RGTW92ZShpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmMsIHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgdm9pZCBlbWl0Q0NhbGwoRnVuYyBmdW5j
LCBUeXBlZFRtcCByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICB7CisgICAgICAgIGVtaXRDQ2Fs
bChtX2N1cnJlbnRCbG9jaywgZnVuYywgcmVzdWx0LCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pOworICAgIH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYywgdHlwZW5hbWUgLi4uQXJn
cz4KKyAgICB2b2lkIGVtaXRDQ2FsbChCYXNpY0Jsb2NrKiBibG9jaywgRnVuYyBmdW5jLCBUeXBl
ZFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKKyAgICB7CisgICAgICAgIEIzOjpUeXBlIHJl
c3VsdFR5cGUgPSBCMzo6Vm9pZDsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAg
c3dpdGNoIChyZXN1bHQudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAg
ICAgICAgICAgICAgICByZXN1bHRUeXBlID0gQjM6OkludDMyOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAgICAgICAgICAgcmVzdWx0
VHlwZSA9IEIzOjpJbnQ2NDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVHlwZTo6RjMyOgorICAgICAgICAgICAgICAgIHJlc3VsdFR5cGUgPSBCMzo6RmxvYXQ7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgICAgICByZXN1bHRUeXBlID0gQjM6OkRvdWJsZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
bWFrZUR1bW15VmFsdWUgPSBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGxlc3MgdGhhbiBpZGVhbCB0byBjcmVhdGUgZHVtbXkgdmFsdWVzIGp1c3QgdG8gc2F0
aXNmeSBBaXIncworICAgICAgICAgICAgLy8gdmFsaWRhdGlvbi4gV2Ugc2hvdWxkIGFic3RyY2F0
IENDYWxsIGVub3VnaCBzbyB3ZSdyZSBub3QgcmVsaWFudCBvbiBhcmd1bWVudHMKKyAgICAgICAg
ICAgIC8vIHRvIHRoZSBCMzo6Q0NhbGxWYWx1ZS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQwNDAKKyAgICAgICAgICAgIGlmICh0bXAu
aXNHUCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkQ29uc3RhbnQoQjM6Ok9y
aWdpbigpLCBCMzo6SW50NjQsIDApOworICAgICAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGRDb25z
dGFudChCMzo6T3JpZ2luKCksIEIzOjpEb3VibGUsIDApOworICAgICAgICB9OworCisgICAgICAg
IEIzOjpWYWx1ZSogZHVtbXlGdW5jID0gbV9wcm9jLmFkZENvbnN0YW50KEIzOjpPcmlnaW4oKSwg
QjM6OkludDY0LCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihmdW5jKSk7CisgICAgICAgIEIzOjpW
YWx1ZSogb3JpZ2luID0gbV9wcm9jLmFkZDxCMzo6Q0NhbGxWYWx1ZT4ocmVzdWx0VHlwZSwgQjM6
Ok9yaWdpbigpLCBCMzo6RWZmZWN0czo6bm9uZSgpLCBkdW1teUZ1bmMsIG1ha2VEdW1teVZhbHVl
KHRoZUFyZ3MpLi4uKTsKKworICAgICAgICBJbnN0IGluc3QoQ0NhbGwsIG9yaWdpbik7CisKKyAg
ICAgICAgVG1wIGNhbGxlZSA9IGc2NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW1Q
dHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLCBCM0NDYWxsUHRyVGFnKSksIGNhbGxlZSk7
CisgICAgICAgIGluc3QuYXJncy5hcHBlbmQoY2FsbGVlKTsKKworICAgICAgICBpZiAocmVzdWx0
KQorICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChyZXN1bHQudG1wKCkpOworCisgICAgICAg
IGZvciAoVG1wIHRtcCA6IFZlY3RvcjxUbXAsIHNpemVvZi4uLihBcmdzKT46OmZyb20odGhlQXJn
cy50bXAoKS4uLikpCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7CisKKyAgICAg
ICAgYmxvY2stPmFwcGVuZChXVEZNb3ZlKGluc3QpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQjM6
OkFpcjo6T3Bjb2RlIG1vdmVPcEZvclZhbHVlVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBy
ZXR1cm4gTW92ZTMyOworICAgICAgICBjYXNlIFR5cGU6Okk2NDoKKyAgICAgICAgICAgIHJldHVy
biBNb3ZlOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIHJldHVybiBNb3Zl
RmxvYXQ7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcmV0dXJuIE1vdmVE
b3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBlbWl0VGhyb3dFeGNlcHRp
b24oQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisKKyAgICB2b2lkIGVtaXRUaWVyVXBD
aGVjayh1aW50MzJfdCBkZWNyZW1lbnRDb3VudCwgQjM6Ok9yaWdpbik7CisKKyAgICBFeHByZXNz
aW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKKyAgICBFeHByZXNzaW9uVHlw
ZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCk7CisgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CisKKyAg
ICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlJiBkc3QsIGNvbnN0IEV4cHJlc3Npb25U
eXBlJiBzb3VyY2UpOworICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVz
c2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiBzdGFjayk7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KKyAgICB2b2lkIGVtaXRDaGVja3NGb3JNb2RPckRp
dihib29sIGlzU2lnbmVkRGl2LCBFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSBy
aWdodCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KKyAgICB2b2lkIGVtaXRN
b2RPckRpdihib29sIGlzRGl2LCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJo
cywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKKyAgICBpbnQzMl90IFdBUk5fVU5VU0VEX1JF
VFVSTiBmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0KEV4cHJlc3Npb25UeXBlJiwgdWludDMyX3QpOwor
CisgICAgdm9pZCByZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiwgVHlwZWRU
bXApOworICAgIGVudW0gY2xhc3MgUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgeyBObywgWWVzIH07
CisgICAgdm9pZCByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3Rh
Y2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mLCBUeXBlZFRtcCBpbnN0YW5jZSwgQmFz
aWNCbG9jayopOworCisgICAgQjM6Ok9yaWdpbiBvcmlnaW4oKTsKKworICAgIEZ1bmN0aW9uUGFy
c2VyPEFpcklSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CisgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1f
Y29tcGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CisgICAgY29uc3Qg
dW5zaWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKKyAgICBjb25zdCBUaWVyVXBD
b3VudCogbV90aWVyVXAgeyBudWxscHRyIH07CisKKyAgICBCMzo6UHJvY2VkdXJlJiBtX3Byb2M7
CisgICAgQ29kZSYgbV9jb2RlOworICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVs
bHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OworICAgIFZl
Y3RvcjxUeXBlZFRtcD4gbV9sb2NhbHM7CisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFu
ZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3
aXRoLgorICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
R1BSUmVnIG1fbWVtb3J5U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgbV93
YXNtQ29udGV4dEluc3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGJvb2wgbV9tYWtl
c0NhbGxzIHsgZmFsc2UgfTsKKworICAgIFR5cGVkVG1wIG1faW5zdGFuY2VWYWx1ZTsgLy8gQWx3
YXlzIHVzZSB0aGUgYWNjZXNzb3IgYmVsb3cgdG8gZW5zdXJlIHRoZSBpbnN0YW5jZSB2YWx1ZSBp
cyBtYXRlcmlhbGl6ZWQgd2hlbiB1c2VkLgorICAgIGJvb2wgbV91c2VzSW5zdGFuY2VWYWx1ZSB7
IGZhbHNlIH07CisgICAgVHlwZWRUbXAgaW5zdGFuY2VWYWx1ZSgpCisgICAgeworICAgICAgICBt
X3VzZXNJbnN0YW5jZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1faW5zdGFuY2VWYWx1
ZTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyB7IDAgfTsK
KworICAgIEIzOjpQYXRjaHBvaW50U3BlY2lhbCogbV9wYXRjaHBvaW50U3BlY2lhbCB7IG51bGxw
dHIgfTsKK307CisKKy8vIE1lbW9yeSBhY2Nlc3NlcyBpbiBXZWJBc3NlbWJseSBoYXZlIHVuc2ln
bmVkIDMyLWJpdCBvZmZzZXRzLCB3aGVyZWFzIHRoZXkgaGF2ZSBzaWduZWQgMzItYml0IG9mZnNl
dHMgaW4gQjMuCitpbnQzMl90IEFpcklSR2VuZXJhdG9yOjpmaXh1cFBvaW50ZXJQbHVzT2Zmc2V0
KEV4cHJlc3Npb25UeXBlJiBwdHIsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG9mZnNldCkgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNQdHIg
PSBwdHI7CisgICAgICAgIHB0ciA9IGc2NCgpOworICAgICAgICBhdXRvIGNvbnN0YW50ID0gZzY0
KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCBjb25zdGFudCk7
CisgICAgICAgIGFwcGVuZChBZGQ2NCwgY29uc3RhbnQsIHByZXZpb3VzUHRyLCBwdHIpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCBBaXJJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ss
IFR5cGVkVG1wIGluc3RhbmNlKQoreworICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsK
KyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAg
ICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VOZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpCisgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6c3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UocGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFu
Y2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEJlY2F1c2UgV2Fz
bVRvV2FzbSBjYWxsIGNsb2JiZXJzIHdhc21Db250ZXh0SW5zdGFuY2UgcmVnaXN0ZXIgYW5kIGRv
ZXMgbm90IHJlc3RvcmUgaXQsIHdlIG5lZWQgdG8gcmVzdG9yZSBpdCBpbiB0aGUgY2FsbGVyIHNp
ZGUuCisgICAgLy8gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIEFyZ3VtZW50UmVnIHRvIHRo
aXMgKGxvZ2ljYWxseSkgaW1tdXRhYmxlIHBpbm5lZCByZWdpc3Rlci4KKyAgICBhdXRvKiBwYXRj
aHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CisgICAgQjM6OkVmZmVjdHMgZWZmZWN0
cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVl
OworICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsKKyAgICBwYXRjaHBv
aW50LT5lZmZlY3RzID0gZWZmZWN0czsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdp
c3RlclNldChtX3dhc21Db250ZXh0SW5zdGFuY2VHUFIpKTsKKyAgICBHUFJSZWcgd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUiA9IG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKKyAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW0pIHsKKyAgICAgICAgaml0Lm1vdmUocGFyYW1bMF0uZ3By
KCksIHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOworICAgIH0pOworICAgIGVtaXRQYXRjaHBvaW50
KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOworfQorCitBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1v
ZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2Fz
bUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCisgICAgOiBtX2luZm8oaW5m
bykKKyAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9jb21waWxhdGlvbk1vZGUoY29tcGlsYXRp
b25Nb2RlKQorICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCisgICAgLCBtX3Rp
ZXJVcCh0aWVyVXApCisgICAgLCBtX3Byb2MocHJvY2VkdXJlKQorICAgICwgbV9jb2RlKG1fcHJv
Yy5jb2RlKCkpCisgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzKQoreworICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7Cisg
ICAgbV9yb290QmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKworICAgIC8vIEZJWE1FIHdlIGRvbid0
IHJlYWxseSBuZWVkIHRvIHBpbiByZWdpc3RlcnMgaGVyZSBpZiB0aGVyZSdzIG5vIG1lbW9yeS4g
SXQgbWFrZXMgd2FzbSAtPiB3YXNtIHRodW5rcyBzaW1wbGVyIGZvciBub3cuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2MjMKKyAgICBjb25zdCBQaW5uZWRSZWdp
c3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworCisgICAg
bV9tZW1vcnlCYXNlR1BSID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICBtX2Nv
ZGUucGluUmVnaXN0ZXIobV9tZW1vcnlCYXNlR1BSKTsKKworICAgIG1fd2FzbUNvbnRleHRJbnN0
YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CisgICAgaWYg
KCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX3dh
c21Db250ZXh0SW5zdGFuY2VHUFIpOworCisgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2ln
bmFsaW5nKSB7CisgICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNp
emVPZmZzZXQpOworICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBwaW5uZWRSZWdzLnNpemVSZWdp
c3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOworICAgICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdp
c3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCisgICAgICAgICAg
ICBtX2NvZGUucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOworICAgIH0KKworICAg
IGlmICh0aHJvd1dhc21FeGNlcHRpb24pCisgICAgICAgIFRodW5rczo6c2luZ2xldG9uKCkuc2V0
VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7CisKKyAgICBpZiAoaW5mby5t
ZW1vcnkpIHsKKyAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICAgICAgY2FzZSBNZW1vcnlN
b2RlOjpCb3VuZHNDaGVja2luZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1l
bW9yeU1vZGU6OlNpZ25hbGluZzoKKyAgICAgICAgICAgIC8vIE1vc3QgbWVtb3J5IGFjY2Vzc2Vz
IGluIHNpZ25hbGluZyBtb2RlIGRvbid0IGRvIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAvLyBl
eGNlcHRpb24gY2hlY2sgYmVjYXVzZSB0aGV5IGNhbiByZWx5IG9uIGZhdWx0IGhhbmRsaW5nIHRv
IGRldGVjdAorICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gRmF1bHRTaWdu
YWxIYW5kbGVyIG5vbmV0aGVsZXNzIG5lZWRzIHRoZQorICAgICAgICAgICAgLy8gdGh1bmsgdG8g
ZXhpc3Qgc28gdGhhdCBpdCBjYW4ganVtcCB0byB0aGF0IHRodW5rLgorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKSkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb2RlLnNldE51bUVudHJ5cG9pbnRz
KDEpOworCisgICAgR1BSUmVnIGNvbnRleHRJbnN0YW5jZSA9IENvbnRleHQ6OnVzZUZhc3RUTFMo
KSA/IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgxKSA6IG1fd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUjsKKworICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRv
cj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3Vl
R2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUm
IGNvZGUpIHsKKyAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworICAgICAgICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0KTsKKworICAg
ICAgICB7CisgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgICAgICAgICAgYXV0byBtb3ZlTG9jYXRp
b24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY29tcGlsYXRp
b24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
ICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIsIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIH0KKworICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBDaGVja2VkPGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBt
X2NvZGUuZnJhbWVTaXplKCk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtaW5pbXVtUGFy
ZW50Q2hlY2tTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgMTAyNCk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBleHRyYUZyYW1lU2l6ZSA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHN0ZDo6bWF4
PHVpbnQzMl90PigKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBlbGlkZSBz
dGFjayBjaGVja3MgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSB0ZXJtaW5hbCBub2RlcyBpbiB0aGUg
Y2FsbAorICAgICAgICAgICAgICAgIC8vIHRyZWUsIChlLmcgdGhleSBkb24ndCBtYWtlIGFueSBj
YWxscykgYW5kIGhhdmUgYSBzbWFsbCBlbm91Z2ggZnJhbWUgc2l6ZS4gVGhpcyB3b3JrcyBieQor
ICAgICAgICAgICAgICAgIC8vIGhhdmluZyBhbnkgc3VjaCB0ZXJtaW5hbCBub2RlIGhhdmUgaXRz
IHBhcmVudCBjYWxsZXIgaW5jbHVkZSBzb21lIGV4dHJhIHNpemUgaW4gaXRzCisgICAgICAgICAg
ICAgICAgLy8gb3duIGNoZWNrIGZvciBpdC4gVGhlIGdvYWwgaGVyZSBpcyB0d29mb2xkOgorICAg
ICAgICAgICAgICAgIC8vIDEuIEVtaXQgbGVzcyBjb2RlLgorICAgICAgICAgICAgICAgIC8vIDIu
IFRyeSB0byBzcGVlZCB0aGluZ3MgdXAgYnkgc2tpcHBpbmcgc3RhY2sgY2hlY2tzLgorICAgICAg
ICAgICAgICAgIG1pbmltdW1QYXJlbnRDaGVja1NpemUsCisgICAgICAgICAgICAgICAgLy8gVGhp
cyBhbGxvd3MgdXMgdG8gZWxpZGUgc3RhY2sgY2hlY2tzIGluIHRoZSBXYXNtIC0+IEVtYmVkZGVy
IGNhbGwgSUMgc3R1Yi4gU2luY2UgdGhlc2Ugd2lsbAorICAgICAgICAgICAgICAgIC8vIHNwaWxs
IGFsbCBhcmd1bWVudHMgdG8gdGhlIHN0YWNrLCB3ZSBlbnN1cmUgdGhhdCBhIHN0YWNrIGNoZWNr
IGhlcmUgY292ZXJzIHRoZQorICAgICAgICAgICAgICAgIC8vIHN0YWNrIHRoYXQgc3VjaCBhIHN0
dWIgd291bGQgdXNlLgorICAgICAgICAgICAgICAgIChDaGVja2VkPHVpbnQzMl90PihtX21heE51
bUpTQ2FsbEFyZ3VtZW50cykgKiBzaXplb2YoUmVnaXN0ZXIpICsganNjQ2FsbGluZ0NvbnZlbnRp
b24oKS5oZWFkZXJTaXplSW5CeXRlcygpKS51bnNhZmVHZXQoKQorICAgICAgICAgICAgKSk7Cisg
ICAgICAgICAgICBjb25zdCBpbnQzMl90IGNoZWNrU2l6ZSA9IG1fbWFrZXNDYWxscyA/ICh3YXNt
RnJhbWVTaXplICsgZXh0cmFGcmFtZVNpemUpLnVuc2FmZUdldCgpIDogd2FzbUZyYW1lU2l6ZS51
bnNhZmVHZXQoKTsKKyAgICAgICAgICAgIGJvb2wgbmVlZFVuZGVyZmxvd0NoZWNrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNoZWNrU2l6ZSkgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7
CisgICAgICAgICAgICBib29sIG5lZWRzT3ZlcmZsb3dDaGVjayA9IG1fbWFrZXNDYWxscyB8fCB3
YXNtRnJhbWVTaXplID49IG1pbmltdW1QYXJlbnRDaGVja1NpemUgfHwgbmVlZFVuZGVyZmxvd0No
ZWNrOworCisgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBsZWFmIGZ1bmN0aW9ucyB0byBub3Qg
ZG8gc3RhY2sgY2hlY2tzIGlmIHRoZWlyIGZyYW1lIHNpemUgaXMgd2l0aGluCisgICAgICAgICAg
ICAvLyBjZXJ0YWluIGxpbWl0cyBzaW5jZSB0aGVpciBjYWxsZXIgd291bGQgaGF2ZSBhbHJlYWR5
IGRvbmUgdGhlIGNoZWNrLgorICAgICAgICAgICAgaWYgKG5lZWRzT3ZlcmZsb3dDaGVjaykgewor
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKworICAgICAgICAgICAgICAgIGlmIChD
b250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNv
bnRleHRJbnN0YW5jZShjb250ZXh0SW5zdGFuY2UpOworCisgICAgICAgICAgICAgICAgaml0LmFk
ZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY2hlY2tTaXplKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBvdmVyZmxvdzsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobmVlZFVu
ZGVyZmxvd0NoZWNrKSkKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKGppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgc2NyYXRjaCwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBvdmVyZmxvdy5hcHBlbmQoaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkJlbG93LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29u
dGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKSk7Cisg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtvdmVyZmxvd10gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG92ZXJmbG93
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5z
dHViKHRocm93U3RhY2tPdmVyZmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3VzZXNJbnN0YW5j
ZVZhbHVlICYmIENvbnRleHQ6OnVzZUZhc3RUTFMoKSkgeworICAgICAgICAgICAgICAgIC8vIE5v
IG92ZXJmbG93IGNoZWNrIGlzIG5lZWRlZCwgYnV0IHRoZSBpbnN0YW5jZSB2YWx1ZXMgc3RpbGwg
bmVlZHMgdG8gYmUgY29ycmVjdC4KKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoY29udGV4dEluc3RhbmNlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgbV9jb2RlLnNldFByb2xvZ3VlRm9yRW50
cnlwb2ludCgwLCBXVEZNb3ZlKHByb2xvZ3VlR2VuZXJhdG9yKSk7CisKKyAgICBpZiAoQ29udGV4
dDo6dXNlRmFzdFRMUygpKSB7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9IGc2NCgpOworICAg
ICAgICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBvbmx5IGRvIHRoaXMgaWYgd2UgdXNlIGlu
c3RhbmNlIHZhbHVlLgorICAgICAgICBhcHBlbmQoTW92ZSwgVG1wKGNvbnRleHRJbnN0YW5jZSks
IG1faW5zdGFuY2VWYWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSA9
IHsgVG1wKGNvbnRleHRJbnN0YW5jZSksIFR5cGU6Okk2NCB9OworCisgICAgQVNTRVJUKCFtX2xv
Y2Fscy5zaXplKCkpOworICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7Cisg
ICAgICAgIG1fbG9jYWxzW2ldID0gdG1wRm9yVHlwZSh0eXBlKTsKKyAgICB9CisKKyAgICB3YXNt
Q2FsbGluZ0NvbnZlbnRpb25BaXIoKS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZSwgWyZdIChjb25z
dCBBcmcmIGFyZywgdW5zaWduZWQgaSkgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1
bWVudChpKSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGFwcGVuZChN
b3ZlMzIsIGFyZywgbV9sb2NhbHNbaV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVHlwZTo6STY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmUsIGFyZywgbV9sb2NhbHNbaV0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAg
ICAgYXBwZW5kKE1vdmVGbG9hdCwgYXJnLCBtX2xvY2Fsc1tpXSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJs
ZSwgYXJnLCBtX2xvY2Fsc1tpXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIGVtaXRUaWVyVXBDaGVjayhUaWVyVXBDb3VudDo6ZnVuY3Rpb25FbnRy
eURlY3JlbWVudCgpLCBCMzo6T3JpZ2luKCkpOworfQorCit2b2lkIEFpcklSR2VuZXJhdG9yOjpy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0
b3JlQ2FjaGVkU3RhY2tMaW1pdCwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVHlw
ZWRUbXAgaW5zdGFuY2UsIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJlc3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlKGJsb2NrLCBpbnN0YW5jZSk7CisKKyAgICBpZiAocmVzdG9yZUNhY2hlZFN0
YWNrTGltaXQgPT0gUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcykgeworICAgICAgICAvLyBU
aGUgSW5zdGFuY2UgY2FjaGVzIHRoZSBzdGFjayBsaW1pdCwgYnV0IGFsc28ga25vd3Mgd2hlcmUg
aXRzIGNhbm9uaWNhbCBsb2NhdGlvbiBpcy4KKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
ZGVjbHR5cGUoc3RhdGljX2Nhc3Q8SW5zdGFuY2UqPihudWxscHRyKS0+Y2FjaGVkU3RhY2tMaW1p
dCgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIiIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZzZXRPZlBvaW50ZXJUb0FjdHVhbFN0
YWNrTGltaXQoKSwgQjM6OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjpp
c1ZhbGlkQWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpLCBCMzo6
V2lkdGg2NCkpOworICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKGJs
b2NrLCBNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZQ
b2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkpLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKGJsb2Nr
LCBNb3ZlLCBBcmc6OmFkZHIodGVtcCksIHRlbXApOworICAgICAgICBhcHBlbmQoYmxvY2ssIE1v
dmUsIHRlbXAsIEFyZzo6YWRkcihpbnN0YW5jZVZhbHVlKCksIEluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZFN0YWNrTGltaXQoKSkpOworICAgIH0KKworICAgIGlmICghIW1lbW9yeSkgeworICAgICAg
ICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CisgICAgICAgIGNsb2Ji
ZXJzLnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgIGZvciAoYXV0
byBpbmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKKyAgICAgICAgICAgIGNsb2JiZXJz
LnNldChpbmZvLnNpemVSZWdpc3Rlcik7CisKKyAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFk
ZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAgICAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6
OkVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwor
ICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KGNsb2JiZXJzKTsKKworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJl
Z3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3Mt
PmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBw
aW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNp
emUoKSA+PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7
IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxh
dGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
cik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1z
WzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Migtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6
ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNo
cG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CisgICAgfQorfQorCit2
b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0VGhyb3dFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiBqaXQs
IEV4Y2VwdGlvblR5cGUgdHlwZSkKK3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIGF1dG8ganVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBq
aXQuYWRkTGlua1Rhc2soW2p1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRo
cm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9
CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291
bnQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVy
Zmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSBjb3VudDsKKyAgICB0b3RhbEJ5dGVzQ2hlY2tlZCAr
PSBtX2xvY2Fscy5zaXplKCk7CisgICAgdWludDMyX3QgdG90YWxCeXRlczsKKyAgICBXQVNNX0NP
TVBJTEVfRkFJTF9JRigodG90YWxCeXRlc0NoZWNrZWQuc2FmZUdldCh0b3RhbEJ5dGVzKSA9PSBD
aGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KSB8fCAhbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAi
IGxvY2FscyIpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgYXV0byBsb2NhbCA9IHRtcEZvclR5cGUodHlwZSk7CisgICAgICAgIG1fbG9jYWxz
LnVuY2hlY2tlZEFwcGVuZChsb2NhbCk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6IHsKKyAgICAgICAgICAg
IGFwcGVuZChYb3I2NCwgbG9jYWwsIGxvY2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBjYXNlIFR5cGU6OkY2NDogewor
ICAgICAgICAgICAgYXV0byB0ZW1wID0gZzY0KCk7CisgICAgICAgICAgICAvLyBJRUVFIDc1NCAi
MCIgaXMganVzdCBpbnQzMi82NCB6ZXJvLgorICAgICAgICAgICAgYXBwZW5kKFhvcjY0LCB0ZW1w
LCB0ZW1wKTsKKyAgICAgICAgICAgIGFwcGVuZCh0eXBlID09IFR5cGU6OkYzMiA/IE1vdmUzMlRv
RmxvYXQgOiBNb3ZlNjRUb0RvdWJsZSwgdGVtcCwgbG9jYWwpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ29uc3RhbnQoVHlwZSB0eXBlLCB1aW50NjRfdCB2YWx1
ZSkgLT4gRXhwcmVzc2lvblR5cGUKK3sKKyAgICByZXR1cm4gYWRkQ29uc3RhbnQobV9jdXJyZW50
QmxvY2ssIHR5cGUsIHZhbHVlKTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ29uc3Rh
bnQoQmFzaWNCbG9jayogYmxvY2ssIFR5cGUgdHlwZSwgdWludDY0X3QgdmFsdWUpIC0+IEV4cHJl
c3Npb25UeXBlCit7CisgICAgYXV0byByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6STY0Ogor
ICAgICAgICBhcHBlbmQoYmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKHZhbHVlKSwgcmVzdWx0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgY2FzZSBUeXBlOjpGNjQ6
IHsKKyAgICAgICAgYXV0byB0bXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKGJsb2NrLCBNb3Zl
LCBBcmc6OmJpZ0ltbSh2YWx1ZSksIHRtcCk7CisgICAgICAgIGFwcGVuZChibG9jaywgdHlwZSA9
PSBUeXBlOjpGMzIgPyBNb3ZlMzJUb0Zsb2F0IDogTW92ZTY0VG9Eb3VibGUsIHRtcCwgcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2Fscy5z
aXplKCkgPT0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7IC8vIFdlIGhhbmRsZSBhcmd1bWVu
dHMgaW4gdGhlIHByb2xvZ3VlCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVy
YXRvcjo6Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobV9sb2NhbHNbaW5kZXhdLnRtcCgpKTsKKyAg
ICByZXN1bHQgPSB0bXBGb3JUeXBlKG1fbG9jYWxzW2luZGV4XS50eXBlKCkpOworICAgIGFwcGVu
ZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnR5cGUoKSksIG1fbG9jYWxzW2lu
ZGV4XS50bXAoKSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBCMzo6UGF0
Y2hwb2ludFZhbHVlKiB1bnJlYWNoYWJsZSA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOworICAg
IHVucmVhY2hhYmxlLT5zZXRHZW5lcmF0b3IoW3RoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRo
cm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6VW5yZWFjaGFibGUpOworICAgIH0pOwor
ICAgIHVucmVhY2hhYmxlLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKKyAgICBlbWl0UGF0Y2hw
b2ludCh1bnJlYWNoYWJsZSwgVG1wKCkpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBpbnQzMl90ICgqZ3Jvd01l
bW9yeSkodm9pZCosIEluc3RhbmNlKiwgaW50MzJfdCkgPSBbXSAodm9pZCogY2FsbEZyYW1lLCBJ
bnN0YW5jZSogaW5zdGFuY2UsIGludDMyX3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBp
bnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKworICAgICAgICBpZiAoZGVs
dGEgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGF1dG8gZ3Jvd24gPSBp
bnN0YW5jZS0+bWVtb3J5KCktPmdyb3coUGFnZUNvdW50KGRlbHRhKSk7CisgICAgICAgIGlmICgh
Z3Jvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3Jvd24uZXJyb3IoKSkgeworICAgICAgICAg
ICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkRGVsdGE6CisgICAgICAgICAg
ICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToKKyAgICAgICAg
ICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6V291bGRFeGNlZWRNYXhpbXVtOgorICAg
ICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdyb3du
LnZhbHVlKCkucGFnZUNvdW50KCk7CisgICAgfTsKKworICAgIHJlc3VsdCA9IGczMigpOworICAg
IGVtaXRDQ2FsbChncm93TWVtb3J5LCByZXN1bHQsIFR5cGVkVG1wIHsgVG1wKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKSwgVHlwZTo6STY0IH0sIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOwor
ICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0
OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jayk7CisK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVt
b3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRyKS0+
c2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6
ZSIpOworCisgICAgYXV0byB0ZW1wMSA9IGc2NCgpOworICAgIGF1dG8gdGVtcDIgPSBnNjQoKTsK
KworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQoTW92ZSwg
QXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
U2l6ZSgpKSwgdGVtcDEpOworICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7
CisgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRW
YWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIp
OworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbSgxNiksIHRlbXAyKTsKKyAgICBhZGRTaGlmdChU
eXBlOjpJMzIsIFVyc2hpZnQ2NCwgdGVtcDEsIHRlbXAyLCByZXN1bHQpOworICAgIGFwcGVuZChN
b3ZlMzIsIHJlc3VsdCwgcmVzdWx0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChtX2xvY2Fsc1tpbmRleF0udG1wKCkp
OworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobV9sb2NhbHNbaW5kZXhdLnR5cGUoKSks
IHZhbHVlLCBtX2xvY2Fsc1tpbmRleF0udG1wKCkpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFR5cGUgdHlwZSA9IG1faW5mby5n
bG9iYWxzW2luZGV4XS50eXBlOworCisgICAgcmVzdWx0ID0gdG1wRm9yVHlwZSh0eXBlKTsKKwor
ICAgIGF1dG8gdGVtcCA9IGc2NCgpOworCisgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlk
QWRkckZvcm0oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFscygpLCBCMzo6V2lkdGg2NCkpOworICAg
IGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZHbG9iYWxzKCkpLCB0ZW1wKTsKKworICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50
MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBpZiAoQXJnOjppc1ZhbGlkQWRk
ckZvcm0ob2Zmc2V0LCBCMzo6d2lkdGhGb3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkpCisgICAgICAg
IGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQp
LCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIHRlbXAyID0gZzY0KCk7CisgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCB0ZW1wMik7CisgICAgICAgIGFw
cGVuZChBZGQ2NCwgdGVtcDIsIHRlbXAsIHRlbXApOworICAgICAgICBhcHBlbmQobW92ZU9wRm9y
VmFsdWVUeXBlKHR5cGUpLCBBcmc6OmFkZHIodGVtcCksIHJlc3VsdCk7CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRv
IHRlbXAgPSBnNjQoKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3Jt
KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbHMoKSwgQjM6OldpZHRoNjQpKTsKKyAgICBhcHBlbmQo
TW92ZSwgQXJnOjphZGRyKGluc3RhbmNlVmFsdWUoKSwgSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFs
cygpKSwgdGVtcCk7CisKKyAgICBUeXBlIHR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlw
ZTsKKworICAgIGludDMyX3Qgb2Zmc2V0ID0gc2FmZUNhc3Q8aW50MzJfdD4oaW5kZXggKiBzaXpl
b2YoUmVnaXN0ZXIpKTsKKyAgICBpZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6
d2lkdGhGb3JUeXBlKHRvQjNUeXBlKHR5cGUpKSkpCisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JW
YWx1ZVR5cGUodHlwZSksIHZhbHVlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSk7CisgICAgZWxz
ZSB7CisgICAgICAgIGF1dG8gdGVtcDIgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YmlnSW1tKG9mZnNldCksIHRlbXAyKTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCB0ZW1wMiwg
dGVtcCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIHZh
bHVlLCBBcmc6OmFkZHIodGVtcCkpOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2lu
bGluZSBBaXJJUkdlbmVyYXRvcjo6RXhwcmVzc2lvblR5cGUgQWlySVJHZW5lcmF0b3I6OmVtaXRD
aGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9m
ZnNldCwgdWludDMyX3Qgc2l6ZU9mT3BlcmF0aW9uKQoreworICAgIEFTU0VSVChtX21lbW9yeUJh
c2VHUFIpOworCisgICAgYXV0byByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoTW92ZTMyLCBw
b2ludGVyLCByZXN1bHQpOworCisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CisgICAgICAgIC8vIFdlJ3JlIG5vdCB1c2luZyBzaWdu
YWwgaGFuZGxpbmcgYXQgYWxsLCB3ZSBtdXN0IHRoZXJlZm9yZSBjaGVjayB0aGF0IG5vIG1lbW9y
eSBhY2Nlc3MgZXhjZWVkcyB0aGUgY3VycmVudCBtZW1vcnkgc2l6ZS4KKyAgICAgICAgQVNTRVJU
KG1fbWVtb3J5U2l6ZUdQUik7CisgICAgICAgIEFTU0VSVChzaXplT2ZPcGVyYXRpb24gKyBvZmZz
ZXQgPiBvZmZzZXQpOworICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzaXplT2ZPcGVyYXRpb24p
ICsgb2Zmc2V0IC0gMSksIHRlbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIHJlc3VsdCwgdGVt
cCk7CisKKyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICByZXR1cm4gSW5zdChC
cmFuY2g2NCwgbnVsbHB0ciwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwpLCB0ZW1wLCBUbXAobV9tZW1vcnlTaXplR1BSKSk7CisgICAgICAgIH0sIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzogeworICAgICAgICAvLyBXZSd2ZSB2
aXJ0dWFsbHkgbWFwcGVkIDRHaUIrcmVkem9uZSBmb3IgdGhpcyBtZW1vcnkuIE9ubHkgdGhlIHVz
ZXItYWxsb2NhdGVkIHBhZ2VzIGFyZSBhZGRyZXNzYWJsZSwgY29udGlndW91c2x5IGluIHJhbmdl
IFswLCBjdXJyZW50XSwKKyAgICAgICAgLy8gYW5kIGV2ZXJ5dGhpbmcgYWJvdmUgaXMgbWFwcGVk
IFBST1RfTk9ORS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBleHBsaWNpdCBib3VuZHMg
Y2hlY2sgaW4gdGhlIDRHaUIgcmFuZ2UgYmVjYXVzZSBXZWJBc3NlbWJseSByZWdpc3RlcgorICAg
ICAgICAvLyBtZW1vcnkgYWNjZXNzZXMgYXJlIDMyLWJpdC4gSG93ZXZlciBXZWJBc3NlbWJseSBy
ZWdpc3RlciArIG9mZnNldCBhY2Nlc3NlcyBwZXJmb3JtIHRoZSBhZGRpdGlvbiBpbiA2NC1iaXQg
d2hpY2ggY2FuIHB1c2ggYW4gYWNjZXNzIGFib3ZlCisgICAgICAgIC8vIHRoZSAzMi1iaXQgbGlt
aXQgKHRoZSBvZmZzZXQgaXMgdW5zaWduZWQgMzItYml0KS4gVGhlIHJlZHpvbmUgd2lsbCBjYXRj
aCBtb3N0IHNtYWxsIG9mZnNldHMsIGFuZCB3ZSdsbCBleHBsaWNpdGx5IGJvdW5kcyBjaGVjayBh
bnkKKyAgICAgICAgLy8gcmVnaXN0ZXIgKyBsYXJnZSBvZmZzZXQgYWNjZXNzLiBXZSBkb24ndCB0
aGluayB0aGlzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyZXF1ZW50bHkuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFdlIGNvdWxkIGNoZWNrIHRoYXQgcmVnaXN0ZXIgKyBsYXJnZSBvZmZzZXQgZG9lc24n
dCBleGNlZWQgNEdpQityZWR6b25lIHNpbmNlIHRoYXQncyB0ZWNobmljYWxseSB0aGUgbGltaXQg
d2UgbmVlZCB0byBhdm9pZCBvdmVyZmxvd2luZyB0aGUKKyAgICAgICAgLy8gUFJPVF9OT05FIHJl
Z2lvbiwgYnV0IGl0J3MgYmV0dGVyIGlmIHdlIHVzZSBhIHNtYWxsZXIgaW1tZWRpYXRlIGJlY2F1
c2UgaXQgY2FuIGNvZGVnZW5zIGJldHRlci4gV2Uga25vdyB0aGF0IGFueXRoaW5nIGVxdWFsIHRv
IG9yIGdyZWF0ZXIKKyAgICAgICAgLy8gdGhhbiB0aGUgZGVjbGFyZWQgJ21heGltdW0nIHdpbGwg
dHJhcCwgc28gd2UgY2FuIGNvbXBhcmUgYWdhaW5zdCB0aGF0IG51bWJlci4gSWYgdGhlcmUgd2Fz
IG5vIGRlY2xhcmVkICdtYXhpbXVtJyB0aGVuIHdlIHN0aWxsIGtub3cgdGhhdAorICAgICAgICAv
LyBhbnkgYWNjZXNzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA0R2lCIHdpbGwgdHJhcCwgbm8g
bmVlZCB0byBhZGQgdGhlIHJlZHpvbmUuCisgICAgICAgIGlmIChvZmZzZXQgPj0gTWVtb3J5Ojpm
YXN0TWFwcGVkUmVkem9uZUJ5dGVzKCkpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG1heGltdW0g
PSBtX2luZm8ubWVtb3J5Lm1heGltdW0oKSA/IG1faW5mby5tZW1vcnkubWF4aW11bSgpLmJ5dGVz
KCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgICAgICBh
dXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShz
dGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZU9mT3BlcmF0aW9uKSArIG9mZnNldCAtIDEpLCB0ZW1w
KTsKKyAgICAgICAgICAgIGFwcGVuZChBZGQ2NCwgcmVzdWx0LCB0ZW1wKTsKKyAgICAgICAgICAg
IGF1dG8gc2l6ZU1heCA9IGFkZENvbnN0YW50KFR5cGU6Okk2NCwgbWF4aW11bSk7CisKKyAgICAg
ICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5j
aDY0LCBudWxscHRyLCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCks
IHRlbXAsIHNpemVNYXgpOworICAgICAgICAgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01l
bW9yeUFjY2Vzcyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgfQorCisgICAgYXBwZW5kKEFkZDY0LCBUbXAobV9tZW1vcnlCYXNlR1BSKSwg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdWludDMyX3Qgc2l6ZU9m
TG9hZE9wKExvYWRPcFR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STMyTG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDhVOgorICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDhTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9h
ZDhVOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6
CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZTOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6
STMyTG9hZDE2VToKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6CisgICAgICAgIHJl
dHVybiAyOworICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDoKKyAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQzMlM6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOgorICAgIGNh
c2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBMb2Fk
T3BUeXBlOjpJNjRMb2FkOgorICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAg
cmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K2lubGluZSBUeXBlZFRtcCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvYWRPcChMb2FkT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAgIHVpbnQz
Ml90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNldCk7CisK
KyAgICBUeXBlZFRtcCBpbW1UbXA7CisgICAgVHlwZWRUbXAgbmV3UHRyOworICAgIFR5cGVkVG1w
IHJlc3VsdDsKKworICAgIEFyZyBhZGRyQXJnOworICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9y
bShvZmZzZXQsIEIzOjp3aWR0aEZvckJ5dGVzKHNpemVPZkxvYWRPcChvcCkpKSkKKyAgICAgICAg
YWRkckFyZyA9IEFyZzo6YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgIGVsc2UgeworICAgICAg
ICBpbW1UbXAgPSBnNjQoKTsKKyAgICAgICAgbmV3UHRyID0gZzY0KCk7CisgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmJpZ0ltbShvZmZzZXQpLCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRk
NjQsIGltbVRtcCwgcG9pbnRlciwgbmV3UHRyKTsKKyAgICAgICAgYWRkckFyZyA9IEFyZzo6YWRk
cihuZXdQdHIpOworICAgIH0KKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQ4UzogeworICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAgICAgICAgYXBwZW5k
RWZmZWN0ZnVsKExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiwgYWRkckFyZywgcmVzdWx0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkOFNpZ25l
ZEV4dGVuZFRvMzIsIGFkZHJBcmcsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0ZW5k
MzJUb1B0ciwgcmVzdWx0LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIExvYWRPcFR5cGU6OkkzMkxvYWQ4VTogeworICAgICAgICByZXN1bHQgPSBnMzIoKTsKKyAg
ICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQ4LCBhZGRyQXJnLCByZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ4VTogeworICAgICAg
ICByZXN1bHQgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKExvYWQ4LCBhZGRyQXJn
LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6
OkkzMkxvYWQxNlM6IHsKKyAgICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgICAgIGFwcGVuZEVm
ZmVjdGZ1bChMb2FkMTZTaWduZWRFeHRlbmRUbzMyLCBhZGRyQXJnLCByZXN1bHQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTZTaWdu
ZWRFeHRlbmRUbzMyLCBhZGRyQXJnLCByZXN1bHQpOworICAgICAgICBhcHBlbmQoU2lnbkV4dGVu
ZDMyVG9QdHIsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOiB7CisgICAgICAgIHJlc3VsdCA9IGczMigpOwor
ICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTG9hZDE2LCBhZGRyQXJnLCByZXN1bHQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChMb2FkMTYsIGFk
ZHJBcmcsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9w
VHlwZTo6STMyTG9hZDoKKyAgICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgICAgIGFwcGVuZEVm
ZmVjdGZ1bChNb3ZlMzIsIGFkZHJBcmcsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMzJVOiB7CisgICAgICAgIHJlc3VsdCA9IGc2NCgpOwor
ICAgICAgICBhcHBlbmRFZmZlY3RmdWwoTW92ZTMyLCBhZGRyQXJnLCByZXN1bHQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6IHsKKyAg
ICAgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVjdGZ1bChNb3ZlMzIsIGFk
ZHJBcmcsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgcmVzdWx0
LCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZEVmZmVj
dGZ1bChNb3ZlLCBhZGRyQXJnLCByZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIExvYWRPcFR5cGU6OkYzMkxvYWQ6IHsKKyAgICAgICAgcmVzdWx0ID0gZjMyKCk7Cisg
ICAgICAgIGFwcGVuZEVmZmVjdGZ1bChNb3ZlRmxvYXQsIGFkZHJBcmcsIHJlc3VsdCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDogeworICAg
ICAgICByZXN1bHQgPSBmNjQoKTsKKyAgICAgICAgYXBwZW5kRWZmZWN0ZnVsKE1vdmVEb3VibGUs
IGFkZHJBcmcsIHJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjpsb2FkKExvYWRPcFR5cGUg
b3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQz
Ml90IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLnRtcCgp
LmlzR1AoKSk7CisKKyAgICBpZiAoVU5MSUtFTFkoc3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZz
ZXQsIHNpemVPZkxvYWRPcChvcCkpKSkgeworICAgICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2gg
dGhpcyBpcyBwcm92YWJseSBvdXQgb2YgYm91bmRzLCBpdCdzIG5vdCBhIHZhbGlkYXRpb24gZXJy
b3IsIHNvIHdlIGhhdmUgdG8gaGFuZGxlIGl0CisgICAgICAgIC8vIGFzIGEgcnVudGltZSBleGNl
cHRpb24uIEhvd2V2ZXIsIHRoaXMgbWF5IGNoYW5nZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjQzNQorICAgICAgICBhdXRvKiBwYXRjaCA9IGFkZFBhdGNocG9p
bnQoQjM6OlZvaWQpOworICAgICAgICBwYXRjaC0+c2V0R2VuZXJhdG9yKFt0aGlzXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRP
ZkJvdW5kc01lbW9yeUFjY2Vzcyk7CisgICAgICAgIH0pOworICAgICAgICBlbWl0UGF0Y2hwb2lu
dChwYXRjaCwgVG1wKCkpOworCisgICAgICAgIC8vIFdlIHdvbid0IHJlYWNoIGhlcmUsIHNvIHdl
IGp1c3QgcGljayBhIHJhbmRvbSByZWcuCisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAg
Y2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkOgorICAgICAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQxNlU6CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9h
ZDhVOgorICAgICAgICAgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZE9wVHlw
ZTo6STY0TG9hZDhVOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlM6CisgICAg
ICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyVToKKyAgICAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJNjRMb2FkMzJTOgorICAgICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgICAg
IGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDE2VToKKyAgICAgICAgICAgIHJlc3VsdCA9IGc2NCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoK
KyAgICAgICAgICAgIHJlc3VsdCA9IGYzMigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTG9hZE9wVHlwZTo6RjY0TG9hZDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGY2NCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0
ID0gZW1pdExvYWRPcChvcCwgZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIocG9pbnRlciwgb2Zm
c2V0LCBzaXplT2ZMb2FkT3Aob3ApKSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7IH07Cit9CisK
K2lubGluZSB1aW50MzJfdCBzaXplT2ZTdG9yZU9wKFN0b3JlT3BUeXBlIG9wKQoreworICAgIHN3
aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJMzJTdG9yZTg6CisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6STY0U3RvcmU4OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFN0b3Jl
T3BUeXBlOjpJMzJTdG9yZTE2OgorICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMTY6Cisg
ICAgICAgIHJldHVybiAyOworICAgIGNhc2UgU3RvcmVPcFR5cGU6OkkzMlN0b3JlOgorICAgIGNh
c2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlMzI6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjMyU3Rv
cmU6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgU3RvcmVPcFR5cGU6Okk2NFN0b3JlOgor
ICAgIGNhc2UgU3RvcmVPcFR5cGU6OkY2NFN0b3JlOgorICAgICAgICByZXR1cm4gODsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworCitpbmxpbmUgdm9pZCBB
aXJJUkdlbmVyYXRvcjo6ZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCB1b2Zmc2V0KQoreworICAg
IHVpbnQzMl90IG9mZnNldCA9IGZpeHVwUG9pbnRlclBsdXNPZmZzZXQocG9pbnRlciwgdW9mZnNl
dCk7CisKKyAgICBUeXBlZFRtcCBpbW1UbXA7CisgICAgVHlwZWRUbXAgbmV3UHRyOworCisgICAg
QXJnIGFkZHJBcmc7CisgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6Ondp
ZHRoRm9yQnl0ZXMoc2l6ZU9mU3RvcmVPcChvcCkpKSkKKyAgICAgICAgYWRkckFyZyA9IEFyZzo6
YWRkcihwb2ludGVyLCBvZmZzZXQpOworICAgIGVsc2UgeworICAgICAgICBpbW1UbXAgPSBnNjQo
KTsKKyAgICAgICAgbmV3UHRyID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJp
Z0ltbShvZmZzZXQpLCBpbW1UbXApOworICAgICAgICBhcHBlbmQoQWRkNjQsIGltbVRtcCwgcG9p
bnRlciwgbmV3UHRyKTsKKyAgICAgICAgYWRkckFyZyA9IEFyZzo6YWRkcihuZXdQdHIpOworICAg
IH0KKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZTg6
CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmU4OgorICAgICAgICBhcHBlbmQoU3RvcmU4
LCB2YWx1ZSwgYWRkckFyZyk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3RvcmVPcFR5
cGU6Okk2NFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZU9wVHlwZTo6STMyU3RvcmUxNjoKKyAgICAg
ICAgYXBwZW5kKFN0b3JlMTYsIHZhbHVlLCBhZGRyQXJnKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBTdG9yZU9wVHlwZTo6STY0U3RvcmUzMjoKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJ
MzJTdG9yZToKKyAgICAgICAgYXBwZW5kKE1vdmUzMiwgdmFsdWUsIGFkZHJBcmcpOworICAgICAg
ICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlT3BUeXBlOjpJNjRTdG9yZToKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIHZhbHVlLCBhZGRyQXJnKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBT
dG9yZU9wVHlwZTo6RjMyU3RvcmU6CisgICAgICAgIGFwcGVuZChNb3ZlRmxvYXQsIHZhbHVlLCBh
ZGRyQXJnKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdG9yZU9wVHlwZTo6RjY0U3Rv
cmU6CisgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCB2YWx1ZSwgYWRkckFyZyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CithdXRvIEFpcklSR2VuZXJhdG9yOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIEFTU0VSVChwb2ludGVyLnRtcCgpLmlzR1AoKSk7CisKKyAgICBp
ZiAoVU5MSUtFTFkoc3VtT3ZlcmZsb3dzPHVpbnQzMl90PihvZmZzZXQsIHNpemVPZlN0b3JlT3Ao
b3ApKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIHRoaXMgaXMgcHJvdmFibHkg
b3V0IG9mIGJvdW5kcywgaXQncyBub3QgYSB2YWxpZGF0aW9uIGVycm9yLCBzbyB3ZSBoYXZlIHRv
IGhhbmRsZSBpdAorICAgICAgICAvLyBhcyBhIHJ1bnRpbWUgZXhjZXB0aW9uLiBIb3dldmVyLCB0
aGlzIG1heSBjaGFuZ2U6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY0MzUKKyAgICAgICAgYXV0byogdGhyb3dFeGNlcHRpb24gPSBhZGRQYXRjaHBvaW50KEIzOjpW
b2lkKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24tPnNldEdlbmVyYXRvcihbdGhpc10gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpOworICAgICAgICB9KTsKKyAgICAgICAgZW1pdFBhdGNocG9p
bnQodGhyb3dFeGNlcHRpb24sIFRtcCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW1pdFN0b3Jl
T3Aob3AsIGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKHBvaW50ZXIsIG9mZnNldCwgc2l6ZU9m
U3RvcmVPcChvcCkpLCB2YWx1ZSwgb2Zmc2V0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEV4
cHJlc3Npb25UeXBlIG5vblplcm8sIEV4cHJlc3Npb25UeXBlIHplcm8sIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQobm9uWmVyby50eXBlKCkg
PT0gemVyby50eXBlKCkpOworICAgIHJlc3VsdCA9IHRtcEZvclR5cGUobm9uWmVyby50eXBlKCkp
OworICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUobm9uWmVyby50eXBlKCkpLCBub25aZXJv
LCByZXN1bHQpOworCisgICAgQmFzaWNCbG9jayogaXNaZXJvID0gbV9jb2RlLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisKKyAg
ICBhcHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8p
LCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3Nv
cnMoaXNaZXJvLCBjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKGlzWmVybywgbW92ZU9wRm9y
VmFsdWVUeXBlKHplcm8udHlwZSgpKSwgemVybywgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNaZXJv
LCBKdW1wKTsKKyAgICBpc1plcm8tPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAg
IG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
dm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdFRpZXJVcENoZWNrKHVpbnQzMl90IGRlY3JlbWVudENv
dW50LCBCMzo6T3JpZ2luIG9yaWdpbikKK3sKKyAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKKwor
ICAgIGlmICghbV90aWVyVXApCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY291bnRkb3du
UHRyID0gZzY0KCk7CisgICAgYXV0byBvbGRDb3VudGRvd24gPSBnNjQoKTsKKyAgICBhdXRvIG5l
d0NvdW50ZG93biA9IGc2NCgpOworCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KG1fdGllclVwKSksIGNvdW50ZG93blB0cik7CisgICAgYXBw
ZW5kKE1vdmUzMiwgQXJnOjphZGRyKGNvdW50ZG93blB0ciksIG9sZENvdW50ZG93bik7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRJbW1Gb3JtKGRlY3JlbWVudENvdW50KSk7Cisg
ICAgYXBwZW5kKE1vdmUzMiwgb2xkQ291bnRkb3duLCBuZXdDb3VudGRvd24pOworICAgIGFwcGVu
ZChTdWIzMiwgQXJnOjppbW0oZGVjcmVtZW50Q291bnQpLCBuZXdDb3VudGRvd24pOworICAgIGFw
cGVuZChNb3ZlMzIsIG5ld0NvdW50ZG93biwgQXJnOjphZGRyKGNvdW50ZG93blB0cikpOworCisg
ICAgYXV0byogcGF0Y2ggPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICBCMzo6RWZmZWN0
cyBlZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBlZmZlY3RzLnJlYWRzID0gQjM6
OkhlYXBSYW5nZTo6dG9wKCk7CisgICAgZWZmZWN0cy53cml0ZXMgPSBCMzo6SGVhcFJhbmdlOjp0
b3AoKTsKKyAgICBwYXRjaC0+ZWZmZWN0cyA9IGVmZmVjdHM7CisKKyAgICBwYXRjaC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0aWVyVXAg
PSBqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBwYXJhbXNbMF0uZ3ByKCksIHBh
cmFtc1sxXS5ncHIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCB0aWVyVXBSZXN1
bWUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgdGllclVwLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGV4dHJhUGFkZGluZ0J5dGVzID0gMDsKKyAgICAgICAgICAg
IFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvU3BpbGwgPSB7IH07CisgICAgICAgICAgICByZWdpc3Rl
cnNUb1NwaWxsLmFkZChHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwg
cmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFQYWRkaW5nQnl0ZXMpOworCisgICAgICAgICAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fZnVuY3Rpb25JbmRleCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
ID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxs
LCBSZWdpc3RlclNldCgpLCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2
YXRpb24sIGV4dHJhUGFkZGluZ0J5dGVzKTsKKyAgICAgICAgICAgIGppdC5qdW1wKHRpZXJVcFJl
c3VtZSk7CisKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPE5vUHRyVGFnPihjYWxsKSwgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0cmln
Z2VyT01HVGllclVwVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaCwgVG1wKCks
IG5ld0NvdW50ZG93biwgb2xkQ291bnRkb3duKTsKK30KKworQWlySVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKFR5cGUgc2lnbmF0dXJlKQoreworICAgIEJh
c2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChKdW1wKTsKKyAgICBt
X2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhib2R5KTsKKworICAgIG1fY3VycmVudEJsb2Nr
ID0gYm9keTsKKyAgICBlbWl0VGllclVwQ2hlY2soVGllclVwQ291bnQ6Omxvb3BEZWNyZW1lbnQo
KSwgb3JpZ2luKCkpOworCisgICAgcmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1
cmUsIHRtcEZvclR5cGUoc2lnbmF0dXJlKSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24s
IGJvZHkpOworfQorCitBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6
OmFkZFRvcExldmVsKFR5cGUgc2lnbmF0dXJlKQoreworICAgIHJldHVybiBDb250cm9sRGF0YShC
Mzo6T3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6
OlRvcExldmVsLCBtX2NvZGUuYWRkQmxvY2soKSk7Cit9CisKK0FpcklSR2VuZXJhdG9yOjpDb250
cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkQmxvY2soVHlwZSBzaWduYXR1cmUpCit7CisgICAg
cmV0dXJuIENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcEZvclR5cGUoc2lnbmF0
dXJlKSwgQmxvY2tUeXBlOjpCbG9jaywgbV9jb2RlLmFkZEJsb2NrKCkpOworfQorCithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIFR5cGUgc2lnbmF0
dXJlLCBDb250cm9sVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQmFzaWNC
bG9jayogdGFrZW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtl
biA9IG1fY29kZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1f
Y29kZS5hZGRCbG9jaygpOworICAgIAorICAgIC8vIFdhc20gYm9vbHMgYXJlIGkzMi4KKyAgICBh
cHBlbmQoQnJhbmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8p
LCBjb25kaXRpb24sIGNvbmRpdGlvbik7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3Nv
cnModGFrZW4sIG5vdFRha2VuKTsKKworICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47CisgICAg
cmVzdWx0ID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wRm9yVHlwZShzaWdu
YXR1cmUpLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBk
YXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgY3VycmVudFN0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdCk7
CisgICAgYXBwZW5kKEp1bXApOworICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGRh
dGEuY29udGludWF0aW9uKTsKKyAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YSk7
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xE
YXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJUKGRhdGEudHlwZSgpID09
IEJsb2NrVHlwZTo6SWYpOworICAgIG1fY3VycmVudEJsb2NrID0gZGF0YS5zcGVjaWFsOworICAg
IGRhdGEuY29udmVydElmVG9CbG9jaygpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgRXhw
cmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VS
VChyZXR1cm5WYWx1ZXMuc2l6ZSgpIDw9IDEpOworICAgIGlmIChyZXR1cm5WYWx1ZXMuc2l6ZSgp
KSB7CisgICAgICAgIFRtcCByZXR1cm5WYWx1ZUdQUiA9IFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIFRtcCByZXR1cm5WYWx1ZUZQUiA9IFRtcChGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUik7CisgICAgICAgIHN3aXRjaCAoZGF0YS5zaWduYXR1cmUoKSkgeworICAgICAgICBj
YXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIHJldHVyblZhbHVlc1sw
XSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgYXBwZW5kKFJldDMyLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAg
ICAgICAgICBhcHBlbmQoTW92ZSwgcmV0dXJuVmFsdWVzWzBdLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgICAgICBhcHBlbmQoUmV0NjQsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRmxv
YXQsIHJldHVyblZhbHVlc1swXSwgcmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgYXBwZW5k
KFJldEZsb2F0LCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgcmV0dXJuVmFs
dWVzWzBdLCByZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBhcHBlbmQoUmV0RmxvYXQsIHJl
dHVyblZhbHVlRlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZQorICAgICAgICBhcHBlbmQoUmV0Vm9pZCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworLy8g
Tk9URTogQWxsIGJyYW5jaGVzIGluIFdhc20gYXJlIG9uIDMyLWJpdCBpbnRzCisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZEJyYW5jaChDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvblR5cGUg
Y29uZGl0aW9uLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2socmV0dXJuVmFsdWVzLCBkYXRhLnJl
c3VsdEZvckJyYW5jaCgpKTsKKworICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IGRhdGEudGFyZ2V0
QmxvY2tGb3JCcmFuY2goKTsKKyAgICBpZiAoY29uZGl0aW9uKSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBhcHBlbmQoQnJh
bmNoVGVzdDMyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCBjb25kaXRp
b24sIGNvbmRpdGlvbik7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKHRh
cmdldCwgY29udGludWF0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRp
b247CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXBwZW5kKEp1bXApOworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YXJnZXQpOworICAgIH0KKworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYg
ZGVmYXVsdFRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCB0
YXJnZXRzW2ldLT5yZXN1bHRGb3JCcmFuY2goKSk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
ZXhwcmVzc2lvblN0YWNrLCBkZWZhdWx0VGFyZ2V0LnJlc3VsdEZvckJyYW5jaCgpKTsKKworICAg
IC8vIEZJWE1FOiBFbWl0IGVpdGhlciBhIGp1bXAgdGFibGUgb3IgYSBiaW5hcnkgc3dpdGNoIGhl
cmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA1
MworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IHRhcmdldHNbaV0tPnRhcmdldEJsb2NrRm9yQnJh
bmNoKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOworICAgICAgICBhdXRvIGNvbnN0YW50ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmJpZ0ltbShpKSwgY29uc3RhbnQpOworICAgICAgICBhcHBlbmQoQnJhbmNoMzIsIEFy
Zzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCBjb25zdGFudCwgY29uZGl0aW9uKTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFyZ2V0LCBjb250aW51YXRp
b24pOworCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKwor
ICAgIGFwcGVuZChKdW1wKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhkZWZh
dWx0VGFyZ2V0LnRhcmdldEJsb2NrRm9yQnJhbmNoKCkpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgRXhw
cmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAoreworICAgIENv
bnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CisKKyAgICB1bmlmeVZhbHVlc1dp
dGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucmVzdWx0KTsKKyAgICBhcHBlbmQoSnVtcCk7
CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoZGF0YS5jb250aW51YXRpb24pOwor
CisgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkpOworfQorCisKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERh
dGE7CisgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLmNvbnRpbnVhdGlvbjsKKworICAgIGlmIChk
YXRhLnR5cGUoKSA9PSBCbG9ja1R5cGU6OklmKSB7CisgICAgICAgIGFwcGVuZChkYXRhLnNwZWNp
YWwsIEp1bXApOworICAgICAgICBkYXRhLnNwZWNpYWwtPnNldFN1Y2Nlc3NvcnMobV9jdXJyZW50
QmxvY2spOworICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byYgcmVzdWx0IDogZGF0YS5yZXN1
bHQpCisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQp
OworCisgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNv
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KKyAgICBpZiAoZGF0
YS50eXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCkKKyAgICAgICAgcmV0dXJuIGFkZFJldHVy
bihkYXRhLCBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CisKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNT
RVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworCisgICAgbV9t
YWtlc0NhbGxzID0gdHJ1ZTsKKworICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1
cm5UeXBlKCk7CisgICAgaWYgKHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCkKKyAgICAgICAgcmVz
dWx0ID0gdG1wRm9yVHlwZShyZXR1cm5UeXBlKTsKKworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsczsKKworICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KSkgeworICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3Vt
ZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oYXJncy5zaXplKCkpKTsKKworICAgICAgICBhdXRvIGN1cnJlbnRJbnN0YW5jZSA9IGc2
NCgpOworICAgICAgICBhcHBlbmQoTW92ZSwgaW5zdGFuY2VWYWx1ZSgpLCBjdXJyZW50SW5zdGFu
Y2UpOworCisgICAgICAgIGF1dG8gdGFyZ2V0SW5zdGFuY2UgPSBnNjQoKTsKKworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYmV0dGVyIGlzZWwgaGVyZS4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mzk5OQorICAgICAgICBhcHBl
bmQoTW92ZSwgQXJnOjpiaWdJbW0oSW5zdGFuY2U6Om9mZnNldE9mVGFyZ2V0SW5zdGFuY2UoZnVu
Y3Rpb25JbmRleCkpLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChBZGQ2NCwgaW5z
dGFuY2VWYWx1ZSgpLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6
OmFkZHIodGFyZ2V0SW5zdGFuY2UpLCB0YXJnZXRJbnN0YW5jZSk7CisKKyAgICAgICAgQmFzaWNC
bG9jayogaXNXYXNtQmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogaXNFbWJlZGRlckJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAgICAgIGFwcGVuZChC
cmFuY2hUZXN0NjQsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRhcmdl
dEluc3RhbmNlLCB0YXJnZXRJbnN0YW5jZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRT
dWNjZXNzb3JzKGlzV2FzbUJsb2NrLCBpc0VtYmVkZGVyQmxvY2spOworCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVy
blR5cGUpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVl
OworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVk
IHJlZ2lzdGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAg
ICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0
byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxh
dGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hl
Y2tpbmcpKTsKKworICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7
CisgICAgICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2Rl
LCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1w
LCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7
IHRtcCwgcmVwIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
KyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
dGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21F
bnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZW1pdFBhdGNocG9pbnQoaXNXYXNtQmxv
Y2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICAgICAgICAg
IGFwcGVuZChpc1dhc21CbG9jaywgSnVtcCk7CisgICAgICAgICAgICBpc1dhc21CbG9jay0+c2V0
U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byBqdW1wRGVzdGluYXRpb24gPSBnNjQoKTsKKyAgICAgICAgICAgIGFwcGVuZChp
c0VtYmVkZGVyQmxvY2ssIE1vdmUsIEFyZzo6YmlnSW1tKEluc3RhbmNlOjpvZmZzZXRPZldhc21U
b0VtYmVkZGVyU3R1YihmdW5jdGlvbkluZGV4KSksIGp1bXBEZXN0aW5hdGlvbik7CisgICAgICAg
ICAgICBhcHBlbmQoaXNFbWJlZGRlckJsb2NrLCBBZGQ2NCwgaW5zdGFuY2VWYWx1ZSgpLCBqdW1w
RGVzdGluYXRpb24pOworICAgICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgTW92ZSwg
QXJnOjphZGRyKGp1bXBEZXN0aW5hdGlvbiksIGp1bXBEZXN0aW5hdGlvbik7CisKKyAgICAgICAg
ICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBlKHJldHVyblR5cGUp
KTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9iYmVyIGFsbCBwb3RlbnRpYWwgcGlubmVkIHJlZ2lz
dGVycyBzaW5jZSB3ZSBtaWdodCBiZSBsZWF2aW5nIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICAg
IC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGluZyB0byBzb21l
dGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MjE4MQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcp
KTsKKworICAgICAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CisgICAg
ICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKGp1bXBEZXN0aW5hdGlvbik7CisKKyAgICAgICAgICAg
IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUs
IHBhdGNocG9pbnQsIHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJl
cCByZXApIHsKKyAgICAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFtyZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBqaXQuY2Fs
bChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJU
YWcpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGVtaXRQYXRjaHBvaW50KGlzRW1i
ZWRkZXJCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAg
ICAgICAgICAgYXBwZW5kKGlzRW1iZWRkZXJCbG9jaywgSnVtcCk7CisgICAgICAgICAgICBpc0Vt
YmVkZGVyQmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgICAgICAvLyBUaGUgY2Fs
bCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8g
b3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgorICAgICAgICByZXN0b3JlV2ViQXNz
ZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8ubWVt
b3J5LCBjdXJyZW50SW5zdGFuY2UsIGNvbnRpbnVhdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkp
OworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAgICAgIFZl
Y3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOworICAgICAgICB3YXNtQ2FsbGluZ0NvbnZl
bnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCB0b1Rt
cFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CisgICAgICAg
ICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1
bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
ID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21U
b1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVu
dHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKworICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hw
b2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgIH0KKworICAgIHJldHVybiB7
IH07Cit9CisKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEV4cHJlc3Npb25UeXBlIGNh
bGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOworICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKworICAgIG1fbWFrZXNDYWxscyA9IHRydWU7Cisg
ICAgLy8gTm90ZTogY2FsbCBpbmRpcmVjdCBjYW4gY2FsbCBlaXRoZXIgV2ViQXNzZW1ibHlGdW5j
dGlvbiBvciBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi4gQmVjYXVzZQorICAgIC8vIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uIGlzIGxpa2UgY2FsbGluZyBpbnRvIHRoZSBlbWJlZGRlciwg
d2UgY29uc2VydmF0aXZlbHkgYXNzdW1lIGFsbCBjYWxsIGluZGlyZWN0cworICAgIC8vIGNhbiBi
ZSB0byB0aGUgZW1iZWRkZXIgZm9yIG91ciBzdGFjayBjaGVjayBjYWxjdWxhdGlvbi4KKyAgICBt
X21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRz
LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKKworICAgIGF1dG8gY3VycmVu
dEluc3RhbmNlID0gZzY0KCk7CisgICAgYXBwZW5kKE1vdmUsIGluc3RhbmNlVmFsdWUoKSwgY3Vy
cmVudEluc3RhbmNlKTsKKworICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZm
ZXIgPSBnNjQoKTsKKyAgICBFeHByZXNzaW9uVHlwZSBpbnN0YW5jZXNCdWZmZXIgPSBnNjQoKTsK
KyAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoID0gZzY0KCk7
CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShJbnN0
YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpLCBCMzo6V2lkdGg2NCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChBcmc6OmlzVmFsaWRBZGRyRm9ybShUYWJsZTo6b2Zmc2V0T2ZGdW5jdGlvbnMoKSwgQjM6
OldpZHRoNjQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoQXJnOjppc1ZhbGlkQWRkckZvcm0o
VGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCksIEIzOjpXaWR0aDY0KSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEFyZzo6aXNWYWxpZEFkZHJGb3JtKFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpLCBC
Mzo6V2lkdGg2NCkpOworCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoaW5zdGFuY2VW
YWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ckxlbmd0aCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGFibGVGdW5jdGlv
bkJ1ZmZlckxlbmd0aCwgVGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpLCBjYWxsYWJsZUZ1bmN0
aW9uQnVmZmVyKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0
aW9uQnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0T2ZJbnN0YW5jZXMoKSksIGluc3RhbmNlc0J1
ZmZlcik7CisgICAgICAgIGFwcGVuZChNb3ZlMzIsIEFyZzo6YWRkcihjYWxsYWJsZUZ1bmN0aW9u
QnVmZmVyTGVuZ3RoLCBUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIGNhbGxhYmxlRnVuY3Rpb25C
dWZmZXJMZW5ndGgpOworICAgIH0KKworICAgIGFwcGVuZChNb3ZlMzIsIGNhbGxlZUluZGV4LCBj
YWxsZWVJbmRleCk7CisKKyAgICAvLyBDaGVjayB0aGUgaW5kZXggd2UgYXJlIGxvb2tpbmcgZm9y
IGlzIHZhbGlkLgorICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICByZXR1cm4gSW5zdChCcmFu
Y2gzMiwgbnVsbHB0ciwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwp
LCBjYWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlckxlbmd0aCk7CisgICAgfSwgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNDYWxsSW5kaXJlY3QpOworICAgIH0pOworCisgICAgRXhwcmVzc2lvblR5cGUg
Y2FsbGVlQ29kZSA9IGc2NCgpOworICAgIHsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVl
U2lnbmF0dXJlSW5kZXggPSBnNjQoKTsKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGlu
IHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmltbShzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpLCBj
YWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIGFwcGVuZChNdWw2NCwgY2FsbGVlSW5kZXgs
IGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIAorICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIGNhbGxl
ZUNvZGUpOyAvLyBQb2ludGVyIHRvIGNhbGxlZSBjb2RlLgorCisgICAgICAgIC8vIENoZWNrIHRo
YXQgdGhlIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRy
YXAgaWYgaXQgaXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQn
cyBub3QgaW5pdGlhbGl6ZWQuCisgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBo
YW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6
OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3MjEwCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBj
b2RlZ2VuIGFzc3VtZXMgaTY0Iik7CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgZHVt
YiB0byBkbyB0d28gY2hlY2tzIGp1c3QgZm9yIGEgbmljZXIgZXJyb3IgbWVzc2FnZS4KKyAgICAg
ICAgLy8gV2Ugc2hvdWxkIG1vdmUganVzdCB0byB1c2UgYSBzaW5nbGUgYnJhbmNoIGFuZCB0aGVu
IGZpZ3VyZSBvdXQgd2hhdAorICAgICAgICAvLyBlcnJvciB0byB1c2UgaW4gdGhlIGV4Y2VwdGlv
biBoYW5kbGVyLgorCisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0
dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJl
SW5kZXgoKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKworICAgICAgICBlbWl0Q2hlY2soWyZd
IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggPT0g
MCwgIiIpOworICAgICAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDY0LCBudWxscHRyLCBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjYWxsZWVTaWduYXR1cmVJbmRleCwg
Y2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkp
OworICAgICAgICB9KTsKKworICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVy
ZUluZGV4ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsK
KyAgICAgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2g2
NCwgbnVsbHB0ciwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGNhbGxl
ZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgfSwgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5
cGU6OkJhZFNpZ25hdHVyZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIERvIGEgY29u
dGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgYXV0byBuZXdDb250ZXh0SW5z
dGFuY2UgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW5kZXgoaW5zdGFuY2Vz
QnVmZmVyLCBjYWxsZWVJbmRleCwgOCwgMCksIG5ld0NvbnRleHRJbnN0YW5jZSk7CisKKyAgICAg
ICAgQmFzaWNCbG9jayogZG9Db250ZXh0U3dpdGNoID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOworCisgICAg
ICAgIGFwcGVuZChCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCks
IG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uLCBkb0NvbnRleHRTd2l0Y2gpOworCisg
ICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAvLyBX
ZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGNhbGxpbmcgc29tZXRoaW5nIHdpdGggQm91
bmRzQ2hlY2tpbmcgbWVtb3J5LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUg
dG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4
MQorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCku
dG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CisgICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAg
R1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBvbGRDb250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAg
ICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpOworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdz
LnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3Rh
bmNlICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1l
bW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNt
Q29udGV4dEluc3RhbmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBBU1NFUlQo
c2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0
ZXIKKyAgICAgICAgICAgIC8vICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyOTUyCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEp
OworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250
ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250
ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVS
ZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4K
KyAgICAgICAgfSk7CisKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoZG9Db250ZXh0U3dpdGNoLCBw
YXRjaHBvaW50LCBUbXAoKSwgbmV3Q29udGV4dEluc3RhbmNlLCBpbnN0YW5jZVZhbHVlKCkpOwor
ICAgICAgICBhcHBlbmQoZG9Db250ZXh0U3dpdGNoLCBKdW1wKTsKKyAgICAgICAgZG9Db250ZXh0
U3dpdGNoLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRk
cihjYWxsZWVDb2RlKSwgY2FsbGVlQ29kZSk7CisKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWdu
YXR1cmUucmV0dXJuVHlwZSgpOworICAgIGlmIChyZXR1cm5UeXBlICE9IFR5cGU6OlZvaWQpCisg
ICAgICAgIHJlc3VsdCA9IHRtcEZvclR5cGUocmV0dXJuVHlwZSk7CisKKyAgICBhdXRvKiBwYXRj
aCA9IGFkZFBhdGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOworICAgIHBhdGNoLT5lZmZl
Y3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgcGF0Y2gtPmVmZmVjdHMucmVhZHNQaW5uZWQg
PSB0cnVlOworICAgIC8vIFdlIG5lZWQgdG8gY2xvYmJlciBhbGwgcG90ZW50aWFsIHBpbm5lZCBy
ZWdpc3RlcnMgc2luY2Ugd2UgbWlnaHQgYmUgbGVhdmluZyB0aGUgaW5zdGFuY2UuCisgICAgLy8g
V2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBhbHdheXMgY2FsbGluZyBzb21ldGhpbmcg
dGhhdCBpcyBib3VuZHMgY2hlY2tpbmcgc28KKyAgICAvLyBiZWNhdXNlIHRoZSB3YXNtLT53YXNt
IHRodW5rIHVuY29uZGl0aW9uYWxseSBvdmVycmlkZXMgdGhlIHNpemUgcmVnaXN0ZXJzLgorICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53
YXNtIHN0dWIgYXNzdW1lcyBpdCBjYW4KKyAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0
ZXJzIGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzIxODEKKyAgICBwYXRjaC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50
b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKworICAgIFZlY3RvcjxDb25zdHJh
aW5lZFRtcD4gZW1pdEFyZ3M7CisgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUpOworICAg
IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUs
IHBhdGNoLCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVw
KSB7CisgICAgICAgIGVtaXRBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOworICAgIH0pOworICAg
IHBhdGNoLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgaml0LmNhbGwocGFy
YW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsK
KyAgICB9KTsKKworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgcmVz
dWx0LCBXVEZNb3ZlKGVtaXRBcmdzKSk7CisKKyAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJl
ZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBt
b2RpZmllZCBvdXIgTWVtb3J5LgorICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGN1cnJlbnRJbnN0YW5j
ZSwgbV9jdXJyZW50QmxvY2spOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBBaXJJUkdl
bmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lv
blR5cGUmIHNvdXJjZSkKK3sKKyAgICBBU1NFUlQoZHN0LnR5cGUoKSA9PSBzb3VyY2UudHlwZSgp
KTsKKyAgICBhcHBlbmQobW92ZU9wRm9yVmFsdWVUeXBlKGRzdC50eXBlKCkpLCBzb3VyY2UsIGRz
dCk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0
IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0KQor
eworICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IHJlc3VsdFN0YWNrLnNpemUoKSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAgICAgdW5p
ZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrW3Jlc3VsdFN0YWNr
LnNpemUoKSAtIDEgLSBpXSk7Cit9CisKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OmR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBFeHByZXNzaW9uTGlzdCopCit7Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KK3sKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGltcGxlbWVudCBhIHdheSB0byBnaXZlIEluc3QncyBhbiBvcmlnaW4uCisg
ICAgcmV0dXJuIEIzOjpPcmlnaW4oKTsKK30KKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNv
bnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwg
c2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2Rl
IGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRp
ZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3sKKyAgICBhdXRv
IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKworICAgIGNv
bXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBzdGQ6Om1ha2VfdW5pcXVl
PENDYWxsSGVscGVycz4oKTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRK
SVQgPSBzdGQ6Om1ha2VfdW5pcXVlPENDYWxsSGVscGVycz4oKTsKKworICAgIEIzOjpQcm9jZWR1
cmUgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGUgPSBwcm9jZWR1cmUuY29kZSgpOworCisgICAg
cHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIEIzOjpPcmln
aW4gb3JpZ2luKSB7CisgICAgICAgIGlmIChvcmlnaW4uZGF0YSgpKQorICAgICAgICAgICAgb3V0
LnByaW50KCJXYXNtOiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2luPihvcmlnaW4pKTsKKyAg
ICB9KTsKKyAgICAKKyAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1c2UgZWl0aGVyIFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCisgICAgLy8gU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zOjp1bmF2YWlsYWJsZVJlZ2lzdGVycygpLiBJbiBleGNoYW5nZSBmb3Ig
dGhpcyBjb25jZXNzaW9uLCB3ZQorICAgIC8vIGRvbid0IHN0cmljdGx5IG5lZWQgdG8gcnVuIEFp
cjo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLCB3aGljaCBzYXZlcyBhIGJpdCBvZiBDUFUgdGltZSBh
dAorICAgIC8vIG9wdExldmVsPTEuCisgICAgcHJvY2VkdXJlLnNldE5lZWRzVXNlZFJlZ2lzdGVy
cyhmYWxzZSk7CisgICAgCisgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKGNvbXBpbGF0aW9uTW9k
ZSA9PSBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUKKyAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3Nl
bWJseUJCUU9wdGltaXphdGlvbkxldmVsKCkKKyAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJs
eU9NR09wdGltaXphdGlvbkxldmVsKCkpOworCisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0
b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNt
RXhjZXB0aW9uLCBzaWduYXR1cmUpOworICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9y
PiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIGluZm8pOworICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNl
KCkpOworCisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAg
ICAgICAgIGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKS0+YWRkUHJlZGVjZXNzb3IoYmxvY2spOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29k
ZSk7CisgICAgICAgIEIzOjpBaXI6OmdlbmVyYXRlKGNvZGUsICpjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQpOworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5
cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7CisgICAgICAg
IHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZl
UmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1
bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KK3ZvaWQgQWlySVJHZW5lcmF0
b3I6OmVtaXRDaGVja3NGb3JNb2RPckRpdihib29sIGlzU2lnbmVkRGl2LCBFeHByZXNzaW9uVHlw
ZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihJbnRUeXBlKSA9PSA0IHx8IHNpemVvZihJbnRUeXBlKSA9PSA4LCAiIik7CisKKyAgICBlbWl0
Q2hlY2soWyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3Qoc2l6ZW9mKEludFR5cGUpID09IDQgPyBC
cmFuY2hUZXN0MzIgOiBCcmFuY2hUZXN0NjQsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6WmVybyksIHJpZ2h0LCByaWdodCk7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6RGl2aXNpb25CeVplcm8p
OworICAgIH0pOworCisgICAgaWYgKGlzU2lnbmVkRGl2KSB7CisgICAgICAgIEFTU0VSVChzdGQ6
OmlzX3NpZ25lZDxJbnRUeXBlPjo6dmFsdWUpOworICAgICAgICBJbnRUeXBlIG1pbiA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8SW50VHlwZT46Om1pbigpOworCisgICAgICAgIC8vIEZJWE1FOiBCZXR0
ZXIgaXNlbCBmb3IgY29tcGFyZSB3aXRoIGltbXMgaGVyZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mzk5OQorICAgICAgICBhdXRvIG1pblRt
cCA9IHNpemVvZihJbnRUeXBlKSA9PSA0ID8gZzMyKCkgOiBnNjQoKTsKKyAgICAgICAgYXV0byBu
ZWdPbmUgPSBzaXplb2YoSW50VHlwZSkgPT0gNCA/IGczMigpIDogZzY0KCk7CisKKyAgICAgICAg
QjM6OkFpcjo6T3Bjb2RlIG9wID0gc2l6ZW9mKEludFR5cGUpID09IDQgPyBDb21wYXJlMzIgOiBD
b21wYXJlNjQ7CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShzdGF0aWNfY2FzdDx1
aW50NjRfdD4obWluKSksIG1pblRtcCk7CisgICAgICAgIGFwcGVuZChvcCwgQXJnOjpyZWxDb25k
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGxlZnQsIG1pblRtcCwgbWluVG1wKTsKKworICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjppbW0oLTEpLCBuZWdPbmUpOworICAgICAgICBhcHBlbmQob3As
IEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpLCByaWdodCwgbmVnT25lLCBuZWdP
bmUpOworCisgICAgICAgIGVtaXRDaGVjayhbJl0geworICAgICAgICAgICAgcmV0dXJuIEluc3Qo
QnJhbmNoVGVzdDMyLCBudWxscHRyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8pLCBtaW5UbXAsIG5lZ09uZSk7CisgICAgICAgIH0sCisgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpJbnRlZ2Vy
T3ZlcmZsb3cpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bnRUeXBlPgordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdE1vZE9yRGl2KGJvb2wgaXNEaXYsIEV4
cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09IDQgfHwgc2l6ZW9m
KEludFR5cGUpID09IDgsICIiKTsKKworICAgIHJlc3VsdCA9IHNpemVvZihJbnRUeXBlKSA9PSA0
ID8gZzMyKCkgOiBnNjQoKTsKKworICAgIGJvb2wgaXNTaWduZWQgPSBzdGQ6OmlzX3NpZ25lZDxJ
bnRUeXBlPjo6dmFsdWU7CisKKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIEIzOjpBaXI6
Ok9wY29kZSBkaXY7CisgICAgICAgIHN3aXRjaCAoc2l6ZW9mKEludFR5cGUpKSB7CisgICAgICAg
IGNhc2UgNDoKKyAgICAgICAgICAgIGRpdiA9IGlzU2lnbmVkID8gRGl2MzIgOiBVRGl2MzI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgZGl2ID0gaXNT
aWduZWQgPyBEaXY2NCA6IFVEaXY2NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgYXBwZW5kKGRpdiwgbGhzLCByaHMsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKCFp
c0RpdikgeworICAgICAgICAgICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9PSA0ID8gTXVsMzIg
OiBNdWw2NCwgcmVzdWx0LCByaHMsIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQoc2l6ZW9m
KEludFR5cGUpID09IDQgPyBTdWIzMiA6IFN1YjY0LCBsaHMsIHJlc3VsdCwgcmVzdWx0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBDUFUoWDg2KSB8fCBDUFUo
WDg2XzY0KQorICAgIFRtcCBlYXgoWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIFRtcCBlZHgoWDg2
UmVnaXN0ZXJzOjplZHgpOworCisgICAgaWYgKGlzU2lnbmVkKSB7CisgICAgICAgIEIzOjpBaXI6
Ok9wY29kZSBjb252ZXJ0VG9Eb3VibGVXb3JkOworICAgICAgICBCMzo6QWlyOjpPcGNvZGUgZGl2
OworICAgICAgICBzd2l0Y2ggKHNpemVvZihJbnRUeXBlKSkgeworICAgICAgICBjYXNlIDQ6Cisg
ICAgICAgICAgICBjb252ZXJ0VG9Eb3VibGVXb3JkID0gWDg2Q29udmVydFRvRG91YmxlV29yZDMy
OworICAgICAgICAgICAgZGl2ID0gWDg2RGl2MzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSA4OgorICAgICAgICAgICAgY29udmVydFRvRG91YmxlV29yZCA9IFg4NkNvbnZlcnRU
b1F1YWRXb3JkNjQ7CisgICAgICAgICAgICBkaXYgPSBYODZEaXY2NDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGltcGxlbWVudCAicmVzID0gRGl2
PENoaWxsPi9Nb2Q8Q2hpbGw+KG51bSwgZGVuKSIgYXMgZm9sbG93czoKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gICAgIGlmIChkZW4gKyAxIDw9X3Vuc2lnbmVkIDEpIHsKKyAgICAgICAgLy8gICAg
ICAgICBpZiAoIWRlbikgeworICAgICAgICAvLyAgICAgICAgICAgICByZXMgPSAwOworICAgICAg
ICAvLyAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIC8vICAgICAgICAgfQorICAgICAg
ICAvLyAgICAgICAgIGlmIChudW0gPT0gLTIxNDc0ODM2NDgpIHsKKyAgICAgICAgLy8gICAgICAg
ICAgICAgcmVzID0gaXNEaXYgPyBudW0gOiAwOworICAgICAgICAvLyAgICAgICAgICAgICBnb3Rv
IGRvbmU7CisgICAgICAgIC8vICAgICAgICAgfQorICAgICAgICAvLyAgICAgfQorICAgICAgICAv
LyAgICAgcmVzID0gbnVtICgvIG9yICUpIGRldjsKKyAgICAgICAgLy8gZG9uZToKKworICAgICAg
ICBCYXNpY0Jsb2NrKiBkZW5Jc0dvb2QgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFz
aWNCbG9jayogZGVuTWF5QmVCYWQgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNC
bG9jayogZGVuTm90WmVybyA9IG1fY29kZS5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2Nr
KiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgICAgICBhdXRvIHRlbXAg
PSBzaXplb2YoSW50VHlwZSkgPT0gNCA/IGczMigpIDogZzY0KCk7CisgICAgICAgIGF1dG8gb25l
ID0gYWRkQ29uc3RhbnQoc2l6ZW9mKEludFR5cGUpID09IDQgPyBUeXBlOjpJMzIgOiBUeXBlOjpJ
NjQsIDEpOworCisgICAgICAgIGFwcGVuZChzaXplb2YoSW50VHlwZSkgPT0gNCA/IEFkZDMyIDog
QWRkNjQsIHJocywgb25lLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKHNpemVvZihJbnRUeXBlKSA9
PSA0ID8gQnJhbmNoMzIgOiBCcmFuY2g2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZSksIHRlbXAsIG9uZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3Jz
KGRlbklzR29vZCwgZGVuTWF5QmVCYWQpOworCisgICAgICAgIGFwcGVuZChkZW5NYXlCZUJhZCwg
WG9yNjQsIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKGRlbk1heUJlQmFkLCBzaXpl
b2YoSW50VHlwZSkgPT0gNCA/IEJyYW5jaFRlc3QzMiA6IEJyYW5jaFRlc3Q2NCwgQXJnOjpyZXND
b25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgcmhzLCByaHMpOworICAgICAgICBkZW5NYXlCZUJh
ZC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRlbk5vdFplcm8pOworCisgICAgICAgIGF1
dG8gbWluID0gYWRkQ29uc3RhbnQoZGVuTm90WmVybywgc2l6ZW9mKEludFR5cGUpID09IDQgPyBU
eXBlOjpJMzIgOiBUeXBlOjpJNjQsIHN0ZDo6bnVtZXJpY19saW1pdHM8SW50VHlwZT46Om1pbigp
KTsKKyAgICAgICAgaWYgKGlzRGl2KQorICAgICAgICAgICAgYXBwZW5kKGRlbk5vdFplcm8sIHNp
emVvZihJbnRUeXBlKSA9PSA0ID8gTW92ZTMyIDogTW92ZSwgbWluLCByZXN1bHQpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJlc3VsdCBpcyB6ZXJvLCBhcyBzZXQgYWJvdmUuLi4K
KyAgICAgICAgfQorICAgICAgICBhcHBlbmQoZGVuTm90WmVybywgc2l6ZW9mKEludFR5cGUpID09
IDQgPyBCcmFuY2gzMiA6IEJyYW5jaDY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsKSwgbGhzLCBtaW4pOworICAgICAgICBkZW5Ob3RaZXJvLT5zZXRTdWNjZXNzb3JzKGNvbnRp
bnVhdGlvbiwgZGVuSXNHb29kKTsKKworICAgICAgICBhdXRvIGRpdlJlc3VsdCA9IGlzRGl2ID8g
ZWF4IDogZWR4OworICAgICAgICBhcHBlbmQoZGVuSXNHb29kLCBNb3ZlLCBsaHMsIGVheCk7Cisg
ICAgICAgIGFwcGVuZChkZW5Jc0dvb2QsIGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4KTsK
KyAgICAgICAgYXBwZW5kKGRlbklzR29vZCwgZGl2LCBlYXgsIGVkeCwgcmhzKTsKKyAgICAgICAg
YXBwZW5kKGRlbklzR29vZCwgc2l6ZW9mKEludFR5cGUpID09IDQgPyBNb3ZlMzIgOiBNb3ZlLCBk
aXZSZXN1bHQsIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChkZW5Jc0dvb2QsIEp1bXApOworICAg
ICAgICBkZW5Jc0dvb2QtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgICAgICBt
X2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEIzOjpBaXI6Ok9wY29kZSBkaXYgPSBzaXplb2YoSW50VHlwZSkgPT0gNCA/IFg4NlVEaXYz
MiA6IFg4NlVEaXY2NDsKKworICAgIFRtcCBkaXZSZXN1bHQgPSBpc0RpdiA/IGVheCA6IGVkeDsK
KworICAgIGFwcGVuZChNb3ZlLCBsaHMsIGVheCk7CisgICAgYXBwZW5kKFhvcjY0LCBlZHgsIGVk
eCk7CisgICAgYXBwZW5kKGRpdiwgZWF4LCBlZHgsIHJocyk7CisgICAgYXBwZW5kKHNpemVvZihJ
bnRUeXBlKSA9PSA0ID8gTW92ZTMyIDogTW92ZSwgZGl2UmVzdWx0LCByZXN1bHQpOworI2Vsc2UK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyRGl2Uz4oRXhwcmVzc2lv
blR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9kT3JEaXY8aW50MzJfdD4o
dHJ1ZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRNb2RPckRpdjxpbnQzMl90Pih0cnVlLCBsZWZ0
LCByaWdodCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlJlbVM+KEV4cHJlc3Npb25UeXBlIGxl
ZnQsIEV4cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PGludDMyX3Q+KGZhbHNlLCBs
ZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PGludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdo
dCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkRpdlU+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4
cHJlc3Npb25UeXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PHVpbnQzMl90PihmYWxzZSwgbGVmdCwg
cmlnaHQpOworICAgIGVtaXRNb2RPckRpdjx1aW50MzJfdD4odHJ1ZSwgbGVmdCwgcmlnaHQsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJSZW1VPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNz
aW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIGVtaXRDaGVja3NGb3JNb2RPckRpdjx1aW50MzJfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0
KTsKKyAgICBlbWl0TW9kT3JEaXY8dWludDMyX3Q+KGZhbHNlLCBsZWZ0LCByaWdodCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NERpdlM+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgZW1pdENoZWNrc0Zvck1vZE9yRGl2PGludDY0X3Q+KHRydWUsIGxlZnQsIHJpZ2h0KTsKKyAg
ICBlbWl0TW9kT3JEaXY8aW50NjRfdD4odHJ1ZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJNjRSZW1TPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdo
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRD
aGVja3NGb3JNb2RPckRpdjxpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQpOworICAgIGVtaXRN
b2RPckRpdjxpbnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjREaXZVPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGVtaXRDaGVja3NG
b3JNb2RPckRpdjx1aW50NjRfdD4oZmFsc2UsIGxlZnQsIHJpZ2h0KTsKKyAgICBlbWl0TW9kT3JE
aXY8dWludDY0X3Q+KHRydWUsIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
UmVtVT4oRXhwcmVzc2lvblR5cGUgbGVmdCwgRXhwcmVzc2lvblR5cGUgcmlnaHQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBlbWl0Q2hlY2tzRm9yTW9k
T3JEaXY8dWludDY0X3Q+KGZhbHNlLCBsZWZ0LCByaWdodCk7CisgICAgZW1pdE1vZE9yRGl2PHVp
bnQ2NF90PihmYWxzZSwgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJDdHo+
KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7
CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQuY291bnRUcmFp
bGluZ1plcm9zMzIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOwor
ICAgIHJlc3VsdCA9IGczMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3Vs
dCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEN0ej4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2lu
dCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIGppdC5jb3VudFRyYWlsaW5nWmVyb3M2NChwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1swXS5ncHIoKSk7CisgICAgfSk7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgZW1p
dFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9w
Y250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKworI2lmIENQVShYODZfNjQpCisgICAg
aWYgKE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0NvdW50UG9wdWxhdGlvbigpKSB7CisgICAgICAg
IGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQzMik7CisgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBqaXQuY291bnRQb3B1
bGF0aW9uMzIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsK
KyAgICAgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hwb2ludCwgcmVzdWx0LCBhcmcpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgorCisgICAgdWludDMyX3QgKCpwb3Bjb3VudCko
aW50MzJfdCkgPSBbXSAoaW50MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWls
dGluX3BvcGNvdW50KHZhbHVlKTsgfTsKKyAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7
CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNDb3Vu
dFBvcHVsYXRpb24oKSkgeworICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2lu
dChCMzo6SW50NjQpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6
Om5vbmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgaml0LmNvdW50UG9wdWxhdGlvbjY0KHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1z
WzBdLmdwcigpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9p
bnQsIHJlc3VsdCwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKKwor
ICAgIHVpbnQ2NF90ICgqcG9wY291bnQpKGludDY0X3QpID0gW10gKGludDY0X3QgdmFsdWUpIC0+
IHVpbnQ2NF90IHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsgfTsKKyAgICBl
bWl0Q0NhbGwocG9wY291bnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxGNjRDb252ZXJ0VUk2ND4oRXhw
cmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkRvdWJsZSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgaWYgKGlz
WDg2KCkpCisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7Cisg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJz
KCkpOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworI2lmIENQ
VShYODZfNjQpCisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9Eb3VibGUocGFyYW1zWzFdLmdw
cigpLCBwYXJhbXNbMF0uZnByKCksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOworI2Vsc2UKKyAgICAg
ICAgaml0LmNvbnZlcnRVSW50NjRUb0RvdWJsZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5m
cHIoKSk7CisjZW5kaWYKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBlbWl0UGF0
Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJDb252ZXJ0
VUk2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkZs
b2F0KTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAg
ICBpZiAoaXNYODYoKSkKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJz
ID0gMTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hS
ZWdpc3RlcnMoKSk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmNvbnZlcnRVSW50NjRUb0Zsb2F0KHBhcmFt
c1sxXS5ncHIoKSwgcGFyYW1zWzBdLmZwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyNlbHNl
CisgICAgICAgIGppdC5jb252ZXJ0VUludDY0VG9GbG9hdChwYXJhbXNbMV0uZ3ByKCksIHBhcmFt
c1swXS5mcHIoKSk7CisjZW5kaWYKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBl
bWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRO
ZWFyZXN0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6
RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsK
KyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC5y
b3VuZFRvd2FyZE5lYXJlc3RJbnREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnBy
KCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBh
dGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMk5lYXJlc3Q+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpGbG9hdCk7CisgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQucm91bmRUb3dhcmROZWFyZXN0
SW50RmxvYXQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAg
IHJlc3VsdCA9IGYzMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwg
YXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkY2NFRydW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludChCMzo6RG91YmxlKTsKKyAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
QjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgIGppdC5yb3VuZFRvd2FyZFplcm9Eb3VibGUocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMF0uZnByKCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGVt
aXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMlRy
dW5jPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChCMzo6Rmxv
YXQpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOworICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0LnJvdW5k
VG93YXJkWmVyb0Zsb2F0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmZwcigpKTsKKyAgICB9
KTsKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCBy
ZXN1bHQsIGFyZyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8g
bWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KC1zdGF0
aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkpOwor
ICAgIGF1dG8gbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjY0LCBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpKSk7CisKKyAgICBhdXRvIHRlbXAxID0gZzMyKCk7CisgICAgYXV0byB0ZW1wMiA9IGczMigp
OworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBtYXgsIHRlbXAyKTsKKyAgICBh
cHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRDaGVjayhbJl0geworICAgICAg
ICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAgfSwgWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
dGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNU
cnVuYyk7CisgICAgfSk7CisKKyAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludChC
Mzo6SW50MzIpOworICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgp
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgaml0
LnRydW5jYXRlRG91YmxlVG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgfSk7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgZW1pdFBhdGNocG9pbnQocGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8Pgor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnVuY1NGMzI+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGF1dG8gbWF4ID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KC1zdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpKSk7CisgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpKSkpOworCisgICAgYXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIg
PSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOwor
ICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOwor
ICAgIGFwcGVuZChPcjMyLCB0ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7Cisg
ICAgICAgIHJldHVybiBJbnN0KEJyYW5jaFRlc3QzMiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc1RydW5jKTsKKyAgICB9KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBv
aW50KEIzOjpJbnQzMik7CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpu
b25lKCk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICBqaXQudHJ1bmNhdGVGbG9hdFRvSW50MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3By
KCkpOworICAgIH0pOworICAgIHJlc3VsdCA9IGczMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBh
dGNocG9pbnQsIHJlc3VsdCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCisKK3RlbXBsYXRl
PD4KK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1bmNVRjY0PihFeHBy
ZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICBhdXRvIG1heCA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVp
bnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1pbigpKSAqIC0yLjApKTsKKyAgICBhdXRvIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkY2NCwg
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PigtMS4wKSk7CisKKyAgICBhdXRvIHRlbXAxID0gZzMyKCk7
CisgICAgYXV0byB0ZW1wMiA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6
OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkKSwgYXJnLCBtaW4sIHRlbXAxKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpk
b3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0ZW1wMik7
CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMy
LCBudWxscHRyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0ZW1wMiwg
dGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2VwdGlvbihq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisgICAgYXV0
byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRjaHBvaW50
LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBn
MzIoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChwYXRjaHBvaW50LCByZXN1bHQsIGFyZyk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpJMzJUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRkQ29uc3RhbnQo
VHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgKiBzdGF0aWNfY2FzdDxmbG9hdD4oLTIu
MCkpKTsKKyAgICBhdXRvIG1pbiA9IGFkZENvbnN0YW50KFR5cGU6OkYzMiwgYml0d2lzZV9jYXN0
PHVpbnQzMl90PihzdGF0aWNfY2FzdDxmbG9hdD4oLTEuMCkpKTsKKworICAgIGF1dG8gdGVtcDEg
PSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9h
dCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWxP
clVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVGbG9hdCwg
QXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9yMzIsIHRlbXAxLCB0
ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNo
VGVzdDMyLCBudWxscHRyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLCB0
ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRUaHJvd0V4Y2Vw
dGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOworICAgIH0pOworCisg
ICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDMyKTsKKyAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIGppdC50cnVuY2F0ZUZsb2F0VG9VaW50
MzIocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJlc3Vs
dCA9IGczMigpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJnKTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydW5jU0Y2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRDb25z
dGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGRvdWJs
ZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgYXV0byBtaW4g
PSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpKTsKKworICAg
IGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAgYXBwZW5k
KENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENvbXBhcmVE
b3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0
ZW1wMSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0
KEJyYW5jaFRlc3QzMiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvKSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9
KTsKKworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVEb3Vi
bGVUb0ludDY0KHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICB9KTsKKwor
ICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3Vs
dCwgYXJnKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXgg
PSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgKiAtMi4wKSk7
CisgICAgYXV0byBtaW4gPSBhZGRDb25zdGFudChUeXBlOjpGNjQsIGJpdHdpc2VfY2FzdDx1aW50
NjRfdD4oLTEuMCkpOworICAgIAorICAgIGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRl
bXAyID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1p
biwgdGVtcDEpOworICAgIGFwcGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSwgYXJnLCBt
YXgsIHRlbXAyKTsKKyAgICBhcHBlbmQoT3IzMiwgdGVtcDEsIHRlbXAyKTsKKworICAgIGVtaXRD
aGVjayhbJl0geworICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFy
Zzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyksIHRlbXAyLCB0ZW1wMik7CisgICAg
fSwgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9u
VHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CisgICAgfSk7CisKKyAgICBUeXBlZFRtcCBzaWduQml0
Q29uc3RhbnQ7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHNpZ25CaXRDb25zdGFudCA9IGFk
ZENvbnN0YW50KFR5cGU6OkY2NCwgYml0d2lzZV9jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50NjRfdD46Om1heCgpKSkpOworCisgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1w
PiBhcmdzOworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7
CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgYXJn
cy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNYODYoKSkgeworICAgICAgICBhcmdzLmFwcGVuZChz
aWduQml0Q29uc3RhbnQpOworICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3Rl
cnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2ggPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJS
ZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVnOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAg
ICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5mcFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25z
dGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAgICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVE
b3VibGVUb1VpbnQ2NChwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSwgc2NyYXRjaCwg
Y29uc3RhbnQpOworICAgIH0pOworCisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgZW1pdFBhdGNo
cG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShhcmdzKSk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PgorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1NGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGF1dG8gbWF4ID0gYWRkQ29u
c3RhbnQoVHlwZTo6RjMyLCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KC1zdGF0aWNfY2FzdDxmbG9h
dD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpKSk7CisgICAgYXV0byBtaW4g
PSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSkpOworCisgICAg
YXV0byB0ZW1wMSA9IGczMigpOworICAgIGF1dG8gdGVtcDIgPSBnMzIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQpLCBhcmcsIG1pbiwgdGVtcDEpOworICAgIGFwcGVuZChDb21wYXJlRmxv
YXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVx
dWFsT3JVbm9yZGVyZWQpLCBhcmcsIG1heCwgdGVtcDIpOworICAgIGFwcGVuZChPcjMyLCB0ZW1w
MSwgdGVtcDIpOworCisgICAgZW1pdENoZWNrKFsmXSB7CisgICAgICAgIHJldHVybiBJbnN0KEJy
YW5jaFRlc3QzMiwgbnVsbHB0ciwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
KSwgdGVtcDIsIHRlbXAyKTsKKyAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0VGhyb3dF
eGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKKyAgICB9KTsK
KworICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRv
SW50NjQocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgIH0pOworICAgIHJl
c3VsdCA9IGc2NCgpOworICAgIGVtaXRQYXRjaHBvaW50KHBhdGNocG9pbnQsIHJlc3VsdCwgYXJn
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgYXV0byBtYXggPSBhZGRD
b25zdGFudChUeXBlOjpGMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSAqIHN0YXRpY19jYXN0PGZs
b2F0PigtMi4wKSkpOworICAgIGF1dG8gbWluID0gYWRkQ29uc3RhbnQoVHlwZTo6RjMyLCBiaXR3
aXNlX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PGZsb2F0PigtMS4wKSkpOworICAgIAorICAg
IGF1dG8gdGVtcDEgPSBnMzIoKTsKKyAgICBhdXRvIHRlbXAyID0gZzMyKCk7CisgICAgYXBwZW5k
KENvbXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNz
VGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWluLCB0ZW1wMSk7CisgICAgYXBwZW5kKENv
bXBhcmVGbG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxPclVub3JkZXJlZCksIGFyZywgbWF4LCB0ZW1wMik7CisgICAgYXBwZW5kKE9y
MzIsIHRlbXAxLCB0ZW1wMik7CisKKyAgICBlbWl0Q2hlY2soWyZdIHsKKyAgICAgICAgcmV0dXJu
IEluc3QoQnJhbmNoVGVzdDMyLCBudWxscHRyLCBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8pLCB0ZW1wMiwgdGVtcDIpOworICAgIH0sIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVt
aXRUaHJvd0V4Y2VwdGlvbihqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwor
ICAgIH0pOworCisgICAgVHlwZWRUbXAgc2lnbkJpdENvbnN0YW50OworICAgIGlmIChpc1g4Nigp
KQorICAgICAgICBzaWduQml0Q29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBlOjpGMzIsIGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDY0X3Q+OjptYXgoKSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkp
OworCisgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OkludDY0KTsKKyAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKKyAgICBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoYXJnKTsKKyAgICBpZiAoaXNY
ODYoKSkgeworICAgICAgICBhcmdzLmFwcGVuZChzaWduQml0Q29uc3RhbnQpOworICAgICAgICBw
YXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIH0KKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2gg
PSBJbnZhbGlkRlBSUmVnOworICAgICAgICBGUFJSZWcgY29uc3RhbnQgPSBJbnZhbGlkRlBSUmVn
OworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc2NyYXRjaCA9IHBhcmFtcy5m
cFNjcmF0Y2goMCk7CisgICAgICAgICAgICBjb25zdGFudCA9IHBhcmFtc1syXS5mcHIoKTsKKyAg
ICAgICAgfQorICAgICAgICBqaXQudHJ1bmNhdGVGbG9hdFRvVWludDY0KHBhcmFtc1sxXS5mcHIo
KSwgcGFyYW1zWzBdLmdwcigpLCBzY3JhdGNoLCBjb25zdGFudCk7CisgICAgfSk7CisKKyAgICBy
ZXN1bHQgPSBnNjQoKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hw
b2ludCwgcmVzdWx0LCBXVEZNb3ZlKGFyZ3MpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFNoaWZ0KFR5cGUgdHlwZSwgQjM6OkFpcjo6T3Bjb2RlIG9w
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQodHlwZSA9PSBUeXBl
OjpJNjQgfHwgdHlwZSA9PSBUeXBlOjpJMzIpOworICAgIHJlc3VsdCA9IHRtcEZvclR5cGUodHlw
ZSk7CisKKyAgICBpZiAoaXNWYWxpZEZvcm0ob3AsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpU
bXApKSB7CisgICAgICAgIGFwcGVuZChvcCwgdmFsdWUsIHNoaWZ0LCByZXN1bHQpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKyAgICAKKyNpZiBDUFUoWDg2XzY0KQorICAgIFRtcCBlY3gg
PSBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpOworICAgIGFwcGVuZChNb3ZlLCB2YWx1ZSwgcmVzdWx0
KTsKKyAgICBhcHBlbmQoTW92ZSwgc2hpZnQsIGVjeCk7CisgICAgYXBwZW5kKG9wLCBlY3gsIHJl
c3VsdCk7CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYK
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRJbnRlZ2VyU3Vi
KEIzOjpBaXI6Ok9wY29kZSBvcCwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSBy
aHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NF
UlQob3AgPT0gU3ViMzIgfHwgb3AgPT0gU3ViNjQpOworCisgICAgcmVzdWx0ID0gb3AgPT0gU3Vi
MzIgPyBnMzIoKSA6IGc2NCgpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9wLCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIGxocywgcmhzLCByZXN1
bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlz
WDg2KCkpOworICAgIC8vIFN1YiBhLCBiCisgICAgLy8gbWVhbnMKKyAgICAvLyBiID0gYiBTdWIg
YQorICAgIGFwcGVuZChNb3ZlLCBsaHMsIHJlc3VsdCk7CisgICAgYXBwZW5kKG9wLCByaHMsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRmxv
YXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlQob3AgPT0gQWJzRmxvYXQgfHwgb3AgPT0gQWJzRG91YmxlKTsKKworICAgIHJlc3VsdCA9
IG9wID09IEFic0Zsb2F0ID8gZjMyKCkgOiBmNjQoKTsKKworICAgIGlmIChpc1ZhbGlkRm9ybShv
cCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIHZhbHVlLCByZXN1
bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGlz
WDg2KCkpOworCisgICAgaWYgKG9wID09IEFic0Zsb2F0KSB7CisgICAgICAgIGF1dG8gY29uc3Rh
bnQgPSBnMzIoKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tKHN0YXRpY19jYXN0PHVp
bnQzMl90Pih+KDF1bGwgPDwgMzEpKSksIGNvbnN0YW50KTsKKyAgICAgICAgYXBwZW5kKE1vdmUz
MlRvRmxvYXQsIGNvbnN0YW50LCByZXN1bHQpOworICAgICAgICBhcHBlbmQoQW5kRmxvYXQsIHZh
bHVlLCByZXN1bHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBnNjQo
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKH4oMXVsbCA8PCA2MykpLCBjb25z
dGFudCk7CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgY29uc3RhbnQsIHJlc3VsdCk7
CisgICAgICAgIGFwcGVuZChBbmREb3VibGUsIHZhbHVlLCByZXN1bHQpOworICAgIH0KKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRGbG9hdGluZ1BvaW50Qmlu
T3AoVHlwZSB0eXBlLCBCMzo6QWlyOjpPcGNvZGUgb3AsIEV4cHJlc3Npb25UeXBlIGxocywgRXhw
cmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6RjMyIHx8IHR5cGUgPT0gVHlwZTo6RjY0KTsK
KyAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHR5cGUpOworCisgICAgaWYgKGlzVmFsaWRGb3JtKG9w
LCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICBhcHBlbmQob3AsIGxo
cywgcmhzLCByZXN1bHQpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJFTEVB
U0VfQVNTRVJUKGlzWDg2KCkpOworCisgICAgLy8gT3AgYSwgYgorICAgIC8vIG1lYW5zCisgICAg
Ly8gYiA9IGIgT3AgYQorICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUodHlwZSksIGxocywg
cmVzdWx0KTsKKyAgICBhcHBlbmQob3AsIHJocywgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ2Vp
bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGFwcGVuZChDZWlsRmxvYXQsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMk11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChNdWwzMiwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgcmV0dXJuIGFkZEludGVnZXJTdWIoU3ViMzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRMZT4o
RXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFw
cGVuZChDb21wYXJlRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUxlc3NUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkRl
bW90ZUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGYzMigpOworICAgIGFwcGVuZChDb252ZXJ0
RG91YmxlVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTWluPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisKKyAgICBCYXNpY0Js
b2NrKiBpc0VxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90RXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBncmVhdGVyVGhhbk9yRXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRCbG9jaywgQnJhbmNoRmxv
YXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBh
cmcxKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVh
bCk7CisKKyAgICBhcHBlbmQoaXNFcXVhbCwgT3JGbG9hdCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsK
KyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVhbC0+c2V0U3VjY2Vzc29ycyhj
b250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBNb3ZlRmxvYXQsIGFyZzAsIHJl
c3VsdCk7CisgICAgYXBwZW5kKG5vdEVxdWFsLCBCcmFuY2hGbG9hdCwgQXJnOjpkb3VibGVDb25k
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVx
dWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKwor
ICAgIGFwcGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVGbG9hdCwgYXJnMSwgcmVzdWx0KTsK
KyAgICBhcHBlbmQoZ3JlYXRlclRoYW5PckVxdWFsLCBKdW1wKTsKKyAgICBncmVhdGVyVGhhbk9y
RXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0aW9uKTsKKworICAgIG1fY3VycmVudEJsb2Nr
ID0gY29udGludWF0aW9uOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lPihFeHByZXNzaW9uVHlwZSBhcmcw
LCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVEb3VibGUs
IEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEx0PihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVE
b3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4pLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNYXg+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxlc3NUaGFuID0gbV9jb2RlLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9jb2RlLmFkZEJsb2NrKCk7CisK
KyAgICBhcHBlbmQobV9jdXJyZW50QmxvY2ssIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50
QmxvY2stPnNldFN1Y2Nlc3NvcnMoaXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlz
RXF1YWwsIEFuZEZsb2F0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIGFwcGVuZChpc0VxdWFs
LCBKdW1wKTsKKyAgICBpc0VxdWFsLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAg
ICBhcHBlbmQobm90RXF1YWwsIE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICBhcHBlbmQo
bm90RXF1YWwsIEJyYW5jaEZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUxlc3NUaGFuKSwgYXJnMCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMo
bGVzc1RoYW4sIGNvbnRpbnVhdGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVGbG9h
dCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQobGVzc1RoYW4sIEp1bXApOworICAgIGxlc3NU
aGFuLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9
IGNvbnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAs
IEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGU6OkY2NCwgTXVs
RG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRGl2PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHBy
ZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0aW5nUG9pbnRCaW5PcChUeXBlOjpGMzIsIERpdkZsb2F0
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6STMyQ2x6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7Cisg
ICAgYXBwZW5kKENvdW50TGVhZGluZ1plcm9zMzIsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkYzMkNvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8gRklYTUU6
IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0d28gb3Bl
cmFuZCBmb3JtcyBvbiB4ODYKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkzOTk5CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXV0byB0ZW1wMSA9IGcz
MigpOworICAgIGF1dG8gc2lnbiA9IGczMigpOworICAgIGF1dG8gdmFsdWUgPSBnMzIoKTsKKwor
ICAgIC8vIEZJWE1FOiBUcnkgdG8gdXNlIEltbSB3aGVyZSBwb3NzaWJsZToKKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisgICAgYXBwZW5kKE1v
dmVGbG9hdFRvMzIsIGFyZzEsIHRlbXAxKTsKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0o
MHg4MDAwMDAwMCksIHNpZ24pOworICAgIGFwcGVuZChBbmQzMiwgdGVtcDEsIHNpZ24sIHNpZ24p
OworCisgICAgYXBwZW5kKE1vdmVEb3VibGVUbzY0LCBhcmcwLCB0ZW1wMSk7CisgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YmlnSW1tKDB4N2ZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDMy
LCB0ZW1wMSwgdmFsdWUsIHZhbHVlKTsKKworICAgIGFwcGVuZChPcjMyLCBzaWduLCB2YWx1ZSwg
dmFsdWUpOworICAgIGFwcGVuZChNb3ZlMzJUb0Zsb2F0LCB2YWx1ZSwgcmVzdWx0KTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8
T3BUeXBlOjpGNjRDb252ZXJ0VUkzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAg
IGF1dG8gdGVtcCA9IGc2NCgpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHRlbXApOworICAg
IGFwcGVuZChDb252ZXJ0SW50NjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6
RjMyUmVpbnRlcnByZXRJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBl
bmQoTW92ZTMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0QW5kPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5k
KEFuZDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJOZT4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21w
YXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxP
clVub3JkZXJlZCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NEd0PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5k
KENvbXBhcmVEb3VibGUsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3Jl
YXRlclRoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3Rl
bXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJTcXJ0PihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgYXBwZW5kKFNxcnRGbG9hdCwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjY0R2U+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVD
b25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHdFM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJl
c3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENv
bmQoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0R3RVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZSksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEVxej4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChUZXN0NjQsIEFyZzo6cmVzQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGFyZzAsIGFyZzAsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6
OkY2NERpdj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRGbG9h
dGluZ1BvaW50QmluT3AoVHlwZTo6RjY0LCBEaXZEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJB
ZGQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAg
ICBhcHBlbmQoQWRkRmxvYXQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE9y
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAg
YXBwZW5kKE9yNjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkxlVT4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVu
ZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsKSwg
YXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTGVTPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwg
QXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwpLCBhcmcwLCBhcmcx
LCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjROZT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BU
eXBlOjpJNjRDbHo+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoQ291
bnRMZWFkaW5nWmVyb3M2NCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyTmVnPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgcmVzdWx0ID0gZjMyKCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKE5lZ2F0ZUZsb2F0
LCBBcmc6OlRtcCwgQXJnOjpUbXApKQorICAgICAgICBhcHBlbmQoTmVnYXRlRmxvYXQsIGFyZzAs
IHJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBhZGRDb25zdGFu
dChUeXBlOjpJMzIsIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0w
LjApKSk7CisgICAgICAgIGF1dG8gdGVtcCA9IGczMigpOworICAgICAgICBhcHBlbmQoTW92ZUZs
b2F0VG8zMiwgYXJnMCwgdGVtcCk7CisgICAgICAgIGFwcGVuZChYb3IzMiwgY29uc3RhbnQsIHRl
bXApOworICAgICAgICBhcHBlbmQoTW92ZTMyVG9GbG9hdCwgdGVtcCwgcmVzdWx0KTsKKyAgICB9
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6OkkzMkFuZD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUg
YXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJl
c3VsdCA9IGczMigpOworICAgIGFwcGVuZChBbmQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyTHRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcx
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0
ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFJvdHI+KEV4
cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STY0
LCBSb3RhdGVSaWdodDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWJzPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0
dXJuIGFkZEZsb2F0aW5nUG9pbnRBYnMoQWJzRG91YmxlLCBhcmcwLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyTHRTPihFeHBy
ZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5k
KENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiksIGFyZzAs
IGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMkVxPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmUzMiwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkY2NENvcHlzaWduPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgLy8g
RklYTUU6IFdlIGNhbiBoYXZlIGJldHRlciBjb2RlZ2VuIGhlcmUgZm9yIHRoZSBpbW1zIGFuZCB0
d28gb3BlcmFuZCBmb3JtcyBvbiB4ODYKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkzOTk5CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXV0byB0ZW1w
MSA9IGc2NCgpOworICAgIGF1dG8gc2lnbiA9IGc2NCgpOworICAgIGF1dG8gdmFsdWUgPSBnNjQo
KTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82NCwgYXJnMSwgdGVtcDEpOworICAgIGFwcGVu
ZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDgwMDAwMDAwMDAwMDAwMDApLCBzaWduKTsKKyAgICBhcHBl
bmQoQW5kNjQsIHRlbXAxLCBzaWduLCBzaWduKTsKKworICAgIGFwcGVuZChNb3ZlRG91YmxlVG82
NCwgYXJnMCwgdGVtcDEpOworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbSgweDdmZmZmZmZm
ZmZmZmZmZmYpLCB2YWx1ZSk7CisgICAgYXBwZW5kKEFuZDY0LCB0ZW1wMSwgdmFsdWUsIHZhbHVl
KTsKKworICAgIGFwcGVuZChPcjY0LCBzaWduLCB2YWx1ZSwgdmFsdWUpOworICAgIGFwcGVuZChN
b3ZlNjRUb0RvdWJsZSwgdmFsdWUsIHJlc3VsdCk7CisKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJ
NjQ+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDY0
VG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0Um90bD4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgLy8gQVJNNjQg
ZG9lc24ndCBoYXZlIGEgcm90YXRlIGxlZnQuCisgICAgICAgIGF1dG8gbmV3U2hpZnQgPSBnNjQo
KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIGFyZzEsIG5ld1NoaWZ0KTsKKyAgICAgICAgYXBwZW5k
KE5lZzY0LCBuZXdTaGlmdCk7CisgICAgICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJNjQsIFJv
dGF0ZVJpZ2h0NjQsIGFyZzAsIG5ld1NoaWZ0LCByZXN1bHQpOworICAgIH0gZWxzZQorICAgICAg
ICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STY0LCBSb3RhdGVMZWZ0NjQsIGFyZzAsIGFyZzEsIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpGMzJMdD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigp
OworICAgIGFwcGVuZChDb21wYXJlRmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07
Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRD
b252ZXJ0U0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDb252
ZXJ0SW50MzJUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0RXE+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZURvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVh
bCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkxlPihFeHByZXNzaW9uVHlw
ZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmVG
bG9hdCwgQXJnOjpkb3VibGVDb25kKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1
YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJHZT4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChDb21wYXJl
RmxvYXQsIEFyZzo6ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyU2hyVT4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJMzIsIFVy
c2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkYzMkNvbnZlcnRVSTMyPihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZjMyKCk7CisgICAgYXV0byB0ZW1wID0gZzY0KCk7CisgICAgYXBwZW5kKE1vdmUzMiwg
YXJnMCwgdGVtcCk7CisgICAgYXBwZW5kKENvbnZlcnRJbnQ2NFRvRmxvYXQsIHRlbXAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBSc2hpZnQzMiwgYXJnMCwgYXJnMSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okkz
MkdlVT4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGczMigpOwor
ICAgIGFwcGVuZChDb21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Q2VpbD4oRXhwcmVz
c2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDZWlsRG91YmxlLCBhcmcwLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJHZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkkzMlNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVy
biBhZGRTaGlmdChUeXBlOjpJMzIsIExzaGlmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0Rmxvb3I+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKyAgICBhcHBlbmQoRmxvb3JEb3VibGUsIGFy
ZzAsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlhvcj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChYb3IzMiwgYXJnMCwgYXJnMSwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyQWJzPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmV0dXJuIGFkZEZsb2F0
aW5nUG9pbnRBYnMoQWJzRmxvYXQsIGFyZzAsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRNaW4+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBmNjQoKTsKKworICAgIEJhc2ljQmxvY2sqIGlzRXF1
YWwgPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RFcXVhbCA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGdyZWF0ZXJUaGFuT3JFcXVhbCA9IG1fY29k
ZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRC
bG9jaygpOworCisgICAgYXBwZW5kKG1fY3VycmVudEJsb2NrLCBCcmFuY2hEb3VibGUsIEFyZzo6
ZG91YmxlQ29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpLCBhcmcwLCBhcmcxKTsKKyAg
ICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhpc0VxdWFsLCBub3RFcXVhbCk7CisKKyAg
ICBhcHBlbmQoaXNFcXVhbCwgT3JEb3VibGUsIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgYXBw
ZW5kKGlzRXF1YWwsIEp1bXApOworICAgIGlzRXF1YWwtPnNldFN1Y2Nlc3NvcnMoY29udGludWF0
aW9uKTsKKworICAgIGFwcGVuZChub3RFcXVhbCwgTW92ZURvdWJsZSwgYXJnMCwgcmVzdWx0KTsK
KyAgICBhcHBlbmQobm90RXF1YWwsIEJyYW5jaERvdWJsZSwgQXJnOjpkb3VibGVDb25kKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiksIGFyZzAsIGFyZzEpOworICAgIG5vdEVxdWFsLT5z
ZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbiwgZ3JlYXRlclRoYW5PckVxdWFsKTsKKworICAgIGFw
cGVuZChncmVhdGVyVGhhbk9yRXF1YWwsIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7CisgICAg
YXBwZW5kKGdyZWF0ZXJUaGFuT3JFcXVhbCwgSnVtcCk7CisgICAgZ3JlYXRlclRoYW5PckVxdWFs
LT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CisKKyAgICBtX2N1cnJlbnRCbG9jayA9IGNv
bnRpbnVhdGlvbjsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGMzJNdWw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoTXVsRmxvYXQsIGFyZzAsIGFy
ZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFN1Yj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhw
cmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJldHVybiBhZGRJbnRlZ2VyU3ViKFN1YjY0LCBhcmcwLCBhcmcxLCByZXN1bHQp
OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
UmVpbnRlcnByZXRGMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQo
TW92ZUZsb2F0VG8zMiwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyQWRkPihFeHByZXNz
aW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKEFk
ZDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRl
PD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTdWI+KEV4cHJlc3Npb25U
eXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkRmxvYXRpbmdQb2ludEJpbk9wKFR5cGU6
OkY2NCwgU3ViRG91YmxlLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZTw+IGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyT3I+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoT3IzMiwgYXJnMCwg
YXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0THRVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBF
eHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NEx0Uz4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9
IGczMigpOworICAgIGFwcGVuZChDb21wYXJlNjQsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4pLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRDb252ZXJ0
U0k2ND4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDb252ZXJ0SW50
NjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0WG9yPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKFhvcjY0
LCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4g
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRHZVU+KEV4cHJlc3Npb25UeXBl
IGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCksIGFyZzAsIGFyZzEs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NE11bD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVz
c2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVuZChNdWw2NCwgYXJnMCwgYXJnMSwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyU3ViPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9u
VHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZjMyKCk7CisgICAgaWYgKGlzVmFsaWRGb3JtKFN1YkZsb2F0LCBBcmc6OlRt
cCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkKKyAgICAgICAgYXBwZW5kKFN1YkZsb2F0LCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1g4Nigp
KTsKKyAgICAgICAgYXBwZW5kKE1vdmVGbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAgICAgICAgYXBw
ZW5kKFN1YkZsb2F0LCBhcmcxLCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQor
Cit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0UHJvbW90
ZUYzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChDb252ZXJ0Rmxv
YXRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjY0QWRkPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZjY0KCk7CisgICAgYXBwZW5kKEFkZERv
dWJsZSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0R2VTPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBh
cmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwpLCBh
cmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRFeHRlbmRVSTMyPihFeHByZXNzaW9u
VHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgcmVzdWx0ID0gZzY0KCk7CisgICAgYXBwZW5kKE1vdmUzMiwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyTmU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQg
PSBnMzIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhcmcwICYmIGFyZzEpOworICAgIGFwcGVuZChD
b21wYXJlMzIsIEFyZzo6cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpLCBhcmcwLCBh
cmcxLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRSZWludGVycHJldEk2ND4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGY2NCgpOworICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgYXJnMCwgcmVzdWx0
KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZE9wPE9wVHlwZTo6RjMyRXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBl
IGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBy
ZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0RXE+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBn
MzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyRmxvb3I+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICByZXN1bHQgPSBmMzIoKTsKKyAgICBhcHBlbmQoRmxvb3JGbG9hdCwgYXJnMCwgcmVz
dWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZE9wPE9wVHlwZTo6RjMyQ29udmVydFNJMzI+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBm
MzIoKTsKKyAgICBhcHBlbmQoQ29udmVydEludDMyVG9GbG9hdCwgYXJnMCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STMyRXF6PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAgYXBwZW5k
KFRlc3QzMiwgQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpaZXJvKSwgYXJnMCwgYXJnMCwg
cmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UmVpbnRlcnByZXRGNjQ+KEV4cHJlc3Npb25UeXBlIGFy
ZzAsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1
bHQgPSBnNjQoKTsKKyAgICBhcHBlbmQoTW92ZURvdWJsZVRvNjQsIGFyZzAsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6Okk2NFNoclM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFy
ZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1
cm4gYWRkU2hpZnQoVHlwZTo6STY0LCBSc2hpZnQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFNoclU+
KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6
STY0LCBVcnNoaWZ0NjQsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpGNjRTcXJ0PihFeHByZXNzaW9uVHlwZSBh
cmcwLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZjY0KCk7CisgICAgYXBwZW5kKFNxcnREb3VibGUsIGFyZzAsIHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6Okk2NFNobD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBh
ZGRTaGlmdChUeXBlOjpJNjQsIExzaGlmdDY0LCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0
ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6RjMyR3Q+KEV4cHJl
c3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQo
Q29tcGFyZUZsb2F0LCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0
ZXJUaGFuKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyV3JhcEk2ND4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAoreworICAgIHJlc3VsdCA9IGczMigpOworICAgIGFwcGVuZChNb3ZlMzIsIGFyZzAsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRPcDxPcFR5cGU6OkkzMlJvdGw+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25U
eXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIC8vIEFSTTY0IGRvZXNuJ3QgaGF2ZSBhIHJvdGF0
ZSBsZWZ0LgorICAgICAgICBhdXRvIG5ld1NoaWZ0ID0gZzY0KCk7CisgICAgICAgIGFwcGVuZChN
b3ZlLCBhcmcxLCBuZXdTaGlmdCk7CisgICAgICAgIGFwcGVuZChOZWc2NCwgbmV3U2hpZnQpOwor
ICAgICAgICByZXR1cm4gYWRkU2hpZnQoVHlwZTo6STMyLCBSb3RhdGVSaWdodDMyLCBhcmcwLCBu
ZXdTaGlmdCwgcmVzdWx0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGFkZFNoaWZ0KFR5
cGU6OkkzMiwgUm90YXRlTGVmdDMyLCBhcmcwLCBhcmcxLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUm90cj4oRXhwcmVzc2lv
blR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHJldHVybiBhZGRTaGlmdChUeXBlOjpJMzIsIFJvdGF0
ZVJpZ2h0MzIsIGFyZzAsIGFyZzEsIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJHdFU+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4
cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsKKyAgICBhcHBlbmQoQ29tcGFyZTMyLCBBcmc6OnJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlKSwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0RXh0ZW5kU0kzMj4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFw
cGVuZChTaWduRXh0ZW5kMzJUb1B0ciwgYXJnMCwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
fQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyR3RT
PihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBhcmcxLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVzdWx0ID0gZzMyKCk7CisgICAg
YXBwZW5kKENvbXBhcmUzMiwgQXJnOjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
biksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkY2NE5lZz4oRXhwcmVzc2lvblR5
cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHJlc3VsdCA9IGY2NCgpOworICAgIGlmIChpc1ZhbGlkRm9ybShOZWdhdGVEb3VibGUsIEFyZzo6
VG1wLCBBcmc6OlRtcCkpCisgICAgICAgIGFwcGVuZChOZWdhdGVEb3VibGUsIGFyZzAsIHJlc3Vs
dCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29uc3RhbnQgPSBhZGRDb25zdGFudChUeXBl
OjpJNjQsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPigtMC4wKSkp
OworICAgICAgICBhdXRvIHRlbXAgPSBnNjQoKTsKKyAgICAgICAgYXBwZW5kKE1vdmVEb3VibGVU
bzY0LCBhcmcwLCB0ZW1wKTsKKyAgICAgICAgYXBwZW5kKFhvcjY0LCBjb25zdGFudCwgdGVtcCk7
CisgICAgICAgIGFwcGVuZChNb3ZlNjRUb0RvdWJsZSwgdGVtcCwgcmVzdWx0KTsKKyAgICB9Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRP
cDxPcFR5cGU6OkY2NE1heD4oRXhwcmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJn
MSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3Vs
dCA9IGY2NCgpOworCisgICAgQmFzaWNCbG9jayogaXNFcXVhbCA9IG1fY29kZS5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIG5vdEVxdWFsID0gbV9jb2RlLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbGVzc1RoYW4gPSBtX2NvZGUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKKworICAgIGFwcGVuZChtX2N1cnJlbnRC
bG9jaywgQnJhbmNoRG91YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKSwgYXJnMCwgYXJnMSk7CisgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
aXNFcXVhbCwgbm90RXF1YWwpOworCisgICAgYXBwZW5kKGlzRXF1YWwsIEFuZERvdWJsZSwgYXJn
MCwgYXJnMSwgcmVzdWx0KTsKKyAgICBhcHBlbmQoaXNFcXVhbCwgSnVtcCk7CisgICAgaXNFcXVh
bC0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24pOworCisgICAgYXBwZW5kKG5vdEVxdWFsLCBN
b3ZlRG91YmxlLCBhcmcwLCByZXN1bHQpOworICAgIGFwcGVuZChub3RFcXVhbCwgQnJhbmNoRG91
YmxlLCBBcmc6OmRvdWJsZUNvbmQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSwgYXJn
MCwgYXJnMSk7CisgICAgbm90RXF1YWwtPnNldFN1Y2Nlc3NvcnMobGVzc1RoYW4sIGNvbnRpbnVh
dGlvbik7CisKKyAgICBhcHBlbmQobGVzc1RoYW4sIE1vdmVEb3VibGUsIGFyZzEsIHJlc3VsdCk7
CisgICAgYXBwZW5kKGxlc3NUaGFuLCBKdW1wKTsKKyAgICBsZXNzVGhhbi0+c2V0U3VjY2Vzc29y
cyhjb250aW51YXRpb24pOworCisgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTw+IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZE9wPE9wVHlwZTo6STY0TGVVPihFeHByZXNzaW9uVHlwZSBhcmcwLCBFeHByZXNzaW9uVHlwZSBh
cmcxLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgcmVz
dWx0ID0gZzMyKCk7CisgICAgYXBwZW5kKENvbXBhcmU2NCwgQXJnOjpyZWxDb25kKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvd09yRXF1YWwpLCBhcmcwLCBhcmcxLCByZXN1bHQpOworICAgIHJldHVybiB7
IH07Cit9CisKK3RlbXBsYXRlPD4gYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
NjRMZVM+KEV4cHJlc3Npb25UeXBlIGFyZzAsIEV4cHJlc3Npb25UeXBlIGFyZzEsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICByZXN1bHQgPSBnMzIoKTsK
KyAgICBhcHBlbmQoQ29tcGFyZTY0LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuT3JFcXVhbCksIGFyZzAsIGFyZzEsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8PiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NEFkZD4oRXhw
cmVzc2lvblR5cGUgYXJnMCwgRXhwcmVzc2lvblR5cGUgYXJnMSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHJlc3VsdCA9IGc2NCgpOworICAgIGFwcGVu
ZChBZGQ2NCwgYXJnMCwgYXJnMSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlv
bkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1l
bW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVw
Q291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJs
aWM6CiAgICAgdHlwZWRlZiBDb250cm9sRGF0YTo6UmVzdWx0TGlzdCBSZXN1bHRMaXN0OwogICAg
IHR5cGVkZWYgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeSBDb250
cm9sRW50cnk7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhw
cmVzc2lvbiA9IG51bGxwdHI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBl
bXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB0eXBlZGVmIFN0cmlu
ZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlwZT4gVW5leHBlY3Rl
ZFJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAJKHJldmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJXYXNt
QWlySVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIldhc21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtMjcxLDcgKzI3
MiwxMSBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpCiAKICAgICAg
ICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0
aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRl
eF0gOiBudWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9u
LmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVw
LCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQ7CisgICAg
ICAgIGlmIChPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQorICAgICAgICAgICAgcGFyc2VBbmRD
b21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XSwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgp
LCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2Rl
LCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24uZGF0YS5kYXRh
KCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwg
Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dX
YXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJl
c3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmNwcAkocmV2aXNpb24gMjQwNjk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
MzYgQEAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZwogICAgIHJldHVy
biBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiB9CiAKK2NvbnN0IEpTQ0NhbGxpbmdDb252
ZW50aW9uQWlyJiBqc2NDYWxsaW5nQ29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlO
ZXZlckRlc3Ryb3llZDxKU0NDYWxsaW5nQ29udmVudGlvbkFpcj4gc3RhdGljSlNDQ2FsbGluZ0Nv
bnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY0pTQ0NhbGxpbmdDb252
ZW50aW9uRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlv
bkZsYWcsIFtdICgpIHsKKyAgICAgICAgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb24uY29uc3Ry
dWN0KFZlY3RvcjxSZWc+KCksIFZlY3RvcjxSZWc+KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0YXRpY0pTQ0NhbGxpbmdDb252
ZW50aW9uOworfQorCitjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5n
Q29udmVudGlvbkFpcigpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxXYXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXI+IHN0YXRpY1dhc21DYWxsaW5nQ29udmVudGlvbjsKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgc3RhdGljV2FzbUNhbGxpbmdDb252ZW50aW9uRmxhZzsKKyAgICBz
dGQ6OmNhbGxfb25jZShzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb25GbGFnLCBbXSAoKSB7Cisg
ICAgICAgIFZlY3RvcjxSZWc+IGdwckFyZ3VtZW50UmVnaXN0ZXJzKEdQUkluZm86Om51bWJlck9m
QXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BS
SW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAgICAgICAgZ3ByQXJn
dW1lbnRSZWdpc3RlcnNbaV0gPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisKKyAg
ICAgICAgVmVjdG9yPFJlZz4gZnByQXJndW1lbnRSZWdpc3RlcnMoRlBSSW5mbzo6bnVtYmVyT2ZB
cmd1bWVudFJlZ2lzdGVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJ
bmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBmcHJBcmd1
bWVudFJlZ2lzdGVyc1tpXSA9IEZQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKKworICAg
ICAgICBzdGF0aWNXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY29uc3RydWN0KFdURk1vdmUoZ3ByQXJn
dW1lbnRSZWdpc3RlcnMpLCBXVEZNb3ZlKGZwckFyZ3VtZW50UmVnaXN0ZXJzKSwgUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RhdGlj
V2FzbUNhbGxpbmdDb252ZW50aW9uOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAyNDA2OTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZS5oIgogI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgogI2luY2x1ZGUgIkIz
QmFzaWNCbG9jay5oIgpAQCAtNDQsMjcgKzQ1LDI3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKLXR5cGVkZWYgdW5zaWduZWQgKCpOZXh0T2Zmc2V0KSh1bnNpZ25lZCBj
dXJyZW50T2Zmc2V0LCBCMzo6VHlwZSB0eXBlKTsKK3R5cGVkZWYgdW5zaWduZWQgKCpOZXh0T2Zm
c2V0KSh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0KTsKIAogdGVtcGxhdGU8dW5zaWduZWQgaGVhZGVy
U2l6ZSwgTmV4dE9mZnNldCB1cGRhdGVPZmZzZXQ+CiBjbGFzcyBDYWxsaW5nQ29udmVudGlvbiB7
CiBwdWJsaWM6CiAgICAgQ2FsbGluZ0NvbnZlbnRpb24oVmVjdG9yPFJlZz4mJiBncHJBcmdzLCBW
ZWN0b3I8UmVnPiYmIGZwckFyZ3MsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lzdGVycykK
LSAgICAgICAgOiBtX2dwckFyZ3MoZ3ByQXJncykKLSAgICAgICAgLCBtX2ZwckFyZ3MoZnByQXJn
cykKLSAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoY2FsbGVlU2F2ZVJlZ2lzdGVycykK
KyAgICAgICAgOiBtX2dwckFyZ3MoV1RGTW92ZShncHJBcmdzKSkKKyAgICAgICAgLCBtX2ZwckFy
Z3MoV1RGTW92ZShmcHJBcmdzKSkKKyAgICAgICAgLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMoV1RG
TW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSkKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0b3I8UmVnPiByZWdBcmdzLCBC
Mzo6VHlwZSB0eXBlLCBzaXplX3QmIGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0KSBjb25zdAor
ICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChjb25zdCBWZWN0b3I8UmVnPiYg
cmVnQXJncywgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09mZnNldCkgY29uc3QKICAgICB7
CiAgICAgICAgIGlmIChjb3VudCA8IHJlZ0FyZ3Muc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IEIzOjpWYWx1ZVJlcDo6cmVnKHJlZ0FyZ3NbY291bnQrK10pOwogCiAgICAgICAgIGNvdW50Kys7
CiAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXN1bHQgPSBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1l
bnQoc3RhY2tPZmZzZXQpOwotICAgICAgICBzdGFja09mZnNldCA9IHVwZGF0ZU9mZnNldChzdGFj
a09mZnNldCwgdHlwZSk7CisgICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNr
T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTczLDEwICs3NCwx
MCBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBCMzo6
SW50MzI6CiAgICAgICAgIGNhc2UgQjM6OkludDY0OgotICAgICAgICAgICAgcmV0dXJuIG1hcnNo
YWxsQXJndW1lbnRJbXBsKG1fZ3ByQXJncywgdHlwZSwgZ3BBcmd1bWVudENvdW50LCBzdGFja09m
ZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9ncHJBcmdz
LCBncEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAgICAgY2FzZSBCMzo6RmxvYXQ6
CiAgICAgICAgIGNhc2UgQjM6OkRvdWJsZToKLSAgICAgICAgICAgIHJldHVybiBtYXJzaGFsbEFy
Z3VtZW50SW1wbChtX2ZwckFyZ3MsIHR5cGUsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZnByQXJncywgZnBB
cmd1bWVudENvdW50LCBzdGFja09mZnNldCk7CiAgICAgICAgIGNhc2UgQjM6OlZvaWQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTg5LDE5ICsxOTAsMTQ2IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlclNhdmVSZWdpc3RlcnM7CiB9OwogCi1pbmxp
bmUgdW5zaWduZWQgbmV4dEpTQ09mZnNldCh1bnNpZ25lZCBjdXJyZW50T2Zmc2V0LCBCMzo6VHlw
ZSkKKy8vIEZJWE1FOiBTaGFyZSBtb3JlIGNvZGUgd2l0aCBDYWxsaW5nQ29udmVudGlvbiBhYm92
ZToKKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQwNjUKK3Rl
bXBsYXRlPHVuc2lnbmVkIGhlYWRlclNpemUsIE5leHRPZmZzZXQgdXBkYXRlT2Zmc2V0PgorY2xh
c3MgQ2FsbGluZ0NvbnZlbnRpb25BaXIgeworcHVibGljOgorICAgIENhbGxpbmdDb252ZW50aW9u
QWlyKFZlY3RvcjxSZWc+JiYgZ3ByQXJncywgVmVjdG9yPFJlZz4mJiBmcHJBcmdzLCBSZWdpc3Rl
clNldCYmIGNhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgIDogbV9ncHJBcmdzKFdURk1vdmUo
Z3ByQXJncykpCisgICAgICAgICwgbV9mcHJBcmdzKFdURk1vdmUoZnByQXJncykpCisgICAgICAg
ICwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUoY2FsbGVlU2F2ZVJlZ2lzdGVycykpCisg
ICAgeworICAgICAgICBSZWdpc3RlclNldCBzY3JhdGNoID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMo
KTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7CisgICAgICAgIHNjcmF0Y2guZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRI
YXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgc2NyYXRjaC5leGNsdWRlKFJlZ2lzdGVyU2V0
OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDogbV9ncHJBcmdzKQor
ICAgICAgICAgICAgc2NyYXRjaC5jbGVhcihyZWcpOworICAgICAgICBmb3IgKFJlZyByZWcgOiBt
X2NhbGxlZVNhdmVSZWdpc3RlcnMpCisgICAgICAgICAgICBzY3JhdGNoLmNsZWFyKHJlZyk7Cisg
ICAgICAgIGZvciAoUmVnIHJlZyA6IHNjcmF0Y2gpCisgICAgICAgICAgICBtX3NjcmF0Y2hHUFJz
LmFwcGVuZChyZWcpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NjcmF0Y2hHUFJzLnNpemUo
KSA+PSAyKTsKKyAgICB9CisKKyAgICBHUFJSZWcgcHJvbG9ndWVTY3JhdGNoKHNpemVfdCBpKSBj
b25zdCB7IHJldHVybiBtX3NjcmF0Y2hHUFJzW2ldLmdwcigpOyB9CisKK3ByaXZhdGU6CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0Z1bmMsIHR5cGVuYW1lIFN0YWNrRnVuYz4KKyAgICB2b2lk
IG1hcnNoYWxsQXJndW1lbnRJbXBsKGNvbnN0IFZlY3RvcjxSZWc+JiByZWdBcmdzLCBzaXplX3Qm
IGNvdW50LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdGdW5jJiByZWdGdW5jLCBjb25z
dCBTdGFja0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8
IHJlZ0FyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICByZWdGdW5jKHJlZ0FyZ3NbY291bnQrK10p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgc3RhY2tGdW5jKHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSB1cGRh
dGVPZmZzZXQoc3RhY2tPZmZzZXQpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBS
ZWdGdW5jLCB0eXBlbmFtZSBTdGFja0Z1bmM+CisgICAgdm9pZCBtYXJzaGFsbEFyZ3VtZW50KFR5
cGUgdHlwZSwgc2l6ZV90JiBncEFyZ3VtZW50Q291bnQsIHNpemVfdCYgZnBBcmd1bWVudENvdW50
LCBzaXplX3QmIHN0YWNrT2Zmc2V0LCBjb25zdCBSZWdGdW5jJiByZWdGdW5jLCBjb25zdCBTdGFj
a0Z1bmMmIHN0YWNrRnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpJNjQ6CisgICAgICAg
ICAgICBtYXJzaGFsbEFyZ3VtZW50SW1wbChtX2dwckFyZ3MsIGdwQXJndW1lbnRDb3VudCwgc3Rh
Y2tPZmZzZXQsIHJlZ0Z1bmMsIHN0YWNrRnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAg
bWFyc2hhbGxBcmd1bWVudEltcGwobV9mcHJBcmdzLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zm
c2V0LCByZWdGdW5jLCBzdGFja0Z1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5
dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGxvYWRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgZ3BB
cmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRDb3VudCA9IDA7Cisg
ICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRlclNpemU7CisKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAg
ICAgICAgIG1hcnNoYWxsQXJndW1lbnQoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50
Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQsCisgICAgICAgICAgICAgICAgWyZd
IChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoQjM6OkFpcjo6VG1wKHJl
ZyksIGkpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgWyZdIChzaXplX3Qg
c3RhY2tPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihCMzo6QWlyOjpBcmc6
OmFkZHIoQjM6OkFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgc3RhY2tPZmZz
ZXQpLCBpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0
b3IgZm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgc2V0dXBDYWxsKEIzOjpBaXI6OkNvZGUmIGNvZGUsIFR5cGUgcmV0dXJuVHlw
ZSwgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCwgY29uc3QgVmVjdG9yPEIzOjpBaXI6
OlRtcD4mIGFyZ3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAg
ICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IGZwQXJndW1lbnRD
b3VudCA9IDA7CisgICAgICAgIHNpemVfdCBzdGFja09mZnNldCA9IGhlYWRlclNpemUgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgZm9yIChhdXRvIHRtcCA6IGFyZ3MpIHsK
KyAgICAgICAgICAgIG1hcnNoYWxsQXJndW1lbnQodG1wLmlzR1AoKSA/IFR5cGU6Okk2NCA6IFR5
cGU6OkY2NCwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0LAor
ICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBmdW5j
dG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpyZWcocmVnKSk7CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICBbJl0gKHNpemVfdCBzdGFja09mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICBmdW5jdG9yKHRtcCwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHN0YWNrT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBjb2RlLnJlcXVl
c3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIHN0YWNrT2Zmc2V0KSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAg
IHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0Zv
ckpTQ2FsbCgpKTsKKworICAgICAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBUeXBlOjpWb2lkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMy
OgorICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnJlc3Vs
dENvbnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OnJlZyhGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIGNh
c2UgVHlwZTo6STY0OgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9
IEIzOjpWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWc+IG1f
Z3ByQXJnczsKKyAgICBjb25zdCBWZWN0b3I8UmVnPiBtX2ZwckFyZ3M7CisgICAgVmVjdG9yPFJl
Zz4gbV9zY3JhdGNoR1BSczsKKyAgICBjb25zdCBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdp
c3RlcnM7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9jYWxsZXJTYXZlUmVnaXN0ZXJzOworfTsK
KworaW5saW5lIHVuc2lnbmVkIG5leHRKU0NPZmZzZXQodW5zaWduZWQgY3VycmVudE9mZnNldCkK
IHsKICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIHNpemVvZihSZWdpc3Rlcik7CiB9CiAKIGNv
bnN0ZXhwciB1bnNpZ25lZCBqc2NIZWFkZXJTaXplID0gRXhlY1N0YXRlOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOwotdHlwZWRlZiBDYWxsaW5nQ29udmVudGlvbjxq
c2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PiBKU0NDYWxsaW5nQ29udmVudGlvbjsKLQotdHlw
ZWRlZiBKU0NDYWxsaW5nQ29udmVudGlvbiBXYXNtQ2FsbGluZ0NvbnZlbnRpb247CiAKK3VzaW5n
IEpTQ0NhbGxpbmdDb252ZW50aW9uID0gQ2FsbGluZ0NvbnZlbnRpb248anNjSGVhZGVyU2l6ZSwg
bmV4dEpTQ09mZnNldD47Cit1c2luZyBXYXNtQ2FsbGluZ0NvbnZlbnRpb24gPSBKU0NDYWxsaW5n
Q29udmVudGlvbjsKIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVu
dGlvbigpOwogY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKTsKIAordXNpbmcgSlNDQ2FsbGluZ0NvbnZlbnRpb25BaXIgPSBDYWxsaW5nQ29udmVudGlv
bkFpcjxqc2NIZWFkZXJTaXplLCBuZXh0SlNDT2Zmc2V0PjsKK3VzaW5nIFdhc21DYWxsaW5nQ29u
dmVudGlvbkFpciA9IEpTQ0NhbGxpbmdDb252ZW50aW9uQWlyOworY29uc3QgSlNDQ2FsbGluZ0Nv
bnZlbnRpb25BaXImIGpzY0NhbGxpbmdDb252ZW50aW9uQWlyKCk7Citjb25zdCBXYXNtQ2FsbGlu
Z0NvbnZlbnRpb25BaXImIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpOworCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHJl
dmlzaW9uIDI0MDY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMTAgKzMzMywxMCBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tl
ZEFwcGVuZChtX2V4cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJl
c3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUg
cmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKCk7CiAgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdz
LCByZXN1bHQpKTsKIAotICAgICAgICBpZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVz
c2lvbikKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24oKSkK
ICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCiAgICAgICAg
IHJldHVybiB7IH07CkBAIC0zNjIsMTAgKzM2MiwxMCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChtX2V4
cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJz
dEFyZ3VtZW50SW5kZXgpOwogCi0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRl
eHQ6OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29u
dGV4dDo6ZW1wdHlFeHByZXNzaW9uKCk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGFkZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOwogCi0gICAg
ICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQorICAgICAgICBpZiAo
cmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbigpKQogICAgICAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQw
OSw3ICs0MDksNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAg
ICAgY2FzZSBCcjoKICAgICBjYXNlIEJySWY6IHsKICAgICAgICAgdWludDMyX3QgdGFyZ2V0Owot
ICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24gPSBDb250ZXh0OjplbXB0eUV4cHJlc3Np
b247CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiA9IENvbnRleHQ6OmVtcHR5RXhw
cmVzc2lvbigpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0
YXJnZXQpLCAiY2FuJ3QgZ2V0IGJyIC8gYnJfaWYncyB0YXJnZXQiKTsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0YXJnZXQgPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpLCAiYnIgLyBicl9p
ZidzIHRhcmdldCAiLCB0YXJnZXQsICIgZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9j
b250cm9sU3RhY2suc2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudE9wY29kZSA9PSBCcklm
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAyNDA2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gRXhwcmVzc2lvbkxpc3Q7CiAgICAgdHlwZWRl
ZiBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT46OkNvbnRyb2xFbnRyeSBDb250cm9sRW50cnk7CiAK
LSAgICBzdGF0aWMgY29uc3QgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gVm9pZDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsg
cmV0dXJuIFZvaWQ7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgogICAgIE5F
VkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3Mu
Li4gYXJncykgY29uc3QK
</data>

          </attachment>
      

    </bug>

</bugzilla>