<?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>182165</bug_id>
          
          <creation_ts>2018-01-25 21:08:11 -0800</creation_ts>
          <short_desc>JavaScriptCore builtins should be partially minified in Release builds not Debug builds</short_desc>
          <delta_ts>2018-01-26 13:23:59 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jlewis3</cc>
    
    <cc>joepeck</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>1393425</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:08:11 -0800</bug_when>
    <thetext>JavaScriptCore builtins should be partially minified in Release builds not Debug builds

Added with:
&lt;https://webkit.org/b/152290&gt; Builtin source should be minified more
http://trac.webkit.org/changeset/194144

&gt; diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_model.py b/Source/JavaScriptCore/Scripts/builtins/builtins_model.py
&gt; old mode 100644
&gt; new mode 100755
&gt; index d765eca865e..cdd5f900354
&gt; --- a/Source/JavaScriptCore/Scripts/builtins/builtins_model.py
&gt; +++ b/Source/JavaScriptCore/Scripts/builtins/builtins_model.py
&gt; @@ -100,6 +103,11 @@ class BuiltinFunction:
&gt;      @staticmethod
&gt;      def fromString(function_string):
&gt;          function_source = multilineCommentRegExp.sub(&quot;&quot;, function_string)
&gt; +        if os.getenv(&quot;CONFIGURATION&quot;, &quot;Debug&quot;).startswith(&quot;Debug&quot;):
&gt; +            function_source = lineWithOnlySingleLineCommentRegExp.sub(&quot;&quot;, function_source)
&gt; +            function_source = lineWithTrailingSingleLineCommentRegExp.sub(&quot;\n&quot;, function_source)
&gt; +            function_source = multipleEmptyLinesRegExp.sub(&quot;\n&quot;, function_source)

Should have been `if os.getenv(&quot;CONFIGURATION&quot;, &quot;Debug&quot;).startswith(&quot;Debug&quot;):` otherwise we are only doing these optimizations for Debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393432</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:23:29 -0800</bug_when>
    <thetext>Example of the diff of a before/after the few minifications being applied:

    534c463
    &lt; const int s_arrayPrototypeSomeCodeLength = 540;
    ---
    &gt; const int s_arrayPrototypeSomeCodeLength = 460;
    539,554c468,480
    &lt;     &quot;    \&quot;use strict\&quot;;\n&quot; \
    &lt;     &quot;\n&quot; \
    &lt;     &quot;    var array = @toObject(this, \&quot;Array.prototype.some requires that |this| not be null or undefined\&quot;);\n&quot; \
    &lt;     &quot;    var length = @toLength(array.length);\n&quot; \
    &lt;     &quot;\n&quot; \
    &lt;     &quot;    if (typeof callback !== \&quot;function\&quot;)\n&quot; \
    &lt;     &quot;        @throwTypeError(\&quot;Array.prototype.some callback must be a function\&quot;);\n&quot; \
    &lt;     &quot;    \n&quot; \
    &lt;     &quot;    var thisArg = @argument(1);\n&quot; \
    &lt;     &quot;    for (var i = 0; i &lt; length; i++) {\n&quot; \
    &lt;     &quot;        if (!(i in array))\n&quot; \
    &lt;     &quot;            continue;\n&quot; \
    &lt;     &quot;        if (callback.@call(thisArg, array[i], i, array))\n&quot; \
    &lt;     &quot;            return true;\n&quot; \
    &lt;     &quot;    }\n&quot; \
    &lt;     &quot;    return false;\n&quot; \
    ---
    &gt;     &quot;\&quot;use strict\&quot;;\n&quot; \
    &gt;     &quot;var array = @toObject(this, \&quot;Array.prototype.some requires that |this| not be null or undefined\&quot;);\n&quot; \
    &gt;     &quot;var length = @toLength(array.length);\n&quot; \
    &gt;     &quot;if (typeof callback !== \&quot;function\&quot;)\n&quot; \
    &gt;     &quot; @throwTypeError(\&quot;Array.prototype.some callback must be a function\&quot;);\n&quot; \
    &gt;     &quot;var thisArg = @argument(1);\n&quot; \
    &gt;     &quot;for (var i = 0; i &lt; length; i++) {\n&quot; \
    &gt;     &quot; if (!(i in array))\n&quot; \
    &gt;     &quot;  continue;\n&quot; \
    &gt;     &quot; if (callback.@call(thisArg, array[i], i, array))\n&quot; \
    &gt;     &quot;  return true;\n&quot; \
    &gt;     &quot;}\n&quot; \
    &gt;     &quot;return false;\n&quot; \

Lets see what tests will be affected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393433</commentid>
    <comment_count>2</comment_count>
      <attachid>332350</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:25:25 -0800</bug_when>
    <thetext>Created attachment 332350
[PATCH] Proposed Fix

Lets see what the bots think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393434</commentid>
    <comment_count>3</comment_count>
      <attachid>332351</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:26:38 -0800</bug_when>
    <thetext>Created attachment 332351
[BEFORE] JSCBuiltins.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393435</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-25 21:26:54 -0800</bug_when>
    <thetext>This patch modifies the JS builtins code generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-builtins-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393436</commentid>
    <comment_count>5</comment_count>
      <attachid>332352</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:26:57 -0800</bug_when>
    <thetext>Created attachment 332352
[AFTER] JSCBuiltins.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393437</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-25 21:27:03 -0800</bug_when>
    <thetext>Attachment 332350 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_model.py:130:  expected 1 blank line, found 0  [pep8/E301] [5]
Total errors found: 1 in 2 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>1393438</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:28:23 -0800</bug_when>
    <thetext>This would also minify WebCore&apos;s many built-ins, but those are spread across many files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393439</commentid>
    <comment_count>8</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-01-25 21:29:39 -0800</bug_when>
    <thetext>Looks like you need to rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393442</commentid>
    <comment_count>9</comment_count>
      <attachid>332350</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-01-25 21:34:07 -0800</bug_when>
    <thetext>Comment on attachment 332350
[PATCH] Proposed Fix

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

r=me. I always wished we had a static UnlinkedBytecode for builtin js functions... that seems hard for non-webcore though. Also, why not just remove all extraneous whitespace? I doubt it would matter much in practice, though.

&gt; Source/JavaScriptCore/Scripts/builtins/builtins_model.py:129
&gt; -        if os.getenv(&quot;CONFIGURATION&quot;, &quot;Debug&quot;).startswith(&quot;Debug&quot;):
&gt; +        if not os.getenv(&quot;CONFIGURATION&quot;, &quot;Debug&quot;).startswith(&quot;Debug&quot;):

Awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393443</commentid>
    <comment_count>10</comment_count>
      <attachid>332353</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:34:08 -0800</bug_when>
    <thetext>Created attachment 332353
[PATCH] Proposed Fix

Rebaselined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393444</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-25 21:36:07 -0800</bug_when>
    <thetext>Attachment 332353 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/builtins/builtins_model.py:130:  expected 1 blank line, found 0  [pep8/E301] [5]
Total errors found: 1 in 2 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>1393445</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:37:04 -0800</bug_when>
    <thetext>(In reply to Keith Miller from comment #9)
&gt; Comment on attachment 332350 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332350&amp;action=review
&gt; 
&gt; r=me. I always wished we had a static UnlinkedBytecode for builtin js
&gt; functions... that seems hard for non-webcore though. Also, why not just
&gt; remove all extraneous whitespace? I doubt it would matter much in practice,
&gt; though.

I just wanted a cheap solution to eliminate a lot of whitespace. I can entirely eliminate it in Release builds.

We could run the jsmin minifier eventually, but a concern there is our jsmin not knowing about new JavaScript syntax could choke and I didn&apos;t want something like that to block JavaScriptCore developers from building.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393446</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:39:40 -0800</bug_when>
    <thetext>In fact that is what I&apos;ll do. I&apos;ll eliminate all leading whitespace if the bots seem good with it, since thats an even easier patch. I&apos;ll put it up in parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393447</commentid>
    <comment_count>14</comment_count>
      <attachid>332354</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-25 21:41:47 -0800</bug_when>
    <thetext>Created attachment 332354
[PATCH] Eliminate all leading whitespace version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393448</commentid>
    <comment_count>15</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-01-25 21:42:52 -0800</bug_when>
    <thetext>(In reply to Joseph Pecoraro from comment #12)
&gt; (In reply to Keith Miller from comment #9)
&gt; &gt; Comment on attachment 332350 [details]
&gt; &gt; [PATCH] Proposed Fix
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=332350&amp;action=review
&gt; &gt; 
&gt; &gt; r=me. I always wished we had a static UnlinkedBytecode for builtin js
&gt; &gt; functions... that seems hard for non-webcore though. Also, why not just
&gt; &gt; remove all extraneous whitespace? I doubt it would matter much in practice,
&gt; &gt; though.
&gt; 
&gt; I just wanted a cheap solution to eliminate a lot of whitespace. I can
&gt; entirely eliminate it in Release builds.
&gt; 
&gt; We could run the jsmin minifier eventually, but a concern there is our jsmin
&gt; not knowing about new JavaScript syntax could choke and I didn&apos;t want
&gt; something like that to block JavaScriptCore developers from building.

Sure, I think the conversion to unlinked bytecode would solve that but minifying seems more expedient -- and less of a PITA for the build system --.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393587</commentid>
    <comment_count>16</comment_count>
      <attachid>332354</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-26 11:32:10 -0800</bug_when>
    <thetext>Comment on attachment 332354
[PATCH] Eliminate all leading whitespace version

Clearing flags on attachment: 332354

Committed r227685: &lt;https://trac.webkit.org/changeset/227685&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393588</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-26 11:32:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393589</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-26 11:33:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/36917860&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393618</commentid>
    <comment_count>19</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-01-26 12:47:16 -0800</bug_when>
    <thetext>This caused the builtins-generator-tests to fail.

https://build.webkit.org/builders/Apple%20High%20Sierra%20Release%20WK1%20(Tests)/builds/2977

https://build.webkit.org/builders/Apple%20High%20Sierra%20Release%20WK1%20(Tests)/builds/2977/steps/builtins-generator-tests/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393643</commentid>
    <comment_count>20</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-26 13:18:06 -0800</bug_when>
    <thetext>(In reply to Matt Lewis from comment #19)
&gt; This caused the builtins-generator-tests to fail.
&gt; 
&gt; https://build.webkit.org/builders/
&gt; Apple%20High%20Sierra%20Release%20WK1%20(Tests)/builds/2977
&gt; 
&gt; https://build.webkit.org/builders/
&gt; Apple%20High%20Sierra%20Release%20WK1%20(Tests)/builds/2977/steps/builtins-
&gt; generator-tests/logs/stdio

These just need to be rebaselined now that our default behavior is to not minify (it was accidentally defaulting to minify before. I&apos;ll rebasline them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393647</commentid>
    <comment_count>21</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-01-26 13:23:59 -0800</bug_when>
    <thetext>&gt; These just need to be rebaselined now that our default behavior is to not
&gt; minify (it was accidentally defaulting to minify before. I&apos;ll rebasline them.

&lt;https://trac.webkit.org/r227693&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332350</attachid>
            <date>2018-01-25 21:25:25 -0800</date>
            <delta_ts>2018-01-25 21:34:08 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>minification-1.patch</filename>
            <type>text/plain</type>
            <size>2637</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRiM2FjMTdiMzMzLi5iMTZjMmYxMWY5NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTgtMDEtMjUgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBKYXZhU2NyaXB0Q29y
ZSBidWlsdGlucyBzaG91bGQgYmUgcGFydGlhbGx5IG1pbmlmaWVkIGluIFJlbGVhc2UgYnVpbGRz
IG5vdCBEZWJ1ZyBidWlsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MjE2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19tb2RlbC5weToKKyAgICAgICAg
KEJ1aWx0aW5GdW5jdGlvbi5mcm9tU3RyaW5nKToKKyAgICAgICAgKEJ1aWx0aW5GdW5jdGlvbi5m
cm9tU3RyaW5nLnJlZHVjZUxlYWRpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgQXBwbHkgbWluaWZp
Y2F0aW9ucyBvbiBSZWxlYXNlIGJ1aWxkcyBpbnN0ZWFkIG9mIERlYnVnIGJ1aWxkcy4KKyAgICAg
ICAgQWxzbyByZWR1Y2UgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gNCBzcGFjZXMgdG8gMSBzcGFj
ZS4KKwogMjAxOC0wMS0yNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNpbXBsaWZ5IHVwZGF0ZS1MZWdhY3lJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMucmIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3Jp
cHRzL2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkKaW5kZXggMDIzNDBiNzUwYmUuLjhkMTg4
NTEyOGY5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlu
cy9idWlsdGluc19tb2RlbC5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9i
dWlsdGlucy9idWlsdGluc19tb2RlbC5weQpAQCAtNTcsNiArNTcsNyBAQCBrZXlWYWx1ZUFubm90
YXRpb25Db21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIl5cL1wvIEAoXHcrKT0oW149XSs/KVxu
IiwgcmUuTVVMVAogZmxhZ0Fubm90YXRpb25Db21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIl5c
L1wvIEAoXHcrKVtePV0qP1xuIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQogbGluZVdpdGhP
bmx5U2luZ2xlTGluZUNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIiXlxzKlwvXC9cbiIsIHJl
Lk1VTFRJTElORSB8IHJlLkRPVEFMTCkKIGxpbmVXaXRoVHJhaWxpbmdTaW5nbGVMaW5lQ29tbWVu
dFJlZ0V4cCA9IHJlLmNvbXBpbGUociJccypcL1wvXG4iLCByZS5NVUxUSUxJTkUgfCByZS5ET1RB
TEwpCitsZWFkaW5nSW5kZW50V2hpdGVzcGFjZVJlZ0V4cCA9IHJlLmNvbXBpbGUociJeICsiLCBy
ZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCiBtdWx0aXBsZUVtcHR5TGluZXNSZWdFeHAgPSByZS5j
b21waWxlKHIiXG57Mix9IiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQogCiBjbGFzcyBQYXJz
ZUV4Y2VwdGlvbihFeGNlcHRpb24pOgpAQCAtMTI1LDkgKzEyNiwxMyBAQCBjbGFzcyBCdWlsdGlu
RnVuY3Rpb246CiAgICAgICAgICAgICBvdmVycmlkZGVuX25hbWUgPSBvdmVycmlkZGVuTmFtZU1h
dGNoLmdyb3VwKDEpCiAgICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2UgPSBmdW5jdGlvbk92ZXJy
aWRkZW5OYW1lUmVnRXhwLnN1YigiIiwgZnVuY3Rpb25fc291cmNlKQogCi0gICAgICAgIGlmIG9z
LmdldGVudigiQ09ORklHVVJBVElPTiIsICJEZWJ1ZyIpLnN0YXJ0c3dpdGgoIkRlYnVnIik6Cisg
ICAgICAgIGlmIG5vdCBvcy5nZXRlbnYoIkNPTkZJR1VSQVRJT04iLCAiRGVidWciKS5zdGFydHN3
aXRoKCJEZWJ1ZyIpOgorICAgICAgICAgICAgZGVmIHJlZHVjZUxlYWRpbmdXaGl0ZXNwYWNlKG1h
dGNoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiAiICogKChsZW4obWF0Y2guZ3JvdXAoMCkp
IC8gNCkgLSAxKQorCiAgICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2UgPSBsaW5lV2l0aE9ubHlT
aW5nbGVMaW5lQ29tbWVudFJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3NvdXJjZSkKICAgICAgICAg
ICAgIGZ1bmN0aW9uX3NvdXJjZSA9IGxpbmVXaXRoVHJhaWxpbmdTaW5nbGVMaW5lQ29tbWVudFJl
Z0V4cC5zdWIoIlxuIiwgZnVuY3Rpb25fc291cmNlKQorICAgICAgICAgICAgZnVuY3Rpb25fc291
cmNlID0gcmUuc3ViKGxlYWRpbmdJbmRlbnRXaGl0ZXNwYWNlUmVnRXhwLCByZWR1Y2VMZWFkaW5n
V2hpdGVzcGFjZSwgZnVuY3Rpb25fc291cmNlKQogICAgICAgICAgICAgZnVuY3Rpb25fc291cmNl
ID0gbXVsdGlwbGVFbXB0eUxpbmVzUmVnRXhwLnN1YigiXG4iLCBmdW5jdGlvbl9zb3VyY2UpCiAK
ICAgICAgICAgZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uTmFtZVJlZ0V4cC5maW5kYWxsKGZ1bmN0
aW9uX3NvdXJjZSlbMF0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>332351</attachid>
            <date>2018-01-25 21:26:38 -0800</date>
            <delta_ts>2018-01-25 21:26:38 -0800</delta_ts>
            <desc>[BEFORE] JSCBuiltins.cpp</desc>
            <filename>BEFORE-JSCBuiltins.cpp</filename>
            <type>text/x-csrc</type>
            <size>221234</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICogQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE3IC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICogQ29weXJpZ2h0IChjKSAyMDE1IEFuZHkgVmFuV2Fnb25l
ciA8dGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tPi4KICogQ29weXJpZ2h0IChjKSAyMDE1IEpvcmRh
biBIYXJiYW5kLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBDb3B5cmlnaHQgKGMpIDIwMTUsIDIw
MTYgLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBDb3B5cmlnaHQgKGMp
IDIwMTUsIDIwMTYgLTIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4K
ICogQ29weXJpZ2h0IChjKSAyMDE1LCAyMDE2LCAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCiAqIENvcHlyaWdodCAoYykgMjAxNiBDYWl0bGluIFBvdHRlciA8Y2Fp
dHBAaWdhbGlhLmNvbT4uCiAqIENvcHlyaWdodCAoYykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CiAqIENvcHlyaWdodCAoYykgMjAxNiwgMjAxNyAtMjAxNyBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogKiBDb3B5cmlnaHQgKGMpIDIwMTYs
IDIwMTcgT2xla3NhbmRyIFNrYWNoa292IDxnc2thY2hrb3ZAZ21haWwuY29tPi4KICogQ29weXJp
Z2h0IChjKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+LgogKiAKICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogCiAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCiAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CiAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCiAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCiAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKiAKICovCgovLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBm
aWxlcyBmb3IKLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKCiNpbmNsdWRlICJjb25maWcuaCIKI2lu
Y2x1ZGUgIkpTQ0J1aWx0aW5zLmgiCgojaW5jbHVkZSAiQnVpbHRpbkV4ZWN1dGFibGVzLmgiCiNp
bmNsdWRlICJIZWFwSW5saW5lcy5oIgojaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKI2lu
Y2x1ZGUgIkludHJpbnNpYy5oIgojaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgojaW5jbHVkZSAi
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCIKI2luY2x1ZGUgIlZNLmgiCgpuYW1lc3BhY2Ug
SlNDIHsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5Q29uc3RydWN0b3JPZkNv
ZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3Q7CmNvbnN0IGludCBzX2FycmF5Q29uc3RydWN0b3JPZkNvZGVMZW5ndGggPSAyODg7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5Q29uc3RydWN0b3JPZkNvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5Q29uc3RydWN0b3JPZkNvZGUg
PQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmlj
dFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5n
dGg7XG4iIFwKICAgICIgICAgdmFyIGFycmF5ID0gQGlzQ29uc3RydWN0b3IodGhpcykgPyBuZXcg
dGhpcyhsZW5ndGgpIDogQG5ld0FycmF5V2l0aFNpemUobGVuZ3RoKTtcbiIgXAogICAgIiAgICBm
b3IgKHZhciBrID0gMDsgayA8IGxlbmd0aDsgKytrKVxuIiBcCiAgICAiICAgICAgICBAcHV0QnlW
YWxEaXJlY3QoYXJyYXksIGssIGFyZ3VtZW50c1trXSk7XG4iIFwKICAgICIgICAgYXJyYXkubGVu
Z3RoID0gbGVuZ3RoO1xuIiBcCiAgICAiICAgIHJldHVybiBhcnJheTtcbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlDb25zdHJ1Y3RvckZyb21D
b2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3Ry
dWN0Owpjb25zdCBpbnQgc19hcnJheUNvbnN0cnVjdG9yRnJvbUNvZGVMZW5ndGggPSAxODQ1Owpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheUNvbnN0cnVjdG9yRnJvbUNvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5Q29uc3RydWN0b3JG
cm9tQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChpdGVtcyApXG4iIFwKICAgICJ7XG4iIFwKICAgICIg
ICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgdGhpc09iaiA9
IHRoaXM7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgbWFwRm4gPSBAYXJndW1lbnQoMSk7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgdGhpc0FyZztcbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIGlmIChtYXBGbiAhPT0gQHVuZGVmaW5lZCkge1xuIiBcCiAgICAiICAgICAgICBpZiAo
dHlwZW9mIG1hcEZuICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgICAgICAgICAgICBAdGhy
b3dUeXBlRXJyb3IoXCJBcnJheS5mcm9tIHJlcXVpcmVzIHRoYXQgdGhlIHNlY29uZCBhcmd1bWVu
dCwgd2hlbiBwcm92aWRlZCwgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgICAgICB0aGlzQXJnID0gQGFyZ3VtZW50KDIpO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAg
IlxuIiBcCiAgICAiICAgIHZhciBhcnJheUxpa2UgPSBAdG9PYmplY3QoaXRlbXMsIFwiQXJyYXku
ZnJvbSByZXF1aXJlcyBhbiBhcnJheS1saWtlIG9iamVjdCAtIG5vdCBudWxsIG9yIHVuZGVmaW5l
ZFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZW1z
LkBpdGVyYXRvclN5bWJvbDtcbiIgXAogICAgIiAgICBpZiAoaXRlcmF0b3JNZXRob2QgIT0gbnVs
bCkge1xuIiBcCiAgICAiICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yTWV0aG9kICE9PSBcImZ1
bmN0aW9uXCIpXG4iIFwKICAgICIgICAgICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJBcnJheS5m
cm9tIHJlcXVpcmVzIHRoYXQgdGhlIHByb3BlcnR5IG9mIHRoZSBmaXJzdCBhcmd1bWVudCwgaXRl
bXNbU3ltYm9sLml0ZXJhdG9yXSwgd2hlbiBleGlzdHMsIGJlIGEgZnVuY3Rpb25cIik7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICAgICAgdmFyIHJlc3VsdCA9IEBpc0NvbnN0cnVjdG9yKHRoaXNP
YmopID8gbmV3IHRoaXNPYmooKSA6IFtdO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIHZh
ciBrID0gMDtcbiIgXAogICAgIiAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JNZXRob2Qu
QGNhbGwoaXRlbXMpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIg
ICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIHZhciB3cmFw
cGVyID0ge31cbiIgXAogICAgIiAgICAgICAgd3JhcHBlci5AaXRlcmF0b3JTeW1ib2wgPSBmdW5j
dGlvbigpIHsgcmV0dXJuIGl0ZXJhdG9yOyB9O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAg
IGZvciAodmFyIHZhbHVlIG9mIHdyYXBwZXIpIHtcbiIgXAogICAgIiAgICAgICAgICAgIGlmICht
YXBGbilcbiIgXAogICAgIiAgICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBr
LCB0aGlzQXJnID09PSBAdW5kZWZpbmVkID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwo
dGhpc0FyZywgdmFsdWUsIGspKTtcbiIgXAogICAgIiAgICAgICAgICAgIGVsc2VcbiIgXAogICAg
IiAgICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBrLCB2YWx1ZSk7XG4iIFwK
ICAgICIgICAgICAgICAgICBrICs9IDE7XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIlxu
IiBcCiAgICAiICAgICAgICByZXN1bHQubGVuZ3RoID0gaztcbiIgXAogICAgIiAgICAgICAgcmV0
dXJuIHJlc3VsdDtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIg
YXJyYXlMaWtlTGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5TGlrZS5sZW5ndGgpO1xuIiBcCiAgICAi
XG4iIFwKICAgICIgICAgdmFyIHJlc3VsdCA9IEBpc0NvbnN0cnVjdG9yKHRoaXNPYmopID8gbmV3
IHRoaXNPYmooYXJyYXlMaWtlTGVuZ3RoKSA6IEBuZXdBcnJheVdpdGhTaXplKGFycmF5TGlrZUxl
bmd0aCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgayA9IDA7XG4iIFwKICAgICIgICAg
d2hpbGUgKGsgPCBhcnJheUxpa2VMZW5ndGgpIHtcbiIgXAogICAgIiAgICAgICAgdmFyIHZhbHVl
ID0gYXJyYXlMaWtlW2tdO1xuIiBcCiAgICAiICAgICAgICBpZiAobWFwRm4pXG4iIFwKICAgICIg
ICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBrLCB0aGlzQXJnID09PSBAdW5kZWZp
bmVkID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFsdWUsIGspKTtc
biIgXAogICAgIiAgICAgICAgZWxzZVxuIiBcCiAgICAiICAgICAgICAgICAgQHB1dEJ5VmFsRGly
ZWN0KHJlc3VsdCwgaywgdmFsdWUpO1xuIiBcCiAgICAiICAgICAgICBrICs9IDE7XG4iIFwKICAg
ICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmVzdWx0Lmxlbmd0aCA9IGFycmF5TGlr
ZUxlbmd0aDtcbiIgXAogICAgIiAgICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAifSlcbiIgXAo7
Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJheUNvbnN0cnVjdG9ySXNBcnJheUNv
ZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3Q7CmNvbnN0IGludCBzX2FycmF5Q29uc3RydWN0b3JJc0FycmF5Q29kZUxlbmd0aCA9IDIwMjsK
c3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlDb25zdHJ1Y3RvcklzQXJyYXlDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hcnJheUNvbnN0cnVj
dG9ySXNBcnJheUNvZGUgPQogICAgIihmdW5jdGlvbiAoYXJyYXkpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoQGlz
SlNBcnJheShhcnJheSkgfHwgQGlzRGVyaXZlZEFycmF5KGFycmF5KSlcbiIgXAogICAgIiAgICAg
ICAgcmV0dXJuIHRydWU7XG4iIFwKICAgICIgICAgaWYgKCFAaXNQcm94eU9iamVjdChhcnJheSkp
XG4iIFwKICAgICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIgXAogICAgIiAgICByZXR1cm4gQGlz
QXJyYXlTbG93KGFycmF5KTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5IHNfYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlQ29uc3RydWN0QWJpbGl0
eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19h
cnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVMZW5ndGggPSAzNzI7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0Q29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlJdGVyYXRvclByb3RvdHlwZU5l
eHRDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVz
ZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmICh0aGlzID09IG51bGwpXG4i
IFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBl
JS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtc
biIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCBuZXh0ID0gdGhpcy5AYXJyYXlJdGVyYXRvck5l
eHQ7XG4iIFwKICAgICIgICAgaWYgKG5leHQgPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAg
ICAgIEB0aHJvd1R5cGVFcnJvcihcIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVp
cmVzIHRoYXQgfHRoaXN8IGJlIGFuIEFycmF5IEl0ZXJhdG9yIGluc3RhbmNlXCIpO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgcmV0dXJuIG5leHQuQGNhbGwodGhpcyk7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5SXRlcmF0b3JQcm90b3R5
cGVBcnJheUl0ZXJhdG9yVmFsdWVOZXh0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJyYXlJdGVyYXRvclBy
b3RvdHlwZUFycmF5SXRlcmF0b3JWYWx1ZU5leHRDb2RlTGVuZ3RoID0gNDkzOwpzdGF0aWMgY29u
c3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheUl0ZXJhdG9yUHJvdG90eXBlQXJyYXlJdGVyYXRvclZh
bHVlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2Fy
cmF5SXRlcmF0b3JQcm90b3R5cGVBcnJheUl0ZXJhdG9yVmFsdWVOZXh0Q29kZSA9CiAgICAiKGZ1
bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICIgICAgdmFyIGRvbmUgPSB0cnVlO1xuIiBcCiAgICAiICAgIHZhciB2YWx1ZTtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIHZhciBhcnJheSA9IHRoaXMuQGl0ZXJhdGVkT2JqZWN0O1xuIiBc
CiAgICAiICAgIGlmICghdGhpcy5AYXJyYXlJdGVyYXRvcklzRG9uZSkge1xuIiBcCiAgICAiICAg
ICAgICB2YXIgaW5kZXggPSB0aGlzLkBhcnJheUl0ZXJhdG9yTmV4dEluZGV4O1xuIiBcCiAgICAi
ICAgICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoID4+PiAwO1xuIiBcCiAgICAiICAgICAg
ICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4iIFwKICAgICIgICAgICAgICAgICB0aGlzLkBhcnJh
eUl0ZXJhdG9ySXNEb25lID0gdHJ1ZTtcbiIgXAogICAgIiAgICAgICAgfSBlbHNlIHtcbiIgXAog
ICAgIiAgICAgICAgICAgIHRoaXMuQGFycmF5SXRlcmF0b3JOZXh0SW5kZXggPSBpbmRleCArIDE7
XG4iIFwKICAgICIgICAgICAgICAgICBkb25lID0gZmFsc2U7XG4iIFwKICAgICIgICAgICAgICAg
ICB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiICAg
IH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiB7IGRvbmUsIHZhbHVlIH07XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5SXRlcmF0
b3JQcm90b3R5cGVBcnJheUl0ZXJhdG9yS2V5TmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlND
OjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5SXRl
cmF0b3JQcm90b3R5cGVBcnJheUl0ZXJhdG9yS2V5TmV4dENvZGVMZW5ndGggPSA0ODY7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5SXRlcmF0b3JQcm90b3R5cGVBcnJheUl0ZXJh
dG9yS2V5TmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBz
X2FycmF5SXRlcmF0b3JQcm90b3R5cGVBcnJheUl0ZXJhdG9yS2V5TmV4dENvZGUgPQogICAgIihm
dW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBc
CiAgICAiICAgIHZhciBkb25lID0gdHJ1ZTtcbiIgXAogICAgIiAgICB2YXIgdmFsdWU7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICB2YXIgYXJyYXkgPSB0aGlzLkBpdGVyYXRlZE9iamVjdDtcbiIg
XAogICAgIiAgICBpZiAoIXRoaXMuQGFycmF5SXRlcmF0b3JJc0RvbmUpIHtcbiIgXAogICAgIiAg
ICAgICAgdmFyIGluZGV4ID0gdGhpcy5AYXJyYXlJdGVyYXRvck5leHRJbmRleDtcbiIgXAogICAg
IiAgICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA+Pj4gMDtcbiIgXAogICAgIiAgICAg
ICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuIiBcCiAgICAiICAgICAgICAgICAgdGhpcy5AYXJy
YXlJdGVyYXRvcklzRG9uZSA9IHRydWU7XG4iIFwKICAgICIgICAgICAgIH0gZWxzZSB7XG4iIFwK
ICAgICIgICAgICAgICAgICB0aGlzLkBhcnJheUl0ZXJhdG9yTmV4dEluZGV4ID0gaW5kZXggKyAx
O1xuIiBcCiAgICAiICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuIiBcCiAgICAiICAgICAgICAg
ICAgdmFsdWUgPSBpbmRleDtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiICAgIH1cbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiB7IGRvbmUsIHZhbHVlIH07XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5SXRlcmF0b3JQcm90
b3R5cGVBcnJheUl0ZXJhdG9yS2V5VmFsdWVOZXh0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6
OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJyYXlJdGVy
YXRvclByb3RvdHlwZUFycmF5SXRlcmF0b3JLZXlWYWx1ZU5leHRDb2RlTGVuZ3RoID0gNTA0Owpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheUl0ZXJhdG9yUHJvdG90eXBlQXJyYXlJ
dGVyYXRvcktleVZhbHVlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX2FycmF5SXRlcmF0b3JQcm90b3R5cGVBcnJheUl0ZXJhdG9yS2V5VmFsdWVOZXh0
Q29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICIgICAgdmFyIGRvbmUgPSB0cnVlO1xuIiBcCiAgICAiICAgIHZh
ciB2YWx1ZTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBhcnJheSA9IHRoaXMuQGl0ZXJh
dGVkT2JqZWN0O1xuIiBcCiAgICAiICAgIGlmICghdGhpcy5AYXJyYXlJdGVyYXRvcklzRG9uZSkg
e1xuIiBcCiAgICAiICAgICAgICB2YXIgaW5kZXggPSB0aGlzLkBhcnJheUl0ZXJhdG9yTmV4dElu
ZGV4O1xuIiBcCiAgICAiICAgICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoID4+PiAwO1xu
IiBcCiAgICAiICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4iIFwKICAgICIgICAgICAg
ICAgICB0aGlzLkBhcnJheUl0ZXJhdG9ySXNEb25lID0gdHJ1ZTtcbiIgXAogICAgIiAgICAgICAg
fSBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgICAgIHRoaXMuQGFycmF5SXRlcmF0b3JOZXh0SW5k
ZXggPSBpbmRleCArIDE7XG4iIFwKICAgICIgICAgICAgICAgICBkb25lID0gZmFsc2U7XG4iIFwK
ICAgICIgICAgICAgICAgICB2YWx1ZSA9IFsgaW5kZXgsIGFycmF5W2luZGV4XSBdO1xuIiBcCiAg
ICAiICAgICAgICB9XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0
dXJuIHsgZG9uZSwgdmFsdWUgfTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5IHNfYXJyYXlQcm90b3R5cGVDcmVhdGVBcnJheUl0ZXJhdG9yQ29uc3RydWN0
b3JDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2FuQ29uc3Ry
dWN0Owpjb25zdCBpbnQgc19hcnJheVByb3RvdHlwZUNyZWF0ZUFycmF5SXRlcmF0b3JDb25zdHJ1
Y3RvckNvZGVMZW5ndGggPSAyODE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5
UHJvdG90eXBlQ3JlYXRlQXJyYXlJdGVyYXRvckNvbnN0cnVjdG9yQ29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQcm90b3R5cGVDcmVhdGVBcnJheUl0
ZXJhdG9yQ29uc3RydWN0b3JDb2RlID0KICAgICIoZnVuY3Rpb24gKGl0ZXJhdGVkT2JqZWN0LCBr
aW5kLCBpdGVyYXRpb25GdW5jdGlvbilcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBz
dHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHRoaXMuQGl0ZXJhdGVkT2JqZWN0ID0g
aXRlcmF0ZWRPYmplY3Q7XG4iIFwKICAgICIgICAgdGhpcy5AYXJyYXlJdGVyYXRvcktpbmQgPSBr
aW5kO1xuIiBcCiAgICAiICAgIHRoaXMuQGFycmF5SXRlcmF0b3JOZXh0SW5kZXggPSAwO1xuIiBc
CiAgICAiICAgIHRoaXMuQGFycmF5SXRlcmF0b3JOZXh0ID0gaXRlcmF0aW9uRnVuY3Rpb247XG4i
IFwKICAgICIgICAgdGhpcy5AYXJyYXlJdGVyYXRvcklzRG9uZSA9IGZhbHNlO1xuIiBcCiAgICAi
fSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJheVByb3RvdHlwZVZh
bHVlc0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RD
b25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBlVmFsdWVzQ29kZUxlbmd0aCA9IDE5
NzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVWYWx1ZXNDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hcnJheVByb3RvdHlw
ZVZhbHVlc0NvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAg
IFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIG5ldyBAY3Jl
YXRlQXJyYXlJdGVyYXRvcihAdG9PYmplY3QodGhpcywgXCJBcnJheS5wcm90b3R5cGUudmFsdWVz
IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKSwgXCJ2YWx1
ZVwiLCBAYXJyYXlJdGVyYXRvclZhbHVlTmV4dCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0
IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlS2V5c0NvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX2FycmF5UHJvdG90eXBlS2V5c0NvZGVMZW5ndGggPSAxOTE7CnN0YXRpYyBjb25zdCBKU0M6
OkludHJpbnNpYyBzX2FycmF5UHJvdG90eXBlS2V5c0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50
cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90eXBlS2V5c0NvZGUgPQogICAgIihmdW5j
dGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgcmV0dXJuIG5ldyBAY3JlYXRlQXJyYXlJdGVyYXRvcihAdG9PYmpl
Y3QodGhpcywgXCJBcnJheS5wcm90b3R5cGUua2V5cyByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3Qg
YmUgbnVsbCBvciB1bmRlZmluZWRcIiksIFwia2V5XCIsIEBhcnJheUl0ZXJhdG9yS2V5TmV4dCk7
XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5
UHJvdG90eXBlRW50cmllc0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBlRW50cmllc0Nv
ZGVMZW5ndGggPSAyMDU7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5UHJvdG90
eXBlRW50cmllc0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBz
X2FycmF5UHJvdG90eXBlRW50cmllc0NvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAg
cmV0dXJuIG5ldyBAY3JlYXRlQXJyYXlJdGVyYXRvcihAdG9PYmplY3QodGhpcywgXCJBcnJheS5w
cm90b3R5cGUuZW50cmllcyByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRl
ZmluZWRcIiksIFwia2V5K3ZhbHVlXCIsIEBhcnJheUl0ZXJhdG9yS2V5VmFsdWVOZXh0KTtcbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlQcm90
b3R5cGVSZWR1Y2VDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJheVByb3RvdHlwZVJlZHVjZUNvZGVMZW5n
dGggPSA5NjI7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5UHJvdG90eXBlUmVk
dWNlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQ
cm90b3R5cGVSZWR1Y2VDb2RlID0KICAgICIoZnVuY3Rpb24gKGNhbGxiYWNrIClcbiIgXAogICAg
IntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
IHZhciBhcnJheSA9IEB0b09iamVjdCh0aGlzLCBcIkFycmF5LnByb3RvdHlwZS5yZWR1Y2UgcmVx
dWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkXCIpO1xuIiBcCiAgICAi
ICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAg
IiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiQXJyYXkucHJvdG90eXBlLnJlZHVjZSBjYWxsYmFj
ayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgYXJn
dW1lbnRDb3VudCA9IEBhcmd1bWVudENvdW50KCk7XG4iIFwKICAgICIgICAgaWYgKGxlbmd0aCA9
PT0gMCAmJiBhcmd1bWVudENvdW50IDwgMilcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVy
cm9yKFwicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKTtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIHZhciBhY2N1bXVsYXRvciwgayA9IDA7XG4iIFwKICAgICIg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxKVxuIiBcCiAgICAiICAgICAgICBhY2N1bXVsYXRvciA9
IEBhcmd1bWVudCgxKTtcbiIgXAogICAgIiAgICBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgd2hp
bGUgKGsgPCBsZW5ndGggJiYgIShrIGluIGFycmF5KSlcbiIgXAogICAgIiAgICAgICAgICAgIGsg
Kz0gMTtcbiIgXAogICAgIiAgICAgICAgaWYgKGsgPj0gbGVuZ3RoKVxuIiBcCiAgICAiICAgICAg
ICAgICAgQHRocm93VHlwZUVycm9yKFwicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5p
dGlhbCB2YWx1ZVwiKTtcbiIgXAogICAgIiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVtrKytd
O1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHdoaWxlIChrIDwgbGVu
Z3RoKSB7XG4iIFwKICAgICIgICAgICAgIGlmIChrIGluIGFycmF5KVxuIiBcCiAgICAiICAgICAg
ICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjay5AY2FsbChAdW5kZWZpbmVkLCBhY2N1bXVsYXRv
ciwgYXJyYXlba10sIGssIGFycmF5KTtcbiIgXAogICAgIiAgICAgICAgayArPSAxO1xuIiBcCiAg
ICAiICAgIH1cbiIgXAogICAgIiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlUmVkdWNl
UmlnaHRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJheVByb3RvdHlwZVJlZHVjZVJpZ2h0Q29kZUxlbmd0
aCA9IDk3NzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVSZWR1
Y2VSaWdodENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2Fy
cmF5UHJvdG90eXBlUmVkdWNlUmlnaHRDb2RlID0KICAgICIoZnVuY3Rpb24gKGNhbGxiYWNrIClc
biIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIHZhciBhcnJheSA9IEB0b09iamVjdCh0aGlzLCBcIkFycmF5LnByb3RvdHlwZS5y
ZWR1Y2VSaWdodCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRc
Iik7XG4iIFwKICAgICIgICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5sZW5ndGgpO1xu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlv
blwiKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUu
cmVkdWNlUmlnaHQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgdmFyIGFyZ3VtZW50Q291bnQgPSBAYXJndW1lbnRDb3VudCgpO1xuIiBcCiAg
ICAiICAgIGlmIChsZW5ndGggPT09IDAgJiYgYXJndW1lbnRDb3VudCA8IDIpXG4iIFwKICAgICIg
ICAgICAgIEB0aHJvd1R5cGVFcnJvcihcInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGgg
bm8gaW5pdGlhbCB2YWx1ZVwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBhY2N1bXVs
YXRvciwgayA9IGxlbmd0aCAtIDE7XG4iIFwKICAgICIgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAx
KVxuIiBcCiAgICAiICAgICAgICBhY2N1bXVsYXRvciA9IEBhcmd1bWVudCgxKTtcbiIgXAogICAg
IiAgICBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgd2hpbGUgKGsgPj0gMCAmJiAhKGsgaW4gYXJy
YXkpKVxuIiBcCiAgICAiICAgICAgICAgICAgayAtPSAxO1xuIiBcCiAgICAiICAgICAgICBpZiAo
ayA8IDApXG4iIFwKICAgICIgICAgICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJyZWR1Y2VSaWdo
dCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWVcIik7XG4iIFwKICAgICIgICAg
ICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbay0tXTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJc
biIgXAogICAgIiAgICB3aGlsZSAoayA+PSAwKSB7XG4iIFwKICAgICIgICAgICAgIGlmIChrIGlu
IGFycmF5KVxuIiBcCiAgICAiICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjay5AY2Fs
bChAdW5kZWZpbmVkLCBhY2N1bXVsYXRvciwgYXJyYXlba10sIGssIGFycmF5KTtcbiIgXAogICAg
IiAgICAgICAgayAtPSAxO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIiAgICByZXR1cm4gYWNj
dW11bGF0b3I7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX2FycmF5UHJvdG90eXBlRXZlcnlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJheVByb3RvdHlwZUV2
ZXJ5Q29kZUxlbmd0aCA9IDU1MzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQ
cm90b3R5cGVFdmVyeUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX2FycmF5UHJvdG90eXBlRXZlcnlDb2RlID0KICAgICIoZnVuY3Rpb24gKGNhbGxiYWNrIClc
biIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIHZhciBhcnJheSA9IEB0b09iamVjdCh0aGlzLCBcIkFycmF5LnByb3RvdHlwZS5l
dmVyeSByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4i
IFwKICAgICIgICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5sZW5ndGgpO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxu
IiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUuZXZlcnkg
Y2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiICAgIFxuIiBcCiAgICAi
ICAgIHZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiICAgIFxuIiBcCiAgICAi
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiIgXAogICAgIiAgICAgICAg
aWYgKCEoaSBpbiBhcnJheSkpXG4iIFwKICAgICIgICAgICAgICAgICBjb250aW51ZTtcbiIgXAog
ICAgIiAgICAgICAgaWYgKCFjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBhcnJheVtpXSwgaSwgYXJy
YXkpKVxuIiBcCiAgICAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiBcCiAgICAiICAgIH1c
biIgXAogICAgIiAgICBcbiIgXAogICAgIiAgICByZXR1cm4gdHJ1ZTtcbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlQcm90b3R5cGVGb3JFYWNo
Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdDsKY29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVGb3JFYWNoQ29kZUxlbmd0aCA9IDQ4MzsK
c3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVGb3JFYWNoQ29kZUlu
dHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQcm90b3R5cGVG
b3JFYWNoQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgYXJy
YXkgPSBAdG9PYmplY3QodGhpcywgXCJBcnJheS5wcm90b3R5cGUuZm9yRWFjaCByZXF1aXJlcyB0
aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICIgICAgdmFy
IGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5sZW5ndGgpO1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAg
ICBAdGhyb3dUeXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUuZm9yRWFjaCBjYWxsYmFjayBtdXN0
IGJlIGEgZnVuY3Rpb25cIik7XG4iIFwKICAgICIgICAgXG4iIFwKICAgICIgICAgdmFyIHRoaXNB
cmcgPSBAYXJndW1lbnQoMSk7XG4iIFwKICAgICIgICAgXG4iIFwKICAgICIgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuIiBcCiAgICAiICAgICAgICBpZiAoaSBpbiBhcnJh
eSlcbiIgXAogICAgIiAgICAgICAgICAgIGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ld
LCBpLCBhcnJheSk7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJheVByb3RvdHlwZUZpbHRlckNvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX2FycmF5UHJvdG90eXBlRmlsdGVyQ29kZUxlbmd0aCA9IDEyNTk7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX2FycmF5UHJvdG90eXBlRmlsdGVyQ29kZUludHJpbnNpYyA9IEpTQzo6
Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQcm90b3R5cGVGaWx0ZXJDb2RlID0KICAg
ICIoZnVuY3Rpb24gKGNhbGxiYWNrIClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBz
dHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBhcnJheSA9IEB0b09iamVjdCh0
aGlzLCBcIkFycmF5LnByb3RvdHlwZS5maWx0ZXIgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJl
IG51bGwgb3IgdW5kZWZpbmVkXCIpO1xuIiBcCiAgICAiICAgIHZhciBsZW5ndGggPSBAdG9MZW5n
dGgoYXJyYXkubGVuZ3RoKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmICh0eXBlb2YgY2Fs
bGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9y
KFwiQXJyYXkucHJvdG90eXBlLmZpbHRlciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7
XG4iIFwKICAgICIgICAgXG4iIFwKICAgICIgICAgdmFyIHRoaXNBcmcgPSBAYXJndW1lbnQoMSk7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIHZhciByZXN1bHQ7XG4i
IFwKICAgICIgICAgdmFyIGNvbnN0cnVjdG9yO1xuIiBcCiAgICAiICAgIGlmIChAaXNBcnJheShh
cnJheSkpIHtcbiIgXAogICAgIiAgICAgICAgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3Rv
cjtcbiIgXAogICAgIiAgICAgICAgLy9cbiIgXAogICAgIiAgICAgICAgLy9cbiIgXAogICAgIiAg
ICAgICAgLy9cbiIgXAogICAgIiAgICAgICAgaWYgKEBpc0FycmF5Q29uc3RydWN0b3IoY29uc3Ry
dWN0b3IpICYmIEBBcnJheSAhPT0gY29uc3RydWN0b3IpXG4iIFwKICAgICIgICAgICAgICAgICBj
b25zdHJ1Y3RvciA9IEB1bmRlZmluZWQ7XG4iIFwKICAgICIgICAgICAgIGlmIChAaXNPYmplY3Qo
Y29uc3RydWN0b3IpKSB7XG4iIFwKICAgICIgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0
cnVjdG9yLkBzcGVjaWVzU3ltYm9sO1xuIiBcCiAgICAiICAgICAgICAgICAgaWYgKGNvbnN0cnVj
dG9yID09PSBudWxsKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gQHVu
ZGVmaW5lZDtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIiAg
ICBpZiAoY29uc3RydWN0b3IgPT09IEBBcnJheSB8fCBjb25zdHJ1Y3RvciA9PT0gQHVuZGVmaW5l
ZClcbiIgXAogICAgIiAgICAgICAgcmVzdWx0ID0gQG5ld0FycmF5V2l0aFNpemUoMCk7XG4iIFwK
ICAgICIgICAgZWxzZVxuIiBcCiAgICAiICAgICAgICByZXN1bHQgPSBuZXcgY29uc3RydWN0b3Io
MCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgbmV4dEluZGV4ID0gMDtcbiIgXAogICAg
IiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4iIFwKICAgICIgICAgICAg
IGlmICghKGkgaW4gYXJyYXkpKVxuIiBcCiAgICAiICAgICAgICAgICAgY29udGludWU7XG4iIFwK
ICAgICIgICAgICAgIHZhciBjdXJyZW50ID0gYXJyYXlbaV1cbiIgXAogICAgIiAgICAgICAgaWYg
KGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGN1cnJlbnQsIGksIGFycmF5KSkge1xuIiBcCiAgICAi
ICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwgbmV4dEluZGV4LCBjdXJyZW50KTtc
biIgXAogICAgIiAgICAgICAgICAgICsrbmV4dEluZGV4O1xuIiBcCiAgICAiICAgICAgICB9XG4i
IFwKICAgICIgICAgfVxuIiBcCiAgICAiICAgIHJldHVybiByZXN1bHQ7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlTWFwQ29k
ZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dDsKY29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVNYXBDb2RlTGVuZ3RoID0gMTE3OTsKc3RhdGlj
IGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVNYXBDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hcnJheVByb3RvdHlwZU1hcENvZGUgPQog
ICAgIihmdW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNl
IHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGFycmF5ID0gQHRvT2JqZWN0
KHRoaXMsIFwiQXJyYXkucHJvdG90eXBlLm1hcCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUg
bnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICIgICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0
aChhcnJheS5sZW5ndGgpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHR5cGVvZiBjYWxs
YmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3Io
XCJBcnJheS5wcm90b3R5cGUubWFwIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIg
XAogICAgIiAgICBcbiIgXAogICAgIiAgICB2YXIgdGhpc0FyZyA9IEBhcmd1bWVudCgxKTtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgdmFyIHJlc3VsdDtcbiIgXAog
ICAgIiAgICB2YXIgY29uc3RydWN0b3I7XG4iIFwKICAgICIgICAgaWYgKEBpc0FycmF5KGFycmF5
KSkge1xuIiBcCiAgICAiICAgICAgICBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yO1xu
IiBcCiAgICAiICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAvL1xuIiBcCiAgICAiICAgICAg
ICAvL1xuIiBcCiAgICAiICAgICAgICBpZiAoQGlzQXJyYXlDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rv
cikgJiYgQEFycmF5ICE9PSBjb25zdHJ1Y3RvcilcbiIgXAogICAgIiAgICAgICAgICAgIGNvbnN0
cnVjdG9yID0gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAgICAgICAgaWYgKEBpc09iamVjdChjb25z
dHJ1Y3RvcikpIHtcbiIgXAogICAgIiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0
b3IuQHNwZWNpZXNTeW1ib2w7XG4iIFwKICAgICIgICAgICAgICAgICBpZiAoY29uc3RydWN0b3Ig
PT09IG51bGwpXG4iIFwKICAgICIgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBAdW5kZWZp
bmVkO1xuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiICAgIGlm
IChjb25zdHJ1Y3RvciA9PT0gQEFycmF5IHx8IGNvbnN0cnVjdG9yID09PSBAdW5kZWZpbmVkKVxu
IiBcCiAgICAiICAgICAgICByZXN1bHQgPSBAbmV3QXJyYXlXaXRoU2l6ZShsZW5ndGgpO1xuIiBc
CiAgICAiICAgIGVsc2VcbiIgXAogICAgIiAgICAgICAgcmVzdWx0ID0gbmV3IGNvbnN0cnVjdG9y
KGxlbmd0aCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7XG4iIFwKICAgICIgICAgICAgIGlmICghKGkgaW4gYXJyYXkpKVxuIiBcCiAg
ICAiICAgICAgICAgICAgY29udGludWU7XG4iIFwKICAgICIgICAgICAgIHZhciBtYXBwZWRWYWx1
ZSA9IGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSk7XG4iIFwKICAg
ICIgICAgICAgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIGksIG1hcHBlZFZhbHVlKTtcbiIgXAog
ICAgIiAgICB9XG4iIFwKICAgICIgICAgcmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn0pXG4iIFwK
OwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlQcm90b3R5cGVTb21lQ29kZUNv
bnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsK
Y29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVTb21lQ29kZUxlbmd0aCA9IDU0MDsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVTb21lQ29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQcm90b3R5cGVTb21lQ29kZSA9CiAg
ICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgYXJyYXkgPSBAdG9PYmplY3Qo
dGhpcywgXCJBcnJheS5wcm90b3R5cGUuc29tZSByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUg
bnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICIgICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0
aChhcnJheS5sZW5ndGgpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHR5cGVvZiBjYWxs
YmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3Io
XCJBcnJheS5wcm90b3R5cGUuc29tZSBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4i
IFwKICAgICIgICAgXG4iIFwKICAgICIgICAgdmFyIHRoaXNBcmcgPSBAYXJndW1lbnQoMSk7XG4i
IFwKICAgICIgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuIiBcCiAgICAi
ICAgICAgICBpZiAoIShpIGluIGFycmF5KSlcbiIgXAogICAgIiAgICAgICAgICAgIGNvbnRpbnVl
O1xuIiBcCiAgICAiICAgICAgICBpZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywgYXJyYXlbaV0s
IGksIGFycmF5KSlcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuIiBcCiAgICAi
ICAgIH1cbiIgXAogICAgIiAgICByZXR1cm4gZmFsc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlRmlsbENvZGVDb25zdHJ1
Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0
IGludCBzX2FycmF5UHJvdG90eXBlRmlsbENvZGVMZW5ndGggPSA4ODE7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX2FycmF5UHJvdG90eXBlRmlsbENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90eXBlRmlsbENvZGUgPQogICAgIihm
dW5jdGlvbiAodmFsdWUgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwi
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGFycmF5ID0gQHRvT2JqZWN0KHRoaXMsIFwi
QXJyYXkucHJvdG90eXBlLmZpbGwgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwgb3Ig
dW5kZWZpbmVkXCIpO1xuIiBcCiAgICAiICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXku
bGVuZ3RoKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciByZWxhdGl2ZVN0YXJ0ID0gQHRv
SW50ZWdlcihAYXJndW1lbnQoMSkpO1xuIiBcCiAgICAiICAgIHZhciBrID0gMDtcbiIgXAogICAg
IiAgICBpZiAocmVsYXRpdmVTdGFydCA8IDApIHtcbiIgXAogICAgIiAgICAgICAgayA9IGxlbmd0
aCArIHJlbGF0aXZlU3RhcnQ7XG4iIFwKICAgICIgICAgICAgIGlmIChrIDwgMClcbiIgXAogICAg
IiAgICAgICAgICAgIGsgPSAwO1xuIiBcCiAgICAiICAgIH0gZWxzZSB7XG4iIFwKICAgICIgICAg
ICAgIGsgPSByZWxhdGl2ZVN0YXJ0O1xuIiBcCiAgICAiICAgICAgICBpZiAoayA+IGxlbmd0aClc
biIgXAogICAgIiAgICAgICAgICAgIGsgPSBsZW5ndGg7XG4iIFwKICAgICIgICAgfVxuIiBcCiAg
ICAiICAgIHZhciByZWxhdGl2ZUVuZCA9IGxlbmd0aDtcbiIgXAogICAgIiAgICB2YXIgZW5kID0g
QGFyZ3VtZW50KDIpO1xuIiBcCiAgICAiICAgIGlmIChlbmQgIT09IEB1bmRlZmluZWQpXG4iIFwK
ICAgICIgICAgICAgIHJlbGF0aXZlRW5kID0gQHRvSW50ZWdlcihlbmQpO1xuIiBcCiAgICAiICAg
IHZhciBmaW5hbCA9IDA7XG4iIFwKICAgICIgICAgaWYgKHJlbGF0aXZlRW5kIDwgMCkge1xuIiBc
CiAgICAiICAgICAgICBmaW5hbCA9IGxlbmd0aCArIHJlbGF0aXZlRW5kO1xuIiBcCiAgICAiICAg
ICAgICBpZiAoZmluYWwgPCAwKVxuIiBcCiAgICAiICAgICAgICAgICAgZmluYWwgPSAwO1xuIiBc
CiAgICAiICAgIH0gZWxzZSB7XG4iIFwKICAgICIgICAgICAgIGZpbmFsID0gcmVsYXRpdmVFbmQ7
XG4iIFwKICAgICIgICAgICAgIGlmIChmaW5hbCA+IGxlbmd0aClcbiIgXAogICAgIiAgICAgICAg
ICAgIGZpbmFsID0gbGVuZ3RoO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIiAgICBmb3IgKDsg
ayA8IGZpbmFsOyBrKyspXG4iIFwKICAgICIgICAgICAgIGFycmF5W2tdID0gdmFsdWU7XG4iIFwK
ICAgICIgICAgcmV0dXJuIGFycmF5O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNv
bnN0cnVjdEFiaWxpdHkgc19hcnJheVByb3RvdHlwZUZpbmRDb2RlQ29uc3RydWN0QWJpbGl0eSA9
IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJh
eVByb3RvdHlwZUZpbmRDb2RlTGVuZ3RoID0gNTI3OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5z
aWMgc19hcnJheVByb3RvdHlwZUZpbmRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsK
Y29uc3QgY2hhciogc19hcnJheVByb3RvdHlwZUZpbmRDb2RlID0KICAgICIoZnVuY3Rpb24gKGNh
bGxiYWNrIClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIHZhciBhcnJheSA9IEB0b09iamVjdCh0aGlzLCBcIkFycmF5LnBy
b3RvdHlwZS5maW5kIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5l
ZFwiKTtcbiIgXAogICAgIiAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0
aW9uXCIpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIkFycmF5LnByb3RvdHlw
ZS5maW5kIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgIiAgICBcbiIg
XAogICAgIiAgICB2YXIgdGhpc0FyZyA9IEBhcmd1bWVudCgxKTtcbiIgXAogICAgIiAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4iIFwKICAgICIgICAgICAgIHZhciBrVmFs
dWUgPSBhcnJheVtpXTtcbiIgXAogICAgIiAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNB
cmcsIGtWYWx1ZSwgaSwgYXJyYXkpKVxuIiBcCiAgICAiICAgICAgICAgICAgcmV0dXJuIGtWYWx1
ZTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICIgICAgcmV0dXJuIEB1bmRlZmluZWQ7XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90
eXBlRmluZEluZGV4Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVGaW5kSW5kZXhDb2Rl
TGVuZ3RoID0gNDk1OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheVByb3RvdHlw
ZUZpbmRJbmRleENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBz
X2FycmF5UHJvdG90eXBlRmluZEluZGV4Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayAp
XG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICB2YXIgYXJyYXkgPSBAdG9PYmplY3QodGhpcywgXCJBcnJheS5wcm90b3R5cGUu
ZmluZEluZGV4IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwi
KTtcbiIgXAogICAgIiAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9u
XCIpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIkFycmF5LnByb3RvdHlwZS5m
aW5kSW5kZXggY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiICAgIFxu
IiBcCiAgICAiICAgIHZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiIgXAogICAgIiAgICAgICAgaWYgKGNh
bGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSkpXG4iIFwKICAgICIgICAg
ICAgICAgICByZXR1cm4gaTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICIgICAgcmV0dXJuIC0x
O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJh
eVByb3RvdHlwZUluY2x1ZGVzQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFi
aWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVJbmNsdWRl
c0NvZGVMZW5ndGggPSA3OTg7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5UHJv
dG90eXBlSW5jbHVkZXNDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hh
ciogc19hcnJheVByb3RvdHlwZUluY2x1ZGVzQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChzZWFyY2hF
bGVtZW50IClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIHZhciBhcnJheSA9IEB0b09iamVjdCh0aGlzLCBcIkFycmF5LnBy
b3RvdHlwZS5pbmNsdWRlcyByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRl
ZmluZWRcIik7XG4iIFwKICAgICIgICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5sZW5n
dGgpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGxlbmd0aCA9PT0gMClcbiIgXAogICAg
IiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGZyb21J
bmRleCA9IDA7XG4iIFwKICAgICIgICAgdmFyIGZyb20gPSBAYXJndW1lbnQoMSk7XG4iIFwKICAg
ICIgICAgaWYgKGZyb20gIT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAgIGZyb21JbmRl
eCA9IEB0b0ludGVnZXIoZnJvbSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgaW5kZXg7
XG4iIFwKICAgICIgICAgaWYgKGZyb21JbmRleCA+PSAwKVxuIiBcCiAgICAiICAgICAgICBpbmRl
eCA9IGZyb21JbmRleDtcbiIgXAogICAgIiAgICBlbHNlXG4iIFwKICAgICIgICAgICAgIGluZGV4
ID0gbGVuZ3RoICsgZnJvbUluZGV4O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGluZGV4
IDwgMClcbiIgXAogICAgIiAgICAgICAgaW5kZXggPSAwO1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgdmFyIGN1cnJlbnRFbGVtZW50O1xuIiBcCiAgICAiICAgIGZvciAoOyBpbmRleCA8IGxlbmd0
aDsgKytpbmRleCkge1xuIiBcCiAgICAiICAgICAgICBjdXJyZW50RWxlbWVudCA9IGFycmF5W2lu
ZGV4XTtcbiIgXAogICAgIiAgICAgICAgLy9cbiIgXAogICAgIiAgICAgICAgaWYgKHNlYXJjaEVs
ZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50IHx8IChzZWFyY2hFbGVtZW50ICE9PSBzZWFyY2hFbGVt
ZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBjdXJyZW50RWxlbWVudCkpXG4iIFwKICAgICIgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICIgICAgcmV0dXJu
IGZhbHNlO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19hcnJheVByb3RvdHlwZVNvcnRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJheVByb3RvdHlwZVNvcnRD
b2RlTGVuZ3RoID0gNjI0NTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90
b3R5cGVTb3J0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNf
YXJyYXlQcm90b3R5cGVTb3J0Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChjb21wYXJhdG9yKVxuIiBc
CiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgZnVuY3Rpb24gbWluKGEsIGIpXG4iIFwKICAgICIgICAge1xuIiBcCiAgICAiICAgICAg
ICByZXR1cm4gYSA8IGIgPyBhIDogYjtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICBmdW5jdGlvbiBzdHJpbmdDb21wYXJhdG9yKGEsIGIpXG4iIFwKICAgICIgICAge1xu
IiBcCiAgICAiICAgICAgICB2YXIgYVN0cmluZyA9IGEuc3RyaW5nO1xuIiBcCiAgICAiICAgICAg
ICB2YXIgYlN0cmluZyA9IGIuc3RyaW5nO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIHZh
ciBhTGVuZ3RoID0gYVN0cmluZy5sZW5ndGg7XG4iIFwKICAgICIgICAgICAgIHZhciBiTGVuZ3Ro
ID0gYlN0cmluZy5sZW5ndGg7XG4iIFwKICAgICIgICAgICAgIHZhciBsZW5ndGggPSBtaW4oYUxl
bmd0aCwgYkxlbmd0aCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuIiBcCiAgICAiICAgICAgICAgICAgdmFyIGFDaGFyQ29k
ZSA9IGFTdHJpbmcuQGNoYXJDb2RlQXQoaSk7XG4iIFwKICAgICIgICAgICAgICAgICB2YXIgYkNo
YXJDb2RlID0gYlN0cmluZy5AY2hhckNvZGVBdChpKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
ICAgICAgICAgaWYgKGFDaGFyQ29kZSA9PSBiQ2hhckNvZGUpXG4iIFwKICAgICIgICAgICAgICAg
ICAgICAgY29udGludWU7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiBh
Q2hhckNvZGUgLSBiQ2hhckNvZGU7XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIlxuIiBc
CiAgICAiICAgICAgICByZXR1cm4gYUxlbmd0aCAtIGJMZW5ndGg7XG4iIFwKICAgICIgICAgfVxu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBmdW5jdGlvbiBjb21wYWN0
U3BhcnNlKGFycmF5LCBkc3QsIHNyYywgbGVuZ3RoKVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAg
IiAgICAgICAgdmFyIHZhbHVlcyA9IFsgXTtcbiIgXAogICAgIiAgICAgICAgdmFyIHNlZW4gPSB7
IH07XG4iIFwKICAgICIgICAgICAgIHZhciB2YWx1ZUNvdW50ID0gMDtcbiIgXAogICAgIiAgICAg
ICAgdmFyIHVuZGVmaW5lZENvdW50ID0gMDtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICAv
L1xuIiBcCiAgICAiICAgICAgICBmb3IgKHZhciBpID0gZHN0OyBpIDwgc3JjOyArK2kpXG4iIFwK
ICAgICIgICAgICAgICAgICBkZWxldGUgYXJyYXlbaV07XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICAgICAgZm9yICh2YXIgb2JqZWN0ID0gYXJyYXk7IG9iamVjdDsgb2JqZWN0ID0gQE9iamVjdC5A
Z2V0UHJvdG90eXBlT2Yob2JqZWN0KSkge1xuIiBcCiAgICAiICAgICAgICAgICAgdmFyIHByb3Bl
cnR5TmFtZXMgPSBAT2JqZWN0LkBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4iIFwKICAg
ICIgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyAr
K2kpIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBwcm9wZXJ0eU5hbWVz
W2ldO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgeyAvL1xu
IiBcCiAgICAiICAgICAgICAgICAgICAgICAgICBpZiAoc2VlbltpbmRleF0pIC8vXG4iIFwKICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiIgXAogICAgIiAgICAgICAgICAg
ICAgICAgICAgc2VlbltpbmRleF0gPSAxO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgICAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiIgXAogICAgIiAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIGFycmF5W2luZGV4XTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IEB1bmRlZmluZWQpIHtcbiIgXAogICAgIiAgICAg
ICAgICAgICAgICAgICAgICAgICsrdW5kZWZpbmVkQ291bnQ7XG4iIFwKICAgICIgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgfVxu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgICAgICAgICAgICAgIGFycmF5W3ZhbHVlQ291bnQr
K10gPSB2YWx1ZTtcbiIgXAogICAgIiAgICAgICAgICAgICAgICB9XG4iIFwKICAgICIgICAgICAg
ICAgICB9XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICBm
b3IgKHZhciBpID0gdmFsdWVDb3VudDsgaSA8IHZhbHVlQ291bnQgKyB1bmRlZmluZWRDb3VudDsg
KytpKVxuIiBcCiAgICAiICAgICAgICAgICAgYXJyYXlbaV0gPSBAdW5kZWZpbmVkO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgICAgIHJldHVybiB2YWx1ZUNvdW50O1xuIiBcCiAgICAiICAgIH1c
biIgXAogICAgIlxuIiBcCiAgICAiICAgIGZ1bmN0aW9uIGNvbXBhY3RTbG93KGFycmF5LCBsZW5n
dGgpXG4iIFwKICAgICIgICAge1xuIiBcCiAgICAiICAgICAgICB2YXIgaG9sZUNvdW50ID0gMDtc
biIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICBmb3IgKHZhciBkc3QgPSAwLCBzcmMgPSAwOyBz
cmMgPCBsZW5ndGg7ICsrc3JjKSB7XG4iIFwKICAgICIgICAgICAgICAgICBpZiAoIShzcmMgaW4g
YXJyYXkpKSB7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgKytob2xlQ291bnQ7XG4iIFwKICAg
ICIgICAgICAgICAgICAgICAgaWYgKGhvbGVDb3VudCA8IDI1NilcbiIgXAogICAgIiAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bXBhY3RTcGFyc2UoYXJyYXksIGRzdCwgc3JjLCBsZW5ndGgpO1xuIiBcCiAgICAiICAgICAgICAg
ICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtz
cmNdO1xuIiBcCiAgICAiICAgICAgICAgICAgaWYgKHZhbHVlID09PSBAdW5kZWZpbmVkKVxuIiBc
CiAgICAiICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAg
ICAgICAgICBhcnJheVtkc3QrK10gPSB2YWx1ZTtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgICAgIHZhciB2YWx1ZUNvdW50ID0gZHN0O1xuIiBcCiAgICAiICAg
ICAgICB2YXIgdW5kZWZpbmVkQ291bnQgPSBsZW5ndGggLSB2YWx1ZUNvdW50IC0gaG9sZUNvdW50
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIGZvciAodmFyIGkgPSB2YWx1ZUNvdW50OyBp
IDwgdmFsdWVDb3VudCArIHVuZGVmaW5lZENvdW50OyArK2kpXG4iIFwKICAgICIgICAgICAgICAg
ICBhcnJheVtpXSA9IEB1bmRlZmluZWQ7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgZm9y
ICh2YXIgaSA9IHZhbHVlQ291bnQgKyB1bmRlZmluZWRDb3VudDsgaSA8IGxlbmd0aDsgKytpKVxu
IiBcCiAgICAiICAgICAgICAgICAgZGVsZXRlIGFycmF5W2ldO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgICAgIHJldHVybiB2YWx1ZUNvdW50O1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgZnVuY3Rpb24gY29tcGFjdChhcnJheSwgbGVu
Z3RoKVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAgIiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhcnJheS5sZW5ndGg7ICsraSkge1xuIiBcCiAgICAiICAgICAgICAgICAgaWYgKGFycmF5W2ld
ID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIHJldHVybiBjb21wYWN0
U2xvdyhhcnJheSwgbGVuZ3RoKTtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgICAgIHJldHVybiBsZW5ndGg7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgZnVuY3Rpb24gbWVyZ2UoZHN0LCBzcmMsIHNyY0luZGV4LCBzcmNFbmQsIHdp
ZHRoLCBjb21wYXJhdG9yKVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAgIiAgICAgICAgdmFyIGxl
ZnQgPSBzcmNJbmRleDtcbiIgXAogICAgIiAgICAgICAgdmFyIGxlZnRFbmQgPSBtaW4obGVmdCAr
IHdpZHRoLCBzcmNFbmQpO1xuIiBcCiAgICAiICAgICAgICB2YXIgcmlnaHQgPSBsZWZ0RW5kO1xu
IiBcCiAgICAiICAgICAgICB2YXIgcmlnaHRFbmQgPSBtaW4ocmlnaHQgKyB3aWR0aCwgc3JjRW5k
KTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICBmb3IgKHZhciBkc3RJbmRleCA9IGxlZnQ7
IGRzdEluZGV4IDwgcmlnaHRFbmQ7ICsrZHN0SW5kZXgpIHtcbiIgXAogICAgIiAgICAgICAgICAg
IGlmIChyaWdodCA8IHJpZ2h0RW5kKSB7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgaWYgKGxl
ZnQgPj0gbGVmdEVuZCkge1xuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICBkc3RbZHN0SW5k
ZXhdID0gc3JjW3JpZ2h0KytdO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTtcbiIgXAogICAgIiAgICAgICAgICAgICAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAg
ICAgICAgICAgICBsZXQgY29tcGFyaXNvblJlc3VsdCA9IGNvbXBhcmF0b3Ioc3JjW3JpZ2h0XSwg
c3JjW2xlZnRdKTtcbiIgXAogICAgIiAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBjb21wYXJp
c29uUmVzdWx0ID09PSBcImJvb2xlYW5cIiAmJiAhY29tcGFyaXNvblJlc3VsdCkgfHwgY29tcGFy
aXNvblJlc3VsdCA8IDApIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgZHN0W2RzdElu
ZGV4XSA9IHNyY1tyaWdodCsrXTtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAg
ICAgICAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgICAgIGRzdFtkc3RJbmRleF0g
PSBzcmNbbGVmdCsrXTtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiICAgIH1cbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIGZ1bmN0aW9uIG1lcmdlU29ydChhcnJheSwgdmFsdWVDb3VudCwg
Y29tcGFyYXRvcilcbiIgXAogICAgIiAgICB7XG4iIFwKICAgICIgICAgICAgIHZhciBidWZmZXIg
PSBbIF07XG4iIFwKICAgICIgICAgICAgIGJ1ZmZlci5sZW5ndGggPSB2YWx1ZUNvdW50O1xuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgICAgIHZhciBkc3QgPSBidWZmZXI7XG4iIFwKICAgICIgICAg
ICAgIHZhciBzcmMgPSBhcnJheTtcbiIgXAogICAgIiAgICAgICAgZm9yICh2YXIgd2lkdGggPSAx
OyB3aWR0aCA8IHZhbHVlQ291bnQ7IHdpZHRoICo9IDIpIHtcbiIgXAogICAgIiAgICAgICAgICAg
IGZvciAodmFyIHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCB2YWx1ZUNvdW50OyBzcmNJbmRleCAr
PSAyICogd2lkdGgpXG4iIFwKICAgICIgICAgICAgICAgICAgICAgbWVyZ2UoZHN0LCBzcmMsIHNy
Y0luZGV4LCB2YWx1ZUNvdW50LCB3aWR0aCwgY29tcGFyYXRvcik7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICAgICAgICAgIHZhciB0bXAgPSBzcmM7XG4iIFwKICAgICIgICAgICAgICAgICBzcmMg
PSBkc3Q7XG4iIFwKICAgICIgICAgICAgICAgICBkc3QgPSB0bXA7XG4iIFwKICAgICIgICAgICAg
IH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICBpZiAoc3JjICE9IGFycmF5KSB7XG4iIFwK
ICAgICIgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWVDb3VudDsgaSsrKVxuIiBc
CiAgICAiICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3JjW2ldO1xuIiBcCiAgICAiICAgICAg
ICB9XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZnVuY3Rpb24gYnVj
a2V0U29ydChhcnJheSwgZHN0LCBidWNrZXQsIGRlcHRoKVxuIiBcCiAgICAiICAgIHtcbiIgXAog
ICAgIiAgICAgICAgaWYgKGJ1Y2tldC5sZW5ndGggPCAzMiB8fCBkZXB0aCA+IDMyKSB7XG4iIFwK
ICAgICIgICAgICAgICAgICBtZXJnZVNvcnQoYnVja2V0LCBidWNrZXQubGVuZ3RoLCBzdHJpbmdD
b21wYXJhdG9yKTtcbiIgXAogICAgIiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVj
a2V0Lmxlbmd0aDsgKytpKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIGFycmF5W2RzdCsrXSA9
IGJ1Y2tldFtpXS52YWx1ZTtcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4iIFwK
ICAgICIgICAgICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICB2YXIgYnVja2V0cyA9
IFsgXTtcbiIgXAogICAgIiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWNrZXQubGVuZ3Ro
OyArK2kpIHtcbiIgXAogICAgIiAgICAgICAgICAgIHZhciBlbnRyeSA9IGJ1Y2tldFtpXTtcbiIg
XAogICAgIiAgICAgICAgICAgIHZhciBzdHJpbmcgPSBlbnRyeS5zdHJpbmc7XG4iIFwKICAgICIg
ICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PSBkZXB0aCkge1xuIiBcCiAgICAiICAgICAg
ICAgICAgICAgIGFycmF5W2RzdCsrXSA9IGVudHJ5LnZhbHVlO1xuIiBcCiAgICAiICAgICAgICAg
ICAgICAgIGNvbnRpbnVlO1xuIiBcCiAgICAiICAgICAgICAgICAgfVxuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgICAgICAgICB2YXIgYyA9IHN0cmluZy5AY2hhckNvZGVBdChkZXB0aCk7XG4iIFwK
ICAgICIgICAgICAgICAgICBpZiAoIWJ1Y2tldHNbY10pXG4iIFwKICAgICIgICAgICAgICAgICAg
ICAgYnVja2V0c1tjXSA9IFsgXTtcbiIgXAogICAgIiAgICAgICAgICAgIGJ1Y2tldHNbY11bYnVj
a2V0c1tjXS5sZW5ndGhdID0gZW50cnk7XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIlxu
IiBcCiAgICAiICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Y2tldHMubGVuZ3RoOyArK2kp
IHtcbiIgXAogICAgIiAgICAgICAgICAgIGlmICghYnVja2V0c1tpXSlcbiIgXAogICAgIiAgICAg
ICAgICAgICAgICBjb250aW51ZTtcbiIgXAogICAgIiAgICAgICAgICAgIGRzdCA9IGJ1Y2tldFNv
cnQoYXJyYXksIGRzdCwgYnVja2V0c1tpXSwgZGVwdGggKyAxKTtcbiIgXAogICAgIiAgICAgICAg
fVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIHJldHVybiBkc3Q7XG4iIFwKICAgICIgICAg
fVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZnVuY3Rpb24gY29tcGFyYXRvclNvcnQoYXJyYXks
IGxlbmd0aCwgY29tcGFyYXRvcilcbiIgXAogICAgIiAgICB7XG4iIFwKICAgICIgICAgICAgIHZh
ciB2YWx1ZUNvdW50ID0gY29tcGFjdChhcnJheSwgbGVuZ3RoKTtcbiIgXAogICAgIiAgICAgICAg
bWVyZ2VTb3J0KGFycmF5LCB2YWx1ZUNvdW50LCBjb21wYXJhdG9yKTtcbiIgXAogICAgIiAgICB9
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBmdW5jdGlvbiBzdHJpbmdTb3J0KGFycmF5LCBsZW5n
dGgpXG4iIFwKICAgICIgICAge1xuIiBcCiAgICAiICAgICAgICB2YXIgdmFsdWVDb3VudCA9IGNv
bXBhY3QoYXJyYXksIGxlbmd0aCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgdmFyIHN0
cmluZ3MgPSBAbmV3QXJyYXlXaXRoU2l6ZSh2YWx1ZUNvdW50KTtcbiIgXAogICAgIiAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyArK2kpXG4iIFwKICAgICIgICAgICAgICAg
ICBzdHJpbmdzW2ldID0geyBzdHJpbmc6IEB0b1N0cmluZyhhcnJheVtpXSksIHZhbHVlOiBhcnJh
eVtpXSB9O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIGJ1Y2tldFNvcnQoYXJyYXksIDAs
IHN0cmluZ3MsIDApO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZh
ciBhcnJheSA9IEB0b09iamVjdCh0aGlzLCBcIkFycmF5LnByb3RvdHlwZS5zb3J0IHJlcXVpcmVz
IHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPj4+IDA7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgaWYgKGxlbmd0aCA8
IDIpXG4iIFwKICAgICIgICAgICAgIHJldHVybiBhcnJheTtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIGlmICh0eXBlb2YgY29tcGFyYXRvciA9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgICAg
ICAgIGNvbXBhcmF0b3JTb3J0KGFycmF5LCBsZW5ndGgsIGNvbXBhcmF0b3IpO1xuIiBcCiAgICAi
ICAgIGVsc2UgaWYgKGNvbXBhcmF0b3IgPT09IG51bGwgfHwgY29tcGFyYXRvciA9PT0gQHVuZGVm
aW5lZClcbiIgXAogICAgIiAgICAgICAgc3RyaW5nU29ydChhcnJheSwgbGVuZ3RoKTtcbiIgXAog
ICAgIiAgICBlbHNlXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIkFycmF5LnBy
b3RvdHlwZS5zb3J0IHJlcXVpcmVzIHRoZSBjb21wYXJzaW9uIGZ1bmN0aW9uIGJlIGEgZnVuY3Rp
b24gb3IgdW5kZWZpbmVkXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIGFycmF5
O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJh
eVByb3RvdHlwZUNvbmNhdFNsb3dQYXRoQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVD
b25jYXRTbG93UGF0aENvZGVMZW5ndGggPSAyMDYyOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5z
aWMgc19hcnJheVByb3RvdHlwZUNvbmNhdFNsb3dQYXRoQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQcm90b3R5cGVDb25jYXRTbG93UGF0aENvZGUg
PQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmlj
dFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGN1cnJlbnRFbGVtZW50ID0gQHRvT2Jq
ZWN0KHRoaXMsIFwiQXJyYXkucHJvdG90eXBlLmNvbmNhdCByZXF1aXJlcyB0aGF0IHx0aGlzfCBu
b3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIg
Y29uc3RydWN0b3I7XG4iIFwKICAgICIgICAgaWYgKEBpc0FycmF5KGN1cnJlbnRFbGVtZW50KSkg
e1xuIiBcCiAgICAiICAgICAgICBjb25zdHJ1Y3RvciA9IGN1cnJlbnRFbGVtZW50LmNvbnN0cnVj
dG9yO1xuIiBcCiAgICAiICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAvL1xuIiBcCiAgICAi
ICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICBpZiAoQGlzQXJyYXlDb25zdHJ1Y3Rvcihjb25z
dHJ1Y3RvcikgJiYgQEFycmF5ICE9PSBjb25zdHJ1Y3RvcilcbiIgXAogICAgIiAgICAgICAgICAg
IGNvbnN0cnVjdG9yID0gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAgICAgICAgZWxzZSBpZiAoQGlz
T2JqZWN0KGNvbnN0cnVjdG9yKSkge1xuIiBcCiAgICAiICAgICAgICAgICAgY29uc3RydWN0b3Ig
PSBjb25zdHJ1Y3Rvci5Ac3BlY2llc1N5bWJvbDtcbiIgXAogICAgIiAgICAgICAgICAgIGlmIChj
b25zdHJ1Y3RvciA9PT0gbnVsbClcbiIgXAogICAgIiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rv
ciA9IEBBcnJheTtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiICAgIH1cbiIgXAogICAg
IlxuIiBcCiAgICAiICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4iIFwKICAg
ICIgICAgdmFyIHJlc3VsdDtcbiIgXAogICAgIiAgICBpZiAoY29uc3RydWN0b3IgPT09IEBBcnJh
eSB8fCBjb25zdHJ1Y3RvciA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAgIiAgICAgICAgcmVzdWx0
ID0gQG5ld0FycmF5V2l0aFNpemUoMCk7XG4iIFwKICAgICIgICAgZWxzZVxuIiBcCiAgICAiICAg
ICAgICByZXN1bHQgPSBuZXcgY29uc3RydWN0b3IoMCk7XG4iIFwKICAgICIgICAgdmFyIHJlc3Vs
dElzQXJyYXkgPSBAaXNKU0FycmF5KHJlc3VsdCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2
YXIgcmVzdWx0SW5kZXggPSAwO1xuIiBcCiAgICAiICAgIHZhciBhcmdJbmRleCA9IDA7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICBkbyB7XG4iIFwKICAgICIgICAgICAgIGxldCBzcHJlYWRhYmxl
ID0gQGlzT2JqZWN0KGN1cnJlbnRFbGVtZW50KSAmJiBjdXJyZW50RWxlbWVudC5AaXNDb25jYXRT
cHJlYWRhYmxlU3ltYm9sO1xuIiBcCiAgICAiICAgICAgICBpZiAoKHNwcmVhZGFibGUgPT09IEB1
bmRlZmluZWQgJiYgQGlzQXJyYXkoY3VycmVudEVsZW1lbnQpKSB8fCBzcHJlYWRhYmxlKSB7XG4i
IFwKICAgICIgICAgICAgICAgICBsZXQgbGVuZ3RoID0gQHRvTGVuZ3RoKGN1cnJlbnRFbGVtZW50
Lmxlbmd0aCk7XG4iIFwKICAgICIgICAgICAgICAgICBpZiAobGVuZ3RoICsgcmVzdWx0SW5kZXgg
PiBATUFYX0FSUkFZX0lOREVYKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIEB0aHJvd1Jhbmdl
RXJyb3IoXCJMZW5ndGggZXhjZWVkZWQgdGhlIG1heGltdW0gYXJyYXkgbGVuZ3RoXCIpO1xuIiBc
CiAgICAiICAgICAgICAgICAgaWYgKHJlc3VsdElzQXJyYXkgJiYgQGlzSlNBcnJheShjdXJyZW50
RWxlbWVudCkpIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICBAYXBwZW5kTWVtY3B5KHJlc3Vs
dCwgY3VycmVudEVsZW1lbnQsIHJlc3VsdEluZGV4KTtcbiIgXAogICAgIiAgICAgICAgICAgICAg
ICByZXN1bHRJbmRleCArPSBsZW5ndGg7XG4iIFwKICAgICIgICAgICAgICAgICB9IGVsc2Uge1xu
IiBcCiAgICAiICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgaWYgKGkgaW4gY3VycmVudEVsZW1lbnQp
XG4iIFwKICAgICIgICAgICAgICAgICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0
LCByZXN1bHRJbmRleCwgY3VycmVudEVsZW1lbnRbaV0pO1xuIiBcCiAgICAiICAgICAgICAgICAg
ICAgICAgICByZXN1bHRJbmRleCsrO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIH1cbiIgXAog
ICAgIiAgICAgICAgICAgIH1cbiIgXAogICAgIiAgICAgICAgfSBlbHNlIHtcbiIgXAogICAgIiAg
ICAgICAgICAgIGlmIChyZXN1bHRJbmRleCA+PSBATUFYX0FSUkFZX0lOREVYKVxuIiBcCiAgICAi
ICAgICAgICAgICAgICAgIEB0aHJvd1JhbmdlRXJyb3IoXCJMZW5ndGggZXhjZWVkZWQgdGhlIG1h
eGltdW0gYXJyYXkgbGVuZ3RoXCIpO1xuIiBcCiAgICAiICAgICAgICAgICAgQHB1dEJ5VmFsRGly
ZWN0KHJlc3VsdCwgcmVzdWx0SW5kZXgrKywgY3VycmVudEVsZW1lbnQpO1xuIiBcCiAgICAiICAg
ICAgICB9XG4iIFwKICAgICIgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gYXJndW1lbnRzW2FyZ0lu
ZGV4XTtcbiIgXAogICAgIiAgICB9IHdoaWxlIChhcmdJbmRleCsrIDwgYXJnQ291bnQpO1xuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgcmVzdWx0Lmxlbmd0aCA9IHJlc3VsdEluZGV4O1xuIiBcCiAg
ICAiICAgIHJldHVybiByZXN1bHQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlQ29uY2F0Q29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJy
YXlQcm90b3R5cGVDb25jYXRDb2RlTGVuZ3RoID0gNDE2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19hcnJheVByb3RvdHlwZUNvbmNhdENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmlu
c2ljOwpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90eXBlQ29uY2F0Q29kZSA9CiAgICAiKGZ1bmN0
aW9uIChmaXJzdClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIGlmIChAYXJndW1lbnRDb3VudCgpID09PSAxXG4iIFwKICAg
ICIgICAgICAgICYmIEBpc0pTQXJyYXkodGhpcylcbiIgXAogICAgIiAgICAgICAgJiYgdGhpcy5A
aXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sID09PSBAdW5kZWZpbmVkXG4iIFwKICAgICIgICAgICAg
ICYmICghQGlzT2JqZWN0KGZpcnN0KSB8fCBmaXJzdC5AaXNDb25jYXRTcHJlYWRhYmxlU3ltYm9s
ID09PSBAdW5kZWZpbmVkKSkge1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIGxldCByZXN1
bHQgPSBAY29uY2F0TWVtY3B5KHRoaXMsIGZpcnN0KTtcbiIgXAogICAgIiAgICAgICAgaWYgKHJl
c3VsdCAhPT0gbnVsbClcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4iIFwK
ICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIEB0YWlsQ2FsbEZvcndh
cmRBcmd1bWVudHMoQGNvbmNhdFNsb3dQYXRoLCB0aGlzKTtcbiIgXAogICAgIn0pXG4iIFwKOwoK
Y29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlQcm90b3R5cGVDb3B5V2l0aGluQ29k
ZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dDsKY29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVDb3B5V2l0aGluQ29kZUxlbmd0aCA9IDE1ODA7
CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5UHJvdG90eXBlQ29weVdpdGhpbkNv
ZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90
eXBlQ29weVdpdGhpbkNvZGUgPQogICAgIihmdW5jdGlvbiAodGFyZ2V0LCBzdGFydCApXG4iIFwK
ICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICBmdW5jdGlvbiBtYXhXaXRoUG9zaXRpdmVzKGEsIGIpXG4iIFwKICAgICIgICAge1xuIiBc
CiAgICAiICAgICAgICByZXR1cm4gKGEgPCBiKSA/IGIgOiBhO1xuIiBcCiAgICAiICAgIH1cbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIGZ1bmN0aW9uIG1pbldpdGhNYXliZU5lZ2F0aXZlWmVyb0Fu
ZFBvc2l0aXZlKG1heWJlTmVnYXRpdmVaZXJvLCBwb3NpdGl2ZSlcbiIgXAogICAgIiAgICB7XG4i
IFwKICAgICIgICAgICAgIHJldHVybiAobWF5YmVOZWdhdGl2ZVplcm8gPCBwb3NpdGl2ZSkgPyBt
YXliZU5lZ2F0aXZlWmVybyA6IHBvc2l0aXZlO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIHZhciBhcnJheSA9IEB0b09iamVjdCh0aGlzLCBcIkFycmF5LnByb3RvdHlw
ZS5jb3B5V2l0aGluIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5l
ZFwiKTtcbiIgXAogICAgIiAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgcmVsYXRpdmVUYXJnZXQgPSBAdG9JbnRlZ2Vy
KHRhcmdldCk7XG4iIFwKICAgICIgICAgdmFyIHRvID0gKHJlbGF0aXZlVGFyZ2V0IDwgMCkgPyBt
YXhXaXRoUG9zaXRpdmVzKGxlbmd0aCArIHJlbGF0aXZlVGFyZ2V0LCAwKSA6IG1pbldpdGhNYXli
ZU5lZ2F0aXZlWmVyb0FuZFBvc2l0aXZlKHJlbGF0aXZlVGFyZ2V0LCBsZW5ndGgpO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgdmFyIHJlbGF0aXZlU3RhcnQgPSBAdG9JbnRlZ2VyKHN0YXJ0KTtc
biIgXAogICAgIiAgICB2YXIgZnJvbSA9IChyZWxhdGl2ZVN0YXJ0IDwgMCkgPyBtYXhXaXRoUG9z
aXRpdmVzKGxlbmd0aCArIHJlbGF0aXZlU3RhcnQsIDApIDogbWluV2l0aE1heWJlTmVnYXRpdmVa
ZXJvQW5kUG9zaXRpdmUocmVsYXRpdmVTdGFydCwgbGVuZ3RoKTtcbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIHZhciByZWxhdGl2ZUVuZDtcbiIgXAogICAgIiAgICB2YXIgZW5kID0gQGFyZ3VtZW50
KDIpO1xuIiBcCiAgICAiICAgIGlmIChlbmQgPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAg
ICAgIHJlbGF0aXZlRW5kID0gbGVuZ3RoO1xuIiBcCiAgICAiICAgIGVsc2VcbiIgXAogICAgIiAg
ICAgICAgcmVsYXRpdmVFbmQgPSBAdG9JbnRlZ2VyKGVuZCk7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICB2YXIgZmluYWxWYWx1ZSA9IChyZWxhdGl2ZUVuZCA8IDApID8gbWF4V2l0aFBvc2l0aXZl
cyhsZW5ndGggKyByZWxhdGl2ZUVuZCwgMCkgOiBtaW5XaXRoTWF5YmVOZWdhdGl2ZVplcm9BbmRQ
b3NpdGl2ZShyZWxhdGl2ZUVuZCwgbGVuZ3RoKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZh
ciBjb3VudCA9IG1pbldpdGhNYXliZU5lZ2F0aXZlWmVyb0FuZFBvc2l0aXZlKGZpbmFsVmFsdWUg
LSBmcm9tLCBsZW5ndGggLSB0byk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgZGlyZWN0
aW9uID0gMTtcbiIgXAogICAgIiAgICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50
KSB7XG4iIFwKICAgICIgICAgICAgIGRpcmVjdGlvbiA9IC0xO1xuIiBcCiAgICAiICAgICAgICBm
cm9tID0gZnJvbSArIGNvdW50IC0gMTtcbiIgXAogICAgIiAgICAgICAgdG8gPSB0byArIGNvdW50
IC0gMTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNvdW50OyArK2ksIGZyb20gKz0gZGlyZWN0aW9uLCB0byArPSBkaXJlY3Rpb24p
IHtcbiIgXAogICAgIiAgICAgICAgaWYgKGZyb20gaW4gYXJyYXkpXG4iIFwKICAgICIgICAgICAg
ICAgICBhcnJheVt0b10gPSBhcnJheVtmcm9tXTtcbiIgXAogICAgIiAgICAgICAgZWxzZVxuIiBc
CiAgICAiICAgICAgICAgICAgZGVsZXRlIGFycmF5W3RvXTtcbiIgXAogICAgIiAgICB9XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gYXJyYXk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlw
ZU5leHRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19hc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVOZXh0
Q29kZUxlbmd0aCA9IDk4NzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNGcm9t
U3luY0l0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2lj
Owpjb25zdCBjaGFyKiBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlID0K
ICAgICIoZnVuY3Rpb24gKHZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0
cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgY29uc3QgcHJvbWlzZUNhcGFiaWxpdHkg
PSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQFByb21pc2UpO1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgaWYgKCFAaXNPYmplY3QodGhpcykgfHwgIUBpc09iamVjdCh0aGlzLkBzeW5jSXRlcmF0b3Ip
KSB7XG4iIFwKICAgICIgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwoQHVu
ZGVmaW5lZCwgbmV3IEBUeXBlRXJyb3IoJ0l0ZXJhdG9yIGlzIG5vdCBhbiBvYmplY3QuJykpO1xu
IiBcCiAgICAiICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwK
ICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgY29uc3Qgc3luY0l0ZXJhdG9yID0g
dGhpcy5Ac3luY0l0ZXJhdG9yO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdHJ5IHtcbiIgXAog
ICAgIiAgICAgICAgY29uc3QgeyBkb25lOiBuZXh0RG9uZSwgdmFsdWU6IG5leHRWYWx1ZSB9ID0g
dGhpcy5AbmV4dE1ldGhvZC5AY2FsbChzeW5jSXRlcmF0b3IsIHZhbHVlKTtcbiIgXAogICAgIiAg
ICAgICAgY29uc3QgdmFsdWVXcmFwcGVyQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0
eShAUHJvbWlzZSk7XG4iIFwKICAgICIgICAgICAgIHZhbHVlV3JhcHBlckNhcGFiaWxpdHkuQHJl
c29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgbmV4dFZhbHVlKTtcbiIgXAogICAgIiAgICAgICAgdmFs
dWVXcmFwcGVyQ2FwYWJpbGl0eS5AcHJvbWlzZS5AdGhlbihcbiIgXAogICAgIiAgICAgICAgICAg
IGZ1bmN0aW9uIChyZXN1bHQpIHsgcHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwoQHVu
ZGVmaW5lZCwgeyBkb25lOiAhIW5leHREb25lLCB2YWx1ZTogcmVzdWx0IH0pOyB9LFxuIiBcCiAg
ICAiICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7IHByb21pc2VDYXBhYmlsaXR5LkByZWpl
Y3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJyb3IpOyB9KTtcbiIgXAogICAgIiAgICAgfSBjYXRjaChl
KSB7XG4iIFwKICAgICIgICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1
bmRlZmluZWQsIGUpO1xuIiBcCiAgICAiICAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBy
ZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlw
ZVJldHVybkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZVJl
dHVybkNvZGVMZW5ndGggPSAxNjIxOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hc3lu
Y0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVSZXR1cm5Db2RlSW50cmluc2ljID0gSlNDOjpOb0lu
dHJpbnNpYzsKY29uc3QgY2hhciogc19hc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVSZXR1
cm5Db2RlID0KICAgICIoZnVuY3Rpb24gKHZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAg
IFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgY29uc3QgcHJvbWlzZUNh
cGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQFByb21pc2UpO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgaWYgKCFAaXNPYmplY3QodGhpcykgfHwgIUBpc09iamVjdCh0aGlzLkBzeW5j
SXRlcmF0b3IpKSB7XG4iIFwKICAgICIgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3Qu
QGNhbGwoQHVuZGVmaW5lZCwgbmV3IEBUeXBlRXJyb3IoJ0l0ZXJhdG9yIGlzIG5vdCBhbiBvYmpl
Y3QuJykpO1xuIiBcCiAgICAiICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21p
c2U7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgY29uc3Qgc3luY0l0
ZXJhdG9yID0gdGhpcy5Ac3luY0l0ZXJhdG9yO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0
IHJldHVybk1ldGhvZDtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHRyeSB7XG4iIFwKICAgICIg
ICAgICAgIHJldHVybk1ldGhvZCA9IHN5bmNJdGVyYXRvci5yZXR1cm47XG4iIFwKICAgICIgICAg
fSBjYXRjaCAoZSkge1xuIiBcCiAgICAiICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0
LkBjYWxsKEB1bmRlZmluZWQsIGUpO1xuIiBcCiAgICAiICAgICAgICByZXR1cm4gcHJvbWlzZUNh
cGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgaWYgKHJldHVybk1ldGhvZCA9PT0gQHVuZGVmaW5lZCkge1xuIiBcCiAgICAiICAgICAgICBw
cm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB7IHZhbHVlLCBkb25l
OiB0cnVlIH0pO1xuIiBcCiAgICAiICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHBy
b21pc2U7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiICAgIFxuIiBcCiAgICAiICAgIHRyeSB7
XG4iIFwKICAgICIgICAgICAgIGNvbnN0IHJldHVyblJlc3VsdCA9IHJldHVybk1ldGhvZC5AY2Fs
bChzeW5jSXRlcmF0b3IsIHZhbHVlKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICBpZiAo
IUBpc09iamVjdChyZXR1cm5SZXN1bHQpKSB7XG4iIFwKICAgICIgICAgICAgICAgICBwcm9taXNl
Q2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIG5ldyBAVHlwZUVycm9yKCdJdGVy
YXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuJykpO1xuIiBcCiAgICAiICAg
ICAgICAgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAiICAg
ICAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgY29uc3QgeyBkb25lOiByZXN1bHRE
b25lLCB2YWx1ZTogcmVzdWx0VmFsdWUgfSA9IHJldHVyblJlc3VsdDtcbiIgXAogICAgIiAgICAg
ICAgY29uc3QgdmFsdWVXcmFwcGVyQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShA
UHJvbWlzZSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgdmFsdWVXcmFwcGVyQ2FwYWJp
bGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCByZXN1bHRWYWx1ZSk7XG4iIFwKICAgICIg
ICAgICAgIHZhbHVlV3JhcHBlckNhcGFiaWxpdHkuQHByb21pc2UuQHRoZW4oXG4iIFwKICAgICIg
ICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0KSB7IHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZl
LkBjYWxsKEB1bmRlZmluZWQsIHsgZG9uZTogcmVzdWx0RG9uZSwgdmFsdWU6IHJlc3VsdCB9KTsg
fSxcbiIgXAogICAgIiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikgeyBwcm9taXNlQ2FwYWJp
bGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGVycm9yKTsgfSk7XG4iIFwKICAgICIgICAg
fSBjYXRjaCAoZSkge1xuIiBcCiAgICAiICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0
LkBjYWxsKEB1bmRlZmluZWQsIGUpO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTtcbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNGcm9tU3luY0l0ZXJhdG9y
UHJvdG90eXBlVGhyb3dDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90
b3R5cGVUaHJvd0NvZGVMZW5ndGggPSAxNjMyOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMg
c19hc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVUaHJvd0NvZGVJbnRyaW5zaWMgPSBKU0M6
Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlw
ZVRocm93Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChleGNlcHRpb24pXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBjb25zdCBw
cm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShAUHJvbWlzZSk7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICBpZiAoIUBpc09iamVjdCh0aGlzKSB8fCAhQGlzT2JqZWN0KHRo
aXMuQHN5bmNJdGVyYXRvcikpIHtcbiIgXAogICAgIiAgICAgICAgcHJvbWlzZUNhcGFiaWxpdHku
QHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBuZXcgQFR5cGVFcnJvcignSXRlcmF0b3IgaXMgbm90
IGFuIG9iamVjdC4nKSk7XG4iIFwKICAgICIgICAgICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0
eS5AcHJvbWlzZTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBjb25z
dCBzeW5jSXRlcmF0b3IgPSB0aGlzLkBzeW5jSXRlcmF0b3I7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICBsZXQgdGhyb3dNZXRob2Q7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB0cnkge1xuIiBc
CiAgICAiICAgICAgICB0aHJvd01ldGhvZCA9IHN5bmNJdGVyYXRvci50aHJvdztcbiIgXAogICAg
IiAgICB9IGNhdGNoIChlKSB7XG4iIFwKICAgICIgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkBy
ZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZSk7XG4iIFwKICAgICIgICAgICAgIHJldHVybiBwcm9t
aXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICBpZiAodGhyb3dNZXRob2QgPT09IEB1bmRlZmluZWQpIHtcbiIgXAogICAgIiAgICAg
ICAgcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBleGNlcHRpb24p
O1xuIiBcCiAgICAiICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4i
IFwKICAgICIgICAgfVxuIiBcCiAgICAiICAgIFxuIiBcCiAgICAiICAgIHRyeSB7XG4iIFwKICAg
ICIgICAgICAgIGNvbnN0IHRocm93UmVzdWx0ID0gdGhyb3dNZXRob2QuQGNhbGwoc3luY0l0ZXJh
dG9yLCBleGNlcHRpb24pO1xuIiBcCiAgICAiICAgICAgICBcbiIgXAogICAgIiAgICAgICAgaWYg
KCFAaXNPYmplY3QodGhyb3dSZXN1bHQpKSB7XG4iIFwKICAgICIgICAgICAgICAgICBwcm9taXNl
Q2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIG5ldyBAVHlwZUVycm9yKCdJdGVy
YXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuJykpO1xuIiBcCiAgICAiICAg
ICAgICAgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAiICAg
ICAgICB9XG4iIFwKICAgICIgICAgICAgIFxuIiBcCiAgICAiICAgICAgICBjb25zdCB7IGRvbmU6
IHRocm93RG9uZSwgdmFsdWU6IHRocm93VmFsdWUgfSA9IHRocm93UmVzdWx0O1xuIiBcCiAgICAi
ICAgICAgICBjb25zdCB2YWx1ZVdyYXBwZXJDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmls
aXR5KEBQcm9taXNlKTtcbiIgXAogICAgIiAgICAgICAgXG4iIFwKICAgICIgICAgICAgIHZhbHVl
V3JhcHBlckNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgdGhyb3dWYWx1ZSk7
XG4iIFwKICAgICIgICAgICAgIHZhbHVlV3JhcHBlckNhcGFiaWxpdHkuQHByb21pc2UuQHRoZW4o
XG4iIFwKICAgICIgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0KSB7IHByb21pc2VDYXBhYmls
aXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHsgZG9uZTogdGhyb3dEb25lLCB2YWx1ZTog
cmVzdWx0IH0pOyB9LFxuIiBcCiAgICAiICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7IHBy
b21pc2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJyb3IpOyB9KTtcbiIg
XAogICAgIiAgICB9IGNhdGNoIChlKSB7XG4iIFwKICAgICIgICAgICAgIHByb21pc2VDYXBhYmls
aXR5LkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZSk7XG4iIFwKICAgICIgICAgfVxuIiBcCiAg
ICAiICAgIFxuIiBcCiAgICAiICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTtc
biIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNG
cm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlQ3JlYXRlQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29kZUNv
bnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsK
Y29uc3QgaW50IHNfYXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlQ3JlYXRlQXN5bmNGcm9t
U3luY0l0ZXJhdG9yQ29kZUxlbmd0aCA9IDIzNjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfYXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlQ3JlYXRlQXN5bmNGcm9tU3luY0l0ZXJh
dG9yQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXN5bmNG
cm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlQ3JlYXRlQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29kZSA9
CiAgICAiKGZ1bmN0aW9uIChzeW5jSXRlcmF0b3IsIG5leHRNZXRob2QpXG4iIFwKICAgICJ7XG4i
IFwKICAgICIgICAgaWYgKCFAaXNPYmplY3Qoc3luY0l0ZXJhdG9yKSlcbiIgXAogICAgIiAgICAg
ICAgQHRocm93VHlwZUVycm9yKCdPbmx5IG9iamVjdHMgY2FuIGJlIHdyYXBwZWQgYnkgYXN5bmMt
ZnJvbS1zeW5jIHdyYXBwZXInKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBuZXcg
QEFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnN0cnVjdG9yKHN5bmNJdGVyYXRvciwgbmV4dE1ldGhv
ZCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2Fz
eW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZUFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnN0cnVj
dG9yQ29uc3RydWN0b3JDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0
eTo6Q2FuQ29uc3RydWN0Owpjb25zdCBpbnQgc19hc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5
cGVBc3luY0Zyb21TeW5jSXRlcmF0b3JDb25zdHJ1Y3RvckNvbnN0cnVjdG9yQ29kZUxlbmd0aCA9
IDExNjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNGcm9tU3luY0l0ZXJhdG9y
UHJvdG90eXBlQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29uc3RydWN0b3JDb25zdHJ1Y3RvckNvZGVJ
bnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jRnJvbVN5bmNJ
dGVyYXRvclByb3RvdHlwZUFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnN0cnVjdG9yQ29uc3RydWN0
b3JDb2RlID0KICAgICIoZnVuY3Rpb24gKHN5bmNJdGVyYXRvciwgbmV4dE1ldGhvZClcbiIgXAog
ICAgIntcbiIgXAogICAgIiAgICB0aGlzLkBzeW5jSXRlcmF0b3IgPSBzeW5jSXRlcmF0b3I7XG4i
IFwKICAgICIgICAgdGhpcy5AbmV4dE1ldGhvZCA9IG5leHRNZXRob2Q7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jRnVuY3Rpb25Qcm90b3R5
cGVBc3luY0Z1bmN0aW9uUmVzdW1lQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXN5bmNGdW5jdGlvblByb3Rv
dHlwZUFzeW5jRnVuY3Rpb25SZXN1bWVDb2RlTGVuZ3RoID0gMTQwMDsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfYXN5bmNGdW5jdGlvblByb3RvdHlwZUFzeW5jRnVuY3Rpb25SZXN1bWVD
b2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hc3luY0Z1bmN0
aW9uUHJvdG90eXBlQXN5bmNGdW5jdGlvblJlc3VtZUNvZGUgPQogICAgIihmdW5jdGlvbiAoZ2Vu
ZXJhdG9yLCBwcm9taXNlQ2FwYWJpbGl0eSwgc2VudFZhbHVlLCByZXN1bWVNb2RlKVxuIiBcCiAg
ICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiICAgIGxldCBzdGF0
ZSA9IGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGU7XG4iIFwKICAgICIgICAgbGV0IHZhbHVlID0g
QHVuZGVmaW5lZDtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChzdGF0ZSA9PT0gQEdlbmVy
YXRvclN0YXRlQ29tcGxldGVkIHx8IChyZXN1bWVNb2RlICE9PSBAR2VuZXJhdG9yUmVzdW1lTW9k
ZU5vcm1hbCAmJiByZXN1bWVNb2RlICE9PSBAR2VuZXJhdG9yUmVzdW1lTW9kZVRocm93KSlcbiIg
XAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiQXN5bmMgZnVuY3Rpb24gaWxsZWdhbGx5
IHJlc3VtZWRcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB0cnkge1xuIiBcCiAgICAiICAg
ICAgICBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID0gQEdlbmVyYXRvclN0YXRlRXhlY3V0aW5n
O1xuIiBcCiAgICAiICAgICAgICB2YWx1ZSA9IGdlbmVyYXRvci5AZ2VuZXJhdG9yTmV4dC5AY2Fs
bChnZW5lcmF0b3IuQGdlbmVyYXRvclRoaXMsIGdlbmVyYXRvciwgc3RhdGUsIHNlbnRWYWx1ZSwg
cmVzdW1lTW9kZSwgZ2VuZXJhdG9yLkBnZW5lcmF0b3JGcmFtZSk7XG4iIFwKICAgICIgICAgICAg
IGlmIChnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVFeGVjdXRp
bmcpIHtcbiIgXAogICAgIiAgICAgICAgICAgIGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPSBA
R2VuZXJhdG9yU3RhdGVDb21wbGV0ZWQ7XG4iIFwKICAgICIgICAgICAgICAgICBwcm9taXNlQ2Fw
YWJpbGl0eS5AcmVzb2x2ZSh2YWx1ZSk7XG4iIFwKICAgICIgICAgICAgICAgICByZXR1cm4gcHJv
bWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIiAg
ICB9IGNhdGNoIChlcnJvcikge1xuIiBcCiAgICAiICAgICAgICBnZW5lcmF0b3IuQGdlbmVyYXRv
clN0YXRlID0gQEdlbmVyYXRvclN0YXRlQ29tcGxldGVkO1xuIiBcCiAgICAiICAgICAgICBwcm9t
aXNlQ2FwYWJpbGl0eS5AcmVqZWN0KGVycm9yKTtcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIHBy
b21pc2VDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIGxldCB3cmFwcGVkVmFsdWUgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQFByb21p
c2UpO1xuIiBcCiAgICAiICAgIHdyYXBwZWRWYWx1ZS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVk
LCB2YWx1ZSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB3cmFwcGVkVmFsdWUuQHByb21pc2Uu
QHRoZW4oXG4iIFwKICAgICIgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7IEBhc3luY0Z1bmN0aW9u
UmVzdW1lKGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIHZhbHVlLCBAR2VuZXJhdG9yUmVz
dW1lTW9kZU5vcm1hbCk7IH0sXG4iIFwKICAgICIgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IEBh
c3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIGVycm9yLCBA
R2VuZXJhdG9yUmVzdW1lTW9kZVRocm93KTsgfSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBy
ZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNH
ZW5lcmF0b3JRdWV1ZUlzRW1wdHlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hc3luY0dlbmVyYXRvclByb3Rv
dHlwZUFzeW5jR2VuZXJhdG9yUXVldWVJc0VtcHR5Q29kZUxlbmd0aCA9IDEwMjsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRv
clF1ZXVlSXNFbXB0eUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JRdWV1ZUlzRW1wdHlDb2Rl
ID0KICAgICIoZnVuY3Rpb24gKGdlbmVyYXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBc
InVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBnZW5lcmF0b3Iu
QGFzeW5jR2VuZXJhdG9yUXVldWVMYXN0ID09PSBudWxsO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5j
R2VuZXJhdG9yUXVldWVFbnF1ZXVlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXN5bmNHZW5lcmF0b3JQcm90
b3R5cGVBc3luY0dlbmVyYXRvclF1ZXVlRW5xdWV1ZUNvZGVMZW5ndGggPSA2MTY7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0
b3JRdWV1ZUVucXVldWVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hh
ciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUXVldWVFbnF1ZXVlQ29k
ZSA9CiAgICAiKGZ1bmN0aW9uIChnZW5lcmF0b3IsIGl0ZW0pXG4iIFwKICAgICJ7XG4iIFwKICAg
ICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBAYXNzZXJ0KGl0
ZW0uQGFzeW5jR2VuZXJhdG9yUXVldWVJdGVtTmV4dCA9PT0gbnVsbCAmJiBpdGVtLkBhc3luY0dl
bmVyYXRvclF1ZXVlSXRlbVByZXZpb3VzID09PSBudWxsKTtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIGlmIChnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yUXVldWVGaXJzdCA9PT0gbnVsbCkge1xu
IiBcCiAgICAiICAgICAgICBAYXNzZXJ0KGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JRdWV1ZUxh
c3QgPT09IG51bGwpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIGdlbmVyYXRvci5AYXN5
bmNHZW5lcmF0b3JRdWV1ZUZpcnN0ID0gaXRlbTtcbiIgXAogICAgIiAgICAgICAgZ2VuZXJhdG9y
LkBhc3luY0dlbmVyYXRvclF1ZXVlTGFzdCA9IGl0ZW07XG4iIFwKICAgICIgICAgfSBlbHNlIHtc
biIgXAogICAgIiAgICAgICAgaXRlbS5AYXN5bmNHZW5lcmF0b3JRdWV1ZUl0ZW1QcmV2aW91cyA9
IGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JRdWV1ZUxhc3Q7XG4iIFwKICAgICIgICAgICAgIGdl
bmVyYXRvci5AYXN5bmNHZW5lcmF0b3JRdWV1ZUxhc3QuQGFzeW5jR2VuZXJhdG9yUXVldWVJdGVt
TmV4dCA9IGl0ZW07XG4iIFwKICAgICIgICAgICAgIGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JR
dWV1ZUxhc3QgPSBpdGVtO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIn0pXG4iIFwKOwoKY29u
c3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dl
bmVyYXRvclF1ZXVlRGVxdWV1ZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9yUHJvdG90
eXBlQXN5bmNHZW5lcmF0b3JRdWV1ZURlcXVldWVDb2RlTGVuZ3RoID0gMzgzOwpzdGF0aWMgY29u
c3QgSlNDOjpJbnRyaW5zaWMgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9y
UXVldWVEZXF1ZXVlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIq
IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclF1ZXVlRGVxdWV1ZUNvZGUg
PQogICAgIihmdW5jdGlvbiAoZ2VuZXJhdG9yKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwi
dXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGdlbmVyYXRvci5AYXN5
bmNHZW5lcmF0b3JRdWV1ZUZpcnN0ID09PSBudWxsKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4g
bnVsbDtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRvci5A
YXN5bmNHZW5lcmF0b3JRdWV1ZUZpcnN0O1xuIiBcCiAgICAiICAgIGdlbmVyYXRvci5AYXN5bmNH
ZW5lcmF0b3JRdWV1ZUZpcnN0ID0gcmVzdWx0LkBhc3luY0dlbmVyYXRvclF1ZXVlSXRlbU5leHQ7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclF1
ZXVlRmlyc3QgPT09IG51bGwpXG4iIFwKICAgICIgICAgICAgIGdlbmVyYXRvci5AYXN5bmNHZW5l
cmF0b3JRdWV1ZUxhc3QgPSBudWxsO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIHJl
c3VsdDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNf
YXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvckRlcXVldWVDb2RlQ29uc3RydWN0
QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBp
bnQgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yRGVxdWV1ZUNvZGVMZW5n
dGggPSAyNTI7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5jR2VuZXJhdG9yUHJv
dG90eXBlQXN5bmNHZW5lcmF0b3JEZXF1ZXVlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5z
aWM7CmNvbnN0IGNoYXIqIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvckRl
cXVldWVDb2RlID0KICAgICIoZnVuY3Rpb24gKGdlbmVyYXRvcilcbiIgXAogICAgIntcbiIgXAog
ICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGNvbnN0IHF1
ZXVlID0gZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclF1ZXVlO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgQGFzc2VydCghQGFzeW5jR2VuZXJhdG9yUXVldWVJc0VtcHR5KGdlbmVyYXRvciksIFwi
QXN5bmMgZ2VuZXRhdG9yJ3MgUXVldWUgaXMgYW4gZW1wdHkgTGlzdC5cIik7XG4iIFwKICAgICIg
ICAgXG4iIFwKICAgICIgICAgcmV0dXJuIEBhc3luY0dlbmVyYXRvclF1ZXVlRGVxdWV1ZShnZW5l
cmF0b3IpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19hc3luY0dlbmVyYXRvclByb3RvdHlwZUlzRXhlY3V0aW9uU3RhdGVDb2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQg
c19hc3luY0dlbmVyYXRvclByb3RvdHlwZUlzRXhlY3V0aW9uU3RhdGVDb2RlTGVuZ3RoID0gMzI4
OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUlz
RXhlY3V0aW9uU3RhdGVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hh
ciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUlzRXhlY3V0aW9uU3RhdGVDb2RlID0KICAgICIo
ZnVuY3Rpb24gKGdlbmVyYXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJp
Y3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiAoZ2VuZXJhdG9yLkBnZW5lcmF0
b3JTdGF0ZSA+IDAgJiYgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPT09
IEBBc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb25Ob25lKVxuIiBcCiAgICAiICAgICAgICB8fCBn
ZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID09PSBAQXN5bmNHZW5lcmF0b3JTdGF0ZUV4ZWN1dGlu
Z1xuIiBcCiAgICAiICAgICAgICB8fCBnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yU3VzcGVuZFJl
YXNvbiA9PT0gQEFzeW5jR2VuZXJhdG9yU3VzcGVuZFJlYXNvbkF3YWl0O1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hc3luY0dlbmVyYXRvclByb3Rv
dHlwZUlzU3VzcGVuZFlpZWxkU3RhdGVDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hc3luY0dlbmVyYXRvclBy
b3RvdHlwZUlzU3VzcGVuZFlpZWxkU3RhdGVDb2RlTGVuZ3RoID0gMjQ2OwpzdGF0aWMgY29uc3Qg
SlNDOjpJbnRyaW5zaWMgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUlzU3VzcGVuZFlpZWxkU3Rh
dGVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hc3luY0dl
bmVyYXRvclByb3RvdHlwZUlzU3VzcGVuZFlpZWxkU3RhdGVDb2RlID0KICAgICIoZnVuY3Rpb24g
KGdlbmVyYXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiAoZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA+
IDAgJiYgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPT09IEBBc3luY0dl
bmVyYXRvclN1c3BlbmRSZWFzb25ZaWVsZClcbiIgXAogICAgIiAgICAgICAgfHwgZ2VuZXJhdG9y
LkBnZW5lcmF0b3JTdGF0ZSA9PT0gQEFzeW5jR2VuZXJhdG9yU3RhdGVTdXNwZW5kZWRZaWVsZDtc
biIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNH
ZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclJlamVjdENvZGVDb25zdHJ1Y3RBYmlsaXR5
ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2Fz
eW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JSZWplY3RDb2RlTGVuZ3RoID0gMzU4
OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFz
eW5jR2VuZXJhdG9yUmVqZWN0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0
IGNoYXIqIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclJlamVjdENvZGUg
PQogICAgIihmdW5jdGlvbiAoZ2VuZXJhdG9yLCBleGNlcHRpb24pXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBAYXNzZXJ0
KHR5cGVvZiBnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yU3VzcGVuZFJlYXNvbiA9PT0gXCJudW1i
ZXJcIiwgXCJHZW5lcmF0b3IgaXMgbm90IGFuIEFzeW5jR2VuZXJhdG9yIGluc3RhbmNlLlwiKTtc
biIgXAogICAgIlxuIiBcCiAgICAiICAgIGNvbnN0IHsgcHJvbWlzZUNhcGFiaWxpdHkgfSA9IEBh
c3luY0dlbmVyYXRvckRlcXVldWUoZ2VuZXJhdG9yKTtcbiIgXAogICAgIiAgICBwcm9taXNlQ2Fw
YWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGV4Y2VwdGlvbik7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICByZXR1cm4gQGFzeW5jR2VuZXJhdG9yUmVzdW1lTmV4dChnZW5lcmF0b3Ip
O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hc3lu
Y0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUmVzb2x2ZUNvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JSZXNvbHZlQ29kZUxlbmd0aCA9
IDM3NDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5
cGVBc3luY0dlbmVyYXRvclJlc29sdmVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsK
Y29uc3QgY2hhciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUmVzb2x2
ZUNvZGUgPQogICAgIihmdW5jdGlvbiAoZ2VuZXJhdG9yLCB2YWx1ZSwgZG9uZSlcbiIgXAogICAg
IntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
IEBhc3NlcnQodHlwZW9mIGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uID09
PSBcIm51bWJlclwiLCBcIkdlbmVyYXRvciBpcyBub3QgYW4gQXN5bmNHZW5lcmF0b3IgaW5zdGFu
Y2UuXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgY29uc3QgeyBwcm9taXNlQ2FwYWJpbGl0
eSB9ID0gQGFzeW5jR2VuZXJhdG9yRGVxdWV1ZShnZW5lcmF0b3IpO1xuIiBcCiAgICAiICAgIHBy
b21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHsgZG9uZSwgdmFsdWU6
IHZhbHVlIH0pO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIEBhc3luY0dlbmVyYXRv
clJlc3VtZU5leHQoZ2VuZXJhdG9yKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpD
b25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvcllp
ZWxkQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENv
bnN0cnVjdDsKY29uc3QgaW50IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRv
cllpZWxkQ29kZUxlbmd0aCA9IDQzNjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5
bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvcllpZWxkQ29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3lu
Y0dlbmVyYXRvcllpZWxkQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChnZW5lcmF0b3IsIHZhbHVlLCBy
ZXN1bWVNb2RlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JZaWVsZEF3YWl0ZWQo
cmVzdWx0KVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAgIiAgICAgICAgZ2VuZXJhdG9yLkBhc3lu
Y0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPSBAQXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uWWll
bGQ7XG4iIFwKICAgICIgICAgICAgIEBhc3luY0dlbmVyYXRvclJlc29sdmUoZ2VuZXJhdG9yLCBy
ZXN1bHQsIGZhbHNlKTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBn
ZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yU3VzcGVuZFJlYXNvbiA9IEBBc3luY0dlbmVyYXRvclN1
c3BlbmRSZWFzb25Bd2FpdDtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIEBhd2FpdFZhbHVlKGdl
bmVyYXRvciwgdmFsdWUsIGFzeW5jR2VuZXJhdG9yWWllbGRBd2FpdGVkKTtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIHJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25z
dCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUF3YWl0VmFs
dWVDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29u
c3RydWN0Owpjb25zdCBpbnQgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUF3YWl0VmFsdWVDb2Rl
TGVuZ3RoID0gMzgxOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hc3luY0dlbmVyYXRv
clByb3RvdHlwZUF3YWl0VmFsdWVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29u
c3QgY2hhciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUF3YWl0VmFsdWVDb2RlID0KICAgICIo
ZnVuY3Rpb24gKGdlbmVyYXRvciwgdmFsdWUsIG9uRnVsbGZpbGVkKVxuIiBcCiAgICAie1xuIiBc
CiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgY29uc3Qg
d3JhcHBlZFZhbHVlID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBQcm9taXNlKTtcbiIgXAogICAg
IlxuIiBcCiAgICAiICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSBmdW5jdGlvbiAocmVzdWx0KSB7IEBk
b0FzeW5jR2VuZXJhdG9yQm9keUNhbGwoZ2VuZXJhdG9yLCByZXN1bHQsIEBHZW5lcmF0b3JSZXN1
bWVNb2RlVGhyb3cpOyB9O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgd3JhcHBlZFZhbHVlLkBy
ZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHZhbHVlKTtcbiIgXAogICAgIiAgICB3cmFwcGVkVmFs
dWUuQHByb21pc2UuQHRoZW4ob25GdWxsZmlsZWQsIG9uUmVqZWN0ZWQpO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgcmV0dXJuIHdyYXBwZWRWYWx1ZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29u
c3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVEb0FzeW5j
R2VuZXJhdG9yQm9keUNhbGxDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hc3luY0dlbmVyYXRvclByb3RvdHlw
ZURvQXN5bmNHZW5lcmF0b3JCb2R5Q2FsbENvZGVMZW5ndGggPSAxNTIxOwpzdGF0aWMgY29uc3Qg
SlNDOjpJbnRyaW5zaWMgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZURvQXN5bmNHZW5lcmF0b3JC
b2R5Q2FsbENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2Fz
eW5jR2VuZXJhdG9yUHJvdG90eXBlRG9Bc3luY0dlbmVyYXRvckJvZHlDYWxsQ29kZSA9CiAgICAi
KGZ1bmN0aW9uIChnZW5lcmF0b3IsIHJlc3VtZVZhbHVlLCByZXN1bWVNb2RlKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAg
bGV0IHZhbHVlID0gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAgICBsZXQgc3RhdGUgPSBnZW5lcmF0
b3IuQGdlbmVyYXRvclN0YXRlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZ2VuZXJhdG9yLkBn
ZW5lcmF0b3JTdGF0ZSA9IEBBc3luY0dlbmVyYXRvclN0YXRlRXhlY3V0aW5nO1xuIiBcCiAgICAi
ICAgIGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uID0gQEFzeW5jR2VuZXJh
dG9yU3VzcGVuZFJlYXNvbk5vbmU7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB0cnkge1xuIiBc
CiAgICAiICAgICAgICB2YWx1ZSA9IGdlbmVyYXRvci5AZ2VuZXJhdG9yTmV4dC5AY2FsbChnZW5l
cmF0b3IuQGdlbmVyYXRvclRoaXMsIGdlbmVyYXRvciwgc3RhdGUsIHJlc3VtZVZhbHVlLCByZXN1
bWVNb2RlLCBnZW5lcmF0b3IuQGdlbmVyYXRvckZyYW1lKTtcbiIgXAogICAgIiAgICAgICAgaWYg
KGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPT09IEBBc3luY0dlbmVyYXRvclN0YXRlRXhlY3V0
aW5nKVxuIiBcCiAgICAiICAgICAgICAgICAgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9IEBB
c3luY0dlbmVyYXRvclN0YXRlQ29tcGxldGVkO1xuIiBcCiAgICAiICAgIH0gY2F0Y2ggKGVycm9y
KSB7XG4iIFwKICAgICIgICAgICAgIGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPSBAQXN5bmNH
ZW5lcmF0b3JTdGF0ZUNvbXBsZXRlZDtcbiIgXAogICAgIiAgICAgICAgZ2VuZXJhdG9yLkBhc3lu
Y0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPSBAQXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uTm9u
ZTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICByZXR1cm4gQGFzeW5jR2VuZXJhdG9yUmVq
ZWN0KGdlbmVyYXRvciwgZXJyb3IpO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIGlmIChnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yU3VzcGVuZFJlYXNvbiA9PT0gQEFz
eW5jR2VuZXJhdG9yU3VzcGVuZFJlYXNvbkF3YWl0KSB7XG4iIFwKICAgICIgICAgICAgIGNvbnN0
IG9uRnVsZmlsbGVkID0gZnVuY3Rpb24ocmVzdWx0KSB7IEBkb0FzeW5jR2VuZXJhdG9yQm9keUNh
bGwoZ2VuZXJhdG9yLCByZXN1bHQsIEBHZW5lcmF0b3JSZXN1bWVNb2RlTm9ybWFsKTsgfTtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgICAgICBAYXdhaXRWYWx1ZShnZW5lcmF0b3IsIHZhbHVlLCBv
bkZ1bGZpbGxlZCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIEB1bmRlZmlu
ZWQ7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGdlbmVyYXRv
ci5AYXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uID09PSBAQXN5bmNHZW5lcmF0b3JTdXNwZW5k
UmVhc29uWWllbGQpXG4iIFwKICAgICIgICAgICAgIHJldHVybiBAYXN5bmNHZW5lcmF0b3JZaWVs
ZChnZW5lcmF0b3IsIHZhbHVlLCByZXN1bWVNb2RlKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
IGlmIChnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID09PSBAQXN5bmNHZW5lcmF0b3JTdGF0ZUNv
bXBsZXRlZCkge1xuIiBcCiAgICAiICAgICAgICBnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yU3Vz
cGVuZFJlYXNvbiA9IEBBc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb25Ob25lO1xuIiBcCiAgICAi
ICAgICAgICByZXR1cm4gQGFzeW5jR2VuZXJhdG9yUmVzb2x2ZShnZW5lcmF0b3IsIHZhbHVlLCB0
cnVlKTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gQHVu
ZGVmaW5lZDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclJlc3VtZU5leHRDb2RlQ29u
c3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpj
b25zdCBpbnQgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUmVzdW1lTmV4
dENvZGVMZW5ndGggPSAyMTY0OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hc3luY0dl
bmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUmVzdW1lTmV4dENvZGVJbnRyaW5zaWMgPSBK
U0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5
bmNHZW5lcmF0b3JSZXN1bWVOZXh0Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChnZW5lcmF0b3IpXG4i
IFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICBAYXNzZXJ0KHR5cGVvZiBnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yU3VzcGVuZFJl
YXNvbiA9PT0gXCJudW1iZXJcIiwgXCJHZW5lcmF0b3IgaXMgbm90IGFuIEFzeW5jR2VuZXJhdG9y
IGluc3RhbmNlLlwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCBzdGF0ZSA9IGdlbmVy
YXRvci5AZ2VuZXJhdG9yU3RhdGU7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBAYXNzZXJ0KHN0
YXRlICE9PSBAQXN5bmNHZW5lcmF0b3JTdGF0ZUV4ZWN1dGluZywgXCJBc3luYyBnZW5lcmF0b3Ig
c2hvdWxkIG5vdCBiZSBpbiBleGVjdXRpbmcgc3RhdGVcIik7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICBpZiAoc3RhdGUgPT09IEBBc3luY0dlbmVyYXRvclN0YXRlQXdhaXRpbmdSZXR1cm4pXG4i
IFwKICAgICIgICAgICAgIHJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgaWYgKEBhc3luY0dlbmVyYXRvclF1ZXVlSXNFbXB0eShnZW5lcmF0b3IpKVxuIiBcCiAgICAi
ICAgICAgICByZXR1cm4gQHVuZGVmaW5lZDtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGNvbnN0
IG5leHQgPSBnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yUXVldWVGaXJzdDtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIGlmIChuZXh0LnJlc3VtZU1vZGUgIT09IEBHZW5lcmF0b3JSZXN1bWVNb2Rl
Tm9ybWFsKSB7XG4iIFwKICAgICIgICAgICAgIGlmIChzdGF0ZSA9PT0gQEFzeW5jR2VuZXJhdG9y
U3RhdGVTdXNwZW5kZWRTdGFydCkge1xuIiBcCiAgICAiICAgICAgICAgICAgZ2VuZXJhdG9yLkBn
ZW5lcmF0b3JTdGF0ZSA9IEBBc3luY0dlbmVyYXRvclN0YXRlQ29tcGxldGVkO1xuIiBcCiAgICAi
ICAgICAgICAgICAgc3RhdGUgPSBAQXN5bmNHZW5lcmF0b3JTdGF0ZUNvbXBsZXRlZDtcbiIgXAog
ICAgIiAgICAgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIGlmIChzdGF0ZSA9PT0g
QEFzeW5jR2VuZXJhdG9yU3RhdGVDb21wbGV0ZWQpIHtcbiIgXAogICAgIiAgICAgICAgICAgIGlm
IChuZXh0LnJlc3VtZU1vZGUgPT09IEBHZW5lcmF0b3JSZXN1bWVNb2RlUmV0dXJuKSB7XG4iIFwK
ICAgICIgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9IEBBc3luY0dl
bmVyYXRvclN0YXRlQXdhaXRpbmdSZXR1cm47XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAg
ICAgICAgICBjb25zdCBwcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShA
UHJvbWlzZSk7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgcHJvbWlzZUNhcGFiaWxpdHkuQHJl
c29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgbmV4dC52YWx1ZSk7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICAgICAgICAgICAgICBjb25zdCB0aHJvd2F3YXlDYXBhYmlsaXR5UHJvbWlzZSA9IHByb21p
c2VDYXBhYmlsaXR5LkBwcm9taXNlLkB0aGVuKFxuIiBcCiAgICAiICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiAocmVzdWx0KSB7IGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPSBAQXN5bmNH
ZW5lcmF0b3JTdGF0ZUNvbXBsZXRlZDsgQGFzeW5jR2VuZXJhdG9yUmVzb2x2ZShnZW5lcmF0b3Is
IHJlc3VsdCwgdHJ1ZSk7IH0sXG4iIFwKICAgICIgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IChlcnJvcikgeyBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID0gQEFzeW5jR2VuZXJhdG9yU3Rh
dGVDb21wbGV0ZWQ7IEBhc3luY0dlbmVyYXRvclJlamVjdChnZW5lcmF0b3IsIGVycm9yKTsgfSk7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgICAgICAgICB0aHJvd2F3YXlDYXBhYmlsaXR5
UHJvbWlzZS5AcHJvbWlzZUlzSGFuZGxlZCA9IHRydWU7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICAgICAgICAgICAgICByZXR1cm4gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAgICAgICAgICAgIH1c
biIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICAgICAgQGFzc2VydChuZXh0LnJlc3VtZU1vZGUg
PT09IEBHZW5lcmF0b3JSZXN1bWVNb2RlVGhyb3csIFwiQXN5bmMgZ2VuZXJhdG9yIGhhcyB3cm9u
ZyBtb2RlXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgICAgICByZXR1cm4gQGFzeW5j
R2VuZXJhdG9yUmVqZWN0KGdlbmVyYXRvciwgbmV4dC52YWx1ZSk7O1xuIiBcCiAgICAiICAgICAg
ICB9XG4iIFwKICAgICIgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gQEFzeW5jR2VuZXJhdG9yU3Rh
dGVDb21wbGV0ZWQpXG4iIFwKICAgICIgICAgICAgIHJldHVybiBAYXN5bmNHZW5lcmF0b3JSZXNv
bHZlKGdlbmVyYXRvciwgQHVuZGVmaW5lZCwgdHJ1ZSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICBAYXNzZXJ0KHN0YXRlID09PSBAQXN5bmNHZW5lcmF0b3JTdGF0ZVN1c3BlbmRlZFN0YXJ0IHx8
IEBpc1N1c3BlbmRZaWVsZFN0YXRlKGdlbmVyYXRvciksIFwiQXN5bmMgZ2VuZXJhdG9yIGhhcyB3
cm9uZyBzdGF0ZVwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIEBkb0FzeW5jR2VuZXJhdG9y
Qm9keUNhbGwoZ2VuZXJhdG9yLCBuZXh0LnZhbHVlLCBuZXh0LnJlc3VtZU1vZGUpO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgcmV0dXJuIEB1bmRlZmluZWQ7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5
bmNHZW5lcmF0b3JFbnF1ZXVlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFi
aWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5
cGVBc3luY0dlbmVyYXRvckVucXVldWVDb2RlTGVuZ3RoID0gNjcxOwpzdGF0aWMgY29uc3QgSlND
OjpJbnRyaW5zaWMgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yRW5xdWV1
ZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jR2Vu
ZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JFbnF1ZXVlQ29kZSA9CiAgICAiKGZ1bmN0aW9u
IChnZW5lcmF0b3IsIHZhbHVlLCByZXN1bWVNb2RlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAg
IFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiICAgIFxuIiBcCiAgICAiICAgIGNvbnN0IHByb21p
c2VDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBQcm9taXNlKTtcbiIgXAogICAg
IiAgICBpZiAoIUBpc09iamVjdChnZW5lcmF0b3IpIHx8IHR5cGVvZiBnZW5lcmF0b3IuQGFzeW5j
R2VuZXJhdG9yU3VzcGVuZFJlYXNvbiAhPT0gJ251bWJlcicpIHtcbiIgXAogICAgIiAgICAgICAg
cHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBuZXcgQFR5cGVFcnJv
cignfHRoaXN8IHNob3VsZCBiZSBhbiBhc3luYyBnZW5lcmF0b3InKSk7XG4iIFwKICAgICIgICAg
ICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTtcbiIgXAogICAgIiAgICB9XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICBAYXN5bmNHZW5lcmF0b3JRdWV1ZUVucXVldWUoZ2VuZXJh
dG9yLCB7cmVzdW1lTW9kZSwgdmFsdWUsIHByb21pc2VDYXBhYmlsaXR5LCBAYXN5bmNHZW5lcmF0
b3JRdWV1ZUl0ZW1OZXh0OiBudWxsLCBAYXN5bmNHZW5lcmF0b3JRdWV1ZUl0ZW1QcmV2aW91czog
bnVsbH0pO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKCFAaXNFeGVjdXRpb25TdGF0ZShn
ZW5lcmF0b3IpKVxuIiBcCiAgICAiICAgICAgICBAYXN5bmNHZW5lcmF0b3JSZXN1bWVOZXh0KGdl
bmVyYXRvcik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxp
dHkuQHByb21pc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0g
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5j
R2VuZXJhdG9yUHJvdG90eXBlTmV4dENvZGVMZW5ndGggPSAxMTg7CnN0YXRpYyBjb25zdCBKU0M6
OkludHJpbnNpYyBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlTmV4dENvZGVJbnRyaW5zaWMgPSBK
U0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlTmV4
dENvZGUgPQogICAgIihmdW5jdGlvbiAodmFsdWUpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAg
XCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gQGFzeW5jR2Vu
ZXJhdG9yRW5xdWV1ZSh0aGlzLCB2YWx1ZSwgQEdlbmVyYXRvclJlc3VtZU1vZGVOb3JtYWwpO1xu
IiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hc3luY0dl
bmVyYXRvclByb3RvdHlwZVJldHVybkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9yUHJv
dG90eXBlUmV0dXJuQ29kZUxlbmd0aCA9IDExODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVSZXR1cm5Db2RlSW50cmluc2ljID0gSlNDOjpOb0lu
dHJpbnNpYzsKY29uc3QgY2hhciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZVJldHVybkNvZGUg
PQogICAgIihmdW5jdGlvbiAodmFsdWUpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gQGFzeW5jR2VuZXJhdG9y
RW5xdWV1ZSh0aGlzLCB2YWx1ZSwgQEdlbmVyYXRvclJlc3VtZU1vZGVSZXR1cm4pO1xuIiBcCiAg
ICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hc3luY0dlbmVyYXRv
clByb3RvdHlwZVRocm93Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxp
dHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVU
aHJvd0NvZGVMZW5ndGggPSAxMjk7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5j
R2VuZXJhdG9yUHJvdG90eXBlVGhyb3dDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsK
Y29uc3QgY2hhciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZVRocm93Q29kZSA9CiAgICAiKGZ1
bmN0aW9uIChleGNlcHRpb24pXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0
XCI7XG4iIFwKICAgICIgICAgXG4iIFwKICAgICIgICAgcmV0dXJuIEBhc3luY0dlbmVyYXRvckVu
cXVldWUodGhpcywgZXhjZXB0aW9uLCBAR2VuZXJhdG9yUmVzdW1lTW9kZVRocm93KTtcbiIgXAog
ICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNJdGVyYXRv
clByb3RvdHlwZVN5bWJvbEFzeW5jSXRlcmF0b3JHZXR0ZXJDb2RlQ29uc3RydWN0QWJpbGl0eSA9
IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hc3lu
Y0l0ZXJhdG9yUHJvdG90eXBlU3ltYm9sQXN5bmNJdGVyYXRvckdldHRlckNvZGVMZW5ndGggPSA1
NDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNJdGVyYXRvclByb3RvdHlwZVN5
bWJvbEFzeW5jSXRlcmF0b3JHZXR0ZXJDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsK
Y29uc3QgY2hhciogc19hc3luY0l0ZXJhdG9yUHJvdG90eXBlU3ltYm9sQXN5bmNJdGVyYXRvckdl
dHRlckNvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwi
dXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIHRoaXM7XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2RhdGVQcm90b3R5
cGVUb0xvY2FsZVN0cmluZ0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2RhdGVQcm90b3R5cGVUb0xvY2FsZVN0
cmluZ0NvZGVMZW5ndGggPSAxMzc0OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19kYXRl
UHJvdG90eXBlVG9Mb2NhbGVTdHJpbmdDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsK
Y29uc3QgY2hhciogc19kYXRlUHJvdG90eXBlVG9Mb2NhbGVTdHJpbmdDb2RlID0KICAgICIoZnVu
Y3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIGZ1bmN0aW9uIHRvRGF0ZVRpbWVPcHRpb25zQW55QWxsKG9wdHMp
XG4iIFwKICAgICIgICAge1xuIiBcCiAgICAiICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAv
L1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIHZhciBvcHRpb25zO1xuIiBcCiAgICAiICAg
ICAgICBpZiAob3B0cyA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAgIiAgICAgICAgICAgIG9wdGlv
bnMgPSBudWxsO1xuIiBcCiAgICAiICAgICAgICBlbHNlIGlmIChvcHRzID09PSBudWxsKVxuIiBc
CiAgICAiICAgICAgICAgICAgQHRocm93VHlwZUVycm9yKFwibnVsbCBpcyBub3QgYW4gb2JqZWN0
XCIpO1xuIiBcCiAgICAiICAgICAgICBlbHNlXG4iIFwKICAgICIgICAgICAgICAgICBvcHRpb25z
ID0gQHRvT2JqZWN0KG9wdHMpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwK
ICAgICIgICAgICAgIHZhciBuZWVkc0RlZmF1bHRzID0gIW9wdGlvbnMgfHwgKFxuIiBcCiAgICAi
ICAgICAgICAgICAgb3B0aW9ucy53ZWVrZGF5ID09PSBAdW5kZWZpbmVkICYmXG4iIFwKICAgICIg
ICAgICAgICAgICBvcHRpb25zLnllYXIgPT09IEB1bmRlZmluZWQgJiZcbiIgXAogICAgIiAgICAg
ICAgICAgIG9wdGlvbnMubW9udGggPT09IEB1bmRlZmluZWQgJiZcbiIgXAogICAgIiAgICAgICAg
ICAgIG9wdGlvbnMuZGF5ID09PSBAdW5kZWZpbmVkICYmXG4iIFwKICAgICIgICAgICAgICAgICBv
cHRpb25zLmhvdXIgPT09IEB1bmRlZmluZWQgJiZcbiIgXAogICAgIiAgICAgICAgICAgIG9wdGlv
bnMubWludXRlID09PSBAdW5kZWZpbmVkICYmXG4iIFwKICAgICIgICAgICAgICAgICBvcHRpb25z
LnNlY29uZCA9PT0gQHVuZGVmaW5lZFxuIiBcCiAgICAiICAgICAgICApO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIGlmIChuZWVkc0RlZmF1bHRzKSB7
XG4iIFwKICAgICIgICAgICAgICAgICBvcHRpb25zID0gQE9iamVjdC5AY3JlYXRlKG9wdGlvbnMp
O1xuIiBcCiAgICAiICAgICAgICAgICAgb3B0aW9ucy55ZWFyID0gXCJudW1lcmljXCI7XG4iIFwK
ICAgICIgICAgICAgICAgICBvcHRpb25zLm1vbnRoID0gXCJudW1lcmljXCI7XG4iIFwKICAgICIg
ICAgICAgICAgICBvcHRpb25zLmRheSA9IFwibnVtZXJpY1wiO1xuIiBcCiAgICAiICAgICAgICAg
ICAgb3B0aW9ucy5ob3VyID0gXCJudW1lcmljXCI7XG4iIFwKICAgICIgICAgICAgICAgICBvcHRp
b25zLm1pbnV0ZSA9IFwibnVtZXJpY1wiO1xuIiBcCiAgICAiICAgICAgICAgICAgb3B0aW9ucy5z
ZWNvbmQgPSBcIm51bWVyaWNcIjtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIHJldHVybiBvcHRpb25zO1xuIiBcCiAg
ICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIHZhciB2YWx1ZSA9IEB0aGlzVGltZVZhbHVlLkBjYWxsKHRo
aXMpO1xuIiBcCiAgICAiICAgIGlmIChAaXNOYU4odmFsdWUpKVxuIiBcCiAgICAiICAgICAgICBy
ZXR1cm4gXCJJbnZhbGlkIERhdGVcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBvcHRp
b25zID0gdG9EYXRlVGltZU9wdGlvbnNBbnlBbGwoQGFyZ3VtZW50KDEpKTtcbiIgXAogICAgIiAg
ICB2YXIgbG9jYWxlcyA9IEBhcmd1bWVudCgwKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZh
ciBkYXRlRm9ybWF0ID0gbmV3IEBEYXRlVGltZUZvcm1hdChsb2NhbGVzLCBvcHRpb25zKTtcbiIg
XAogICAgIiAgICByZXR1cm4gZGF0ZUZvcm1hdC5mb3JtYXQodmFsdWUpO1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19kYXRlUHJvdG90eXBlVG9Mb2Nh
bGVEYXRlU3RyaW5nQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZGF0ZVByb3RvdHlwZVRvTG9jYWxlRGF0ZVN0
cmluZ0NvZGVMZW5ndGggPSAxMTE2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19kYXRl
UHJvdG90eXBlVG9Mb2NhbGVEYXRlU3RyaW5nQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5z
aWM7CmNvbnN0IGNoYXIqIHNfZGF0ZVByb3RvdHlwZVRvTG9jYWxlRGF0ZVN0cmluZ0NvZGUgPQog
ICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwi
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZnVuY3Rpb24gdG9EYXRlVGltZU9wdGlvbnNEYXRl
RGF0ZShvcHRzKVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAgIiAgICAgICAgLy9cbiIgXAogICAg
IiAgICAgICAgLy9cbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICB2YXIgb3B0aW9ucztcbiIg
XAogICAgIiAgICAgICAgaWYgKG9wdHMgPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAg
ICAgICBvcHRpb25zID0gbnVsbDtcbiIgXAogICAgIiAgICAgICAgZWxzZSBpZiAob3B0cyA9PT0g
bnVsbClcbiIgXAogICAgIiAgICAgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIm51bGwgaXMgbm90
IGFuIG9iamVjdFwiKTtcbiIgXAogICAgIiAgICAgICAgZWxzZVxuIiBcCiAgICAiICAgICAgICAg
ICAgb3B0aW9ucyA9IEB0b09iamVjdChvcHRzKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAg
ICAvL1xuIiBcCiAgICAiICAgICAgICB2YXIgbmVlZHNEZWZhdWx0cyA9ICFvcHRpb25zIHx8IChc
biIgXAogICAgIiAgICAgICAgICAgIG9wdGlvbnMud2Vla2RheSA9PT0gQHVuZGVmaW5lZCAmJlxu
IiBcCiAgICAiICAgICAgICAgICAgb3B0aW9ucy55ZWFyID09PSBAdW5kZWZpbmVkICYmXG4iIFwK
ICAgICIgICAgICAgICAgICBvcHRpb25zLm1vbnRoID09PSBAdW5kZWZpbmVkICYmXG4iIFwKICAg
ICIgICAgICAgICAgICBvcHRpb25zLmRheSA9PT0gQHVuZGVmaW5lZFxuIiBcCiAgICAiICAgICAg
ICApO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIGlm
IChuZWVkc0RlZmF1bHRzKSB7XG4iIFwKICAgICIgICAgICAgICAgICBvcHRpb25zID0gQE9iamVj
dC5AY3JlYXRlKG9wdGlvbnMpO1xuIiBcCiAgICAiICAgICAgICAgICAgb3B0aW9ucy55ZWFyID0g
XCJudW1lcmljXCI7XG4iIFwKICAgICIgICAgICAgICAgICBvcHRpb25zLm1vbnRoID0gXCJudW1l
cmljXCI7XG4iIFwKICAgICIgICAgICAgICAgICBvcHRpb25zLmRheSA9IFwibnVtZXJpY1wiO1xu
IiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIG9w
dGlvbnM7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAog
ICAgIiAgICAvL1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHZhbHVlID0gQHRoaXNUaW1l
VmFsdWUuQGNhbGwodGhpcyk7XG4iIFwKICAgICIgICAgaWYgKEBpc05hTih2YWx1ZSkpXG4iIFwK
ICAgICIgICAgICAgIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgdmFyIG9wdGlvbnMgPSB0b0RhdGVUaW1lT3B0aW9uc0RhdGVEYXRlKEBhcmd1bWVudCgx
KSk7XG4iIFwKICAgICIgICAgdmFyIGxvY2FsZXMgPSBAYXJndW1lbnQoMCk7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICB2YXIgZGF0ZUZvcm1hdCA9IG5ldyBARGF0ZVRpbWVGb3JtYXQobG9jYWxl
cywgb3B0aW9ucyk7XG4iIFwKICAgICIgICAgcmV0dXJuIGRhdGVGb3JtYXQuZm9ybWF0KHZhbHVl
KTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfZGF0
ZVByb3RvdHlwZVRvTG9jYWxlVGltZVN0cmluZ0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpD
b25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2RhdGVQcm90b3R5
cGVUb0xvY2FsZVRpbWVTdHJpbmdDb2RlTGVuZ3RoID0gMTA3ODsKc3RhdGljIGNvbnN0IEpTQzo6
SW50cmluc2ljIHNfZGF0ZVByb3RvdHlwZVRvTG9jYWxlVGltZVN0cmluZ0NvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2RhdGVQcm90b3R5cGVUb0xvY2FsZVRp
bWVTdHJpbmdDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIiAg
ICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGZ1bmN0aW9uIHRvRGF0
ZVRpbWVPcHRpb25zVGltZVRpbWUob3B0cylcbiIgXAogICAgIiAgICB7XG4iIFwKICAgICIgICAg
ICAgIC8vXG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAg
dmFyIG9wdGlvbnM7XG4iIFwKICAgICIgICAgICAgIGlmIChvcHRzID09PSBAdW5kZWZpbmVkKVxu
IiBcCiAgICAiICAgICAgICAgICAgb3B0aW9ucyA9IG51bGw7XG4iIFwKICAgICIgICAgICAgIGVs
c2UgaWYgKG9wdHMgPT09IG51bGwpXG4iIFwKICAgICIgICAgICAgICAgICBAdGhyb3dUeXBlRXJy
b3IoXCJudWxsIGlzIG5vdCBhbiBvYmplY3RcIik7XG4iIFwKICAgICIgICAgICAgIGVsc2VcbiIg
XAogICAgIiAgICAgICAgICAgIG9wdGlvbnMgPSBAdG9PYmplY3Qob3B0cyk7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICAgICAgLy9cbiIgXAogICAgIiAgICAgICAgdmFyIG5lZWRzRGVmYXVsdHMg
PSAhb3B0aW9ucyB8fCAoXG4iIFwKICAgICIgICAgICAgICAgICBvcHRpb25zLmhvdXIgPT09IEB1
bmRlZmluZWQgJiZcbiIgXAogICAgIiAgICAgICAgICAgIG9wdGlvbnMubWludXRlID09PSBAdW5k
ZWZpbmVkICYmXG4iIFwKICAgICIgICAgICAgICAgICBvcHRpb25zLnNlY29uZCA9PT0gQHVuZGVm
aW5lZFxuIiBcCiAgICAiICAgICAgICApO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIC8v
XG4iIFwKICAgICIgICAgICAgIGlmIChuZWVkc0RlZmF1bHRzKSB7XG4iIFwKICAgICIgICAgICAg
ICAgICBvcHRpb25zID0gQE9iamVjdC5AY3JlYXRlKG9wdGlvbnMpO1xuIiBcCiAgICAiICAgICAg
ICAgICAgb3B0aW9ucy5ob3VyID0gXCJudW1lcmljXCI7XG4iIFwKICAgICIgICAgICAgICAgICBv
cHRpb25zLm1pbnV0ZSA9IFwibnVtZXJpY1wiO1xuIiBcCiAgICAiICAgICAgICAgICAgb3B0aW9u
cy5zZWNvbmQgPSBcIm51bWVyaWNcIjtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgICAgIHJldHVybiBvcHRpb25zO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAg
IlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIHZhciB2YWx1ZSA9IEB0aGlzVGltZVZhbHVlLkBjYWxsKHRoaXMpO1xuIiBcCiAgICAiICAg
IGlmIChAaXNOYU4odmFsdWUpKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gXCJJbnZhbGlkIERh
dGVcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBvcHRpb25zID0gdG9EYXRlVGltZU9w
dGlvbnNUaW1lVGltZShAYXJndW1lbnQoMSkpO1xuIiBcCiAgICAiICAgIHZhciBsb2NhbGVzID0g
QGFyZ3VtZW50KDApO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGRhdGVGb3JtYXQgPSBu
ZXcgQERhdGVUaW1lRm9ybWF0KGxvY2FsZXMsIG9wdGlvbnMpO1xuIiBcCiAgICAiICAgIHJldHVy
biBkYXRlRm9ybWF0LmZvcm1hdCh2YWx1ZSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eSBzX2Z1bmN0aW9uUHJvdG90eXBlQ2FsbENvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX2Z1bmN0aW9uUHJvdG90eXBlQ2FsbENvZGVMZW5ndGggPSAyNDc7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX2Z1bmN0aW9uUHJvdG90eXBlQ2FsbENvZGVJbnRyaW5zaWMgPSBKU0M6
Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2Z1bmN0aW9uUHJvdG90eXBlQ2FsbENvZGUgPQog
ICAgIihmdW5jdGlvbiAodGhpc0FyZ3VtZW50KVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwi
dXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0IGFyZ3VtZW50VmFsdWVz
ID0gW107XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBmb3IgKGxldCBpID0gMTsgaSA8
IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiIgXAogICAgIiAgICAgICAgQHB1dEJ5VmFsRGlyZWN0
KGFyZ3VtZW50VmFsdWVzLCBpLTEsIGFyZ3VtZW50c1tpXSk7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICByZXR1cm4gdGhpcy5AYXBwbHkodGhpc0FyZ3VtZW50LCBhcmd1bWVudFZhbHVlcyk7XG4i
IFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2Z1bmN0aW9u
UHJvdG90eXBlQXBwbHlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19mdW5jdGlvblByb3RvdHlwZUFwcGx5Q29k
ZUxlbmd0aCA9IDExMzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfZnVuY3Rpb25Qcm90
b3R5cGVBcHBseUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBz
X2Z1bmN0aW9uUHJvdG90eXBlQXBwbHlDb2RlID0KICAgICIoZnVuY3Rpb24gKHRoaXNWYWx1ZSwg
YXJndW1lbnRWYWx1ZXMpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gdGhpcy5AYXBwbHkodGhpc1ZhbHVlLCBh
cmd1bWVudFZhbHVlcyk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0
QWJpbGl0eSBzX2Z1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2VDb2RlQ29uc3RydWN0
QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBp
bnQgc19mdW5jdGlvblByb3RvdHlwZVN5bWJvbEhhc0luc3RhbmNlQ29kZUxlbmd0aCA9IDI2MTsK
c3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfZnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJ
bnN0YW5jZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2Z1
bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFuY2VDb2RlID0KICAgICIoZnVuY3Rpb24gKHZh
bHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAi
XG4iIFwKICAgICIgICAgaWYgKHR5cGVvZiB0aGlzICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAg
ICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChAaXNC
b3VuZEZ1bmN0aW9uKHRoaXMpKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gQGhhc0luc3RhbmNl
Qm91bmRGdW5jdGlvbih0aGlzLCB2YWx1ZSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBsZXQg
dGFyZ2V0ID0gdGhpcy5wcm90b3R5cGU7XG4iIFwKICAgICIgICAgcmV0dXJuIEBpbnN0YW5jZU9m
KHZhbHVlLCB0YXJnZXQpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVj
dEFiaWxpdHkgc19mdW5jdGlvblByb3RvdHlwZUJpbmRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19mdW5jdGlv
blByb3RvdHlwZUJpbmRDb2RlTGVuZ3RoID0gMTAyMTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmlu
c2ljIHNfZnVuY3Rpb25Qcm90b3R5cGVCaW5kQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5z
aWM7CmNvbnN0IGNoYXIqIHNfZnVuY3Rpb25Qcm90b3R5cGVCaW5kQ29kZSA9CiAgICAiKGZ1bmN0
aW9uICh0aGlzVmFsdWUpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBsZXQgdGFyZ2V0ID0gdGhpcztcbiIgXAogICAgIiAg
ICBpZiAodHlwZW9mIHRhcmdldCAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAgICBA
dGhyb3dUeXBlRXJyb3IoXCJ8dGhpc3wgaXMgbm90IGEgZnVuY3Rpb24gaW5zaWRlIEZ1bmN0aW9u
LnByb3RvdHlwZS5iaW5kXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0IGFyZ3VtZW50
Q291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuIiBcCiAgICAiICAgIGxldCBib3VuZEFyZ3MgPSBu
dWxsO1xuIiBcCiAgICAiICAgIGxldCBudW1Cb3VuZEFyZ3MgPSAwO1xuIiBcCiAgICAiICAgIGlm
IChhcmd1bWVudENvdW50ID4gMSkge1xuIiBcCiAgICAiICAgICAgICBudW1Cb3VuZEFyZ3MgPSBh
cmd1bWVudENvdW50IC0gMTtcbiIgXAogICAgIiAgICAgICAgYm91bmRBcmdzID0gQG5ld0FycmF5
V2l0aFNpemUobnVtQm91bmRBcmdzKTtcbiIgXAogICAgIiAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBudW1Cb3VuZEFyZ3M7IGkrKylcbiIgXAogICAgIiAgICAgICAgICAgIEBwdXRCeVZhbERp
cmVjdChib3VuZEFyZ3MsIGksIGFyZ3VtZW50c1tpICsgMV0pO1xuIiBcCiAgICAiICAgIH1cbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIGxldCBsZW5ndGggPSAwO1xuIiBcCiAgICAiICAgIGlmIChA
aGFzT3duTGVuZ3RoUHJvcGVydHkodGFyZ2V0KSkge1xuIiBcCiAgICAiICAgICAgICBsZXQgbGVu
Z3RoVmFsdWUgPSB0YXJnZXQubGVuZ3RoO1xuIiBcCiAgICAiICAgICAgICBpZiAodHlwZW9mIGxl
bmd0aFZhbHVlID09PSBcIm51bWJlclwiKSB7XG4iIFwKICAgICIgICAgICAgICAgICBsZW5ndGhW
YWx1ZSA9IGxlbmd0aFZhbHVlIHwgMDtcbiIgXAogICAgIiAgICAgICAgICAgIC8vXG4iIFwKICAg
ICIgICAgICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgaWYgKGxlbmd0aFZhbHVlID4g
bnVtQm91bmRBcmdzKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxlbmd0aFZh
bHVlIC0gbnVtQm91bmRBcmdzO1xuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICIgICAgfVxu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0IG5hbWUgPSB0YXJnZXQubmFtZTtcbiIgXAogICAg
IiAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpXG4iIFwKICAgICIgICAgICAgIG5h
bWUgPSBcIlwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIEBtYWtlQm91bmRGdW5j
dGlvbih0YXJnZXQsIGFyZ3VtZW50c1swXSwgYm91bmRBcmdzLCBsZW5ndGgsIG5hbWUpO1xuIiBc
CiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19nZW5lcmF0b3JQ
cm90b3R5cGVHZW5lcmF0b3JSZXN1bWVDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19nZW5lcmF0b3JQcm90b3R5
cGVHZW5lcmF0b3JSZXN1bWVDb2RlTGVuZ3RoID0gNzI5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19nZW5lcmF0b3JQcm90b3R5cGVHZW5lcmF0b3JSZXN1bWVDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19nZW5lcmF0b3JQcm90b3R5cGVHZW5lcmF0
b3JSZXN1bWVDb2RlID0KICAgICIoZnVuY3Rpb24gKGdlbmVyYXRvciwgc3RhdGUsIGdlbmVyYXRv
clRoaXMsIHNlbnRWYWx1ZSwgdmFsdWUsIHJlc3VtZU1vZGUpXG4iIFwKICAgICJ7XG4iIFwKICAg
ICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgZG9uZSA9
IHN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVDb21wbGV0ZWQ7XG4iIFwKICAgICIgICAgaWYgKCFk
b25lKSB7XG4iIFwKICAgICIgICAgICAgIHRyeSB7XG4iIFwKICAgICIgICAgICAgICAgICBnZW5l
cmF0b3IuQGdlbmVyYXRvclN0YXRlID0gQEdlbmVyYXRvclN0YXRlRXhlY3V0aW5nO1xuIiBcCiAg
ICAiICAgICAgICAgICAgdmFsdWUgPSBnZW5lcmF0b3IuQGdlbmVyYXRvck5leHQuQGNhbGwoZ2Vu
ZXJhdG9yVGhpcywgZ2VuZXJhdG9yLCBzdGF0ZSwgc2VudFZhbHVlLCByZXN1bWVNb2RlLCBnZW5l
cmF0b3IuQGdlbmVyYXRvckZyYW1lKTtcbiIgXAogICAgIiAgICAgICAgICAgIGlmIChnZW5lcmF0
b3IuQGdlbmVyYXRvclN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVFeGVjdXRpbmcpIHtcbiIgXAog
ICAgIiAgICAgICAgICAgICAgICBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID0gQEdlbmVyYXRv
clN0YXRlQ29tcGxldGVkO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xu
IiBcCiAgICAiICAgICAgICAgICAgfVxuIiBcCiAgICAiICAgICAgICB9IGNhdGNoIChlcnJvcikg
e1xuIiBcCiAgICAiICAgICAgICAgICAgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9IEBHZW5l
cmF0b3JTdGF0ZUNvbXBsZXRlZDtcbiIgXAogICAgIiAgICAgICAgICAgIHRocm93IGVycm9yO1xu
IiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiICAgIHJldHVybiB7
IGRvbmUsIHZhbHVlIH07XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0
QWJpbGl0eSBzX2dlbmVyYXRvclByb3RvdHlwZU5leHRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19nZW5lcmF0
b3JQcm90b3R5cGVOZXh0Q29kZUxlbmd0aCA9IDM3OTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmlu
c2ljIHNfZ2VuZXJhdG9yUHJvdG90eXBlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmlu
c2ljOwpjb25zdCBjaGFyKiBzX2dlbmVyYXRvclByb3RvdHlwZU5leHRDb2RlID0KICAgICIoZnVu
Y3Rpb24gKHZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHN0YXRlID0gdGhpcy5AZ2VuZXJhdG9yU3RhdGU7
XG4iIFwKICAgICIgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPT0gXCJudW1iZXJcIilcbiIgXAogICAg
IiAgICAgICAgQHRocm93VHlwZUVycm9yKFwifHRoaXN8IHNob3VsZCBiZSBhIGdlbmVyYXRvclwi
KTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChzdGF0ZSA9PT0gQEdlbmVyYXRvclN0YXRl
RXhlY3V0aW5nKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJHZW5lcmF0b3Ig
aXMgZXhlY3V0aW5nXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIEBnZW5lcmF0
b3JSZXN1bWUodGhpcywgc3RhdGUsIHRoaXMuQGdlbmVyYXRvclRoaXMsIHZhbHVlLCBAdW5kZWZp
bmVkLCBAR2VuZXJhdG9yUmVzdW1lTW9kZU5vcm1hbCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2dlbmVyYXRvclByb3RvdHlwZVJldHVybkNvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX2dlbmVyYXRvclByb3RvdHlwZVJldHVybkNvZGVMZW5ndGggPSAzNzQ7CnN0
YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2dlbmVyYXRvclByb3RvdHlwZVJldHVybkNvZGVJ
bnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2dlbmVyYXRvclByb3Rv
dHlwZVJldHVybkNvZGUgPQogICAgIihmdW5jdGlvbiAodmFsdWUpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgc3Rh
dGUgPSB0aGlzLkBnZW5lcmF0b3JTdGF0ZTtcbiIgXAogICAgIiAgICBpZiAodHlwZW9mIHN0YXRl
ICE9PSBcIm51bWJlclwiKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJ8dGhp
c3wgc2hvdWxkIGJlIGEgZ2VuZXJhdG9yXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYg
KHN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVFeGVjdXRpbmcpXG4iIFwKICAgICIgICAgICAgIEB0
aHJvd1R5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBleGVjdXRpbmdcIik7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICByZXR1cm4gQGdlbmVyYXRvclJlc3VtZSh0aGlzLCBzdGF0ZSwgdGhpcy5AZ2Vu
ZXJhdG9yVGhpcywgdmFsdWUsIHZhbHVlLCBAR2VuZXJhdG9yUmVzdW1lTW9kZVJldHVybik7XG4i
IFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2dlbmVyYXRv
clByb3RvdHlwZVRocm93Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxp
dHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2VuZXJhdG9yUHJvdG90eXBlVGhyb3dD
b2RlTGVuZ3RoID0gNDU2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19nZW5lcmF0b3JQ
cm90b3R5cGVUaHJvd0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX2dlbmVyYXRvclByb3RvdHlwZVRocm93Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChleGNlcHRp
b24pXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICB2YXIgc3RhdGUgPSB0aGlzLkBnZW5lcmF0b3JTdGF0ZTtcbiIgXAogICAg
IiAgICBpZiAodHlwZW9mIHN0YXRlICE9PSBcIm51bWJlclwiKVxuIiBcCiAgICAiICAgICAgICBA
dGhyb3dUeXBlRXJyb3IoXCJ8dGhpc3wgc2hvdWxkIGJlIGEgZ2VuZXJhdG9yXCIpO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgaWYgKHN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVFeGVjdXRpbmcp
XG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBleGVjdXRp
bmdcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoc3RhdGUgPT09IEBHZW5lcmF0b3JT
dGF0ZUNvbXBsZXRlZClcbiIgXAogICAgIiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgcmV0dXJuIEBnZW5lcmF0b3JSZXN1bWUodGhpcywgc3RhdGUsIHRo
aXMuQGdlbmVyYXRvclRoaXMsIGV4Y2VwdGlvbiwgQHVuZGVmaW5lZCwgQEdlbmVyYXRvclJlc3Vt
ZU1vZGVUaHJvdyk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX2dsb2JhbE9iamVjdElzRmluaXRlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT2JqZWN0
SXNGaW5pdGVDb2RlTGVuZ3RoID0gMjE2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19n
bG9iYWxPYmplY3RJc0Zpbml0ZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX2dsb2JhbE9iamVjdElzRmluaXRlQ29kZSA9CiAgICAiKGZ1bmN0aW9uICh2YWx1
ZSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIHZhciBudW1iZXJWYWx1ZSA9IEB0b051bWJlcih2YWx1ZSk7XG4iIFwKICAg
ICIgICAgLy9cbiIgXAogICAgIiAgICBpZiAobnVtYmVyVmFsdWUgIT09IG51bWJlclZhbHVlKVxu
IiBcCiAgICAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iIFwKICAgICIgICAgcmV0dXJuIG51bWJl
clZhbHVlICE9PSBASW5maW5pdHkgJiYgbnVtYmVyVmFsdWUgIT09IC1ASW5maW5pdHk7XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2dsb2JhbE9iamVj
dElzTmFOQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5v
dENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT2JqZWN0SXNOYU5Db2RlTGVuZ3RoID0gMTIy
OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19nbG9iYWxPYmplY3RJc05hTkNvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2dsb2JhbE9iamVjdElzTmFO
Q29kZSA9CiAgICAiKGZ1bmN0aW9uICh2YWx1ZSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBc
InVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBudW1iZXJWYWx1ZSA9
IEB0b051bWJlcih2YWx1ZSk7XG4iIFwKICAgICIgICAgcmV0dXJuIG51bWJlclZhbHVlICE9PSBu
dW1iZXJWYWx1ZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmls
aXR5IHNfZ2xvYmFsT3BlcmF0aW9uc1RvSW50ZWdlckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlND
OjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2dsb2JhbE9w
ZXJhdGlvbnNUb0ludGVnZXJDb2RlTGVuZ3RoID0gMTY5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19nbG9iYWxPcGVyYXRpb25zVG9JbnRlZ2VyQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfZ2xvYmFsT3BlcmF0aW9uc1RvSW50ZWdlckNvZGUgPQog
ICAgIihmdW5jdGlvbiAodGFyZ2V0KVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0
cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIG51bWJlclZhbHVlID0gK3Rhcmdl
dDtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgaWYgKG51bWJlclZh
bHVlICE9PSBudW1iZXJWYWx1ZSlcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIDA7XG4iIFwKICAg
ICIgICAgcmV0dXJuIEB0cnVuYyhudW1iZXJWYWx1ZSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2dsb2JhbE9wZXJhdGlvbnNUb0xlbmd0aENvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX2dsb2JhbE9wZXJhdGlvbnNUb0xlbmd0aENvZGVMZW5ndGggPSAxNzc7CnN0
YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2dsb2JhbE9wZXJhdGlvbnNUb0xlbmd0aENvZGVJ
bnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2dsb2JhbE9wZXJhdGlv
bnNUb0xlbmd0aENvZGUgPQogICAgIihmdW5jdGlvbiAodGFyZ2V0KVxuIiBcCiAgICAie1xuIiBc
CiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGxl
bmd0aCA9IEB0b0ludGVnZXIodGFyZ2V0KTtcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAg
IHJldHVybiArKGxlbmd0aCA+IDAgPyAobGVuZ3RoIDwgQE1BWF9TQUZFX0lOVEVHRVIgPyBsZW5n
dGggOiBATUFYX1NBRkVfSU5URUdFUikgOiAwKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3Qg
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfZ2xvYmFsT3BlcmF0aW9uc0lzRGljdGlvbmFyeUNvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX2dsb2JhbE9wZXJhdGlvbnNJc0RpY3Rpb25hcnlDb2RlTGVuZ3RoID0gMTAw
OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19nbG9iYWxPcGVyYXRpb25zSXNEaWN0aW9u
YXJ5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfZ2xvYmFs
T3BlcmF0aW9uc0lzRGljdGlvbmFyeUNvZGUgPQogICAgIihmdW5jdGlvbiAob2JqZWN0KVxuIiBc
CiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0
XCI7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2ds
b2JhbE9wZXJhdGlvbnNTcGVjaWVzR2V0dGVyQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT3BlcmF0
aW9uc1NwZWNpZXNHZXR0ZXJDb2RlTGVuZ3RoID0gMzU7CnN0YXRpYyBjb25zdCBKU0M6OkludHJp
bnNpYyBzX2dsb2JhbE9wZXJhdGlvbnNTcGVjaWVzR2V0dGVyQ29kZUludHJpbnNpYyA9IEpTQzo6
Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfZ2xvYmFsT3BlcmF0aW9uc1NwZWNpZXNHZXR0ZXJD
b2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICByZXR1cm4g
dGhpcztcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNf
Z2xvYmFsT3BlcmF0aW9uc1NwZWNpZXNDb25zdHJ1Y3RvckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0g
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2dsb2Jh
bE9wZXJhdGlvbnNTcGVjaWVzQ29uc3RydWN0b3JDb2RlTGVuZ3RoID0gNTE2OwpzdGF0aWMgY29u
c3QgSlNDOjpJbnRyaW5zaWMgc19nbG9iYWxPcGVyYXRpb25zU3BlY2llc0NvbnN0cnVjdG9yQ29k
ZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfZ2xvYmFsT3BlcmF0
aW9uc1NwZWNpZXNDb25zdHJ1Y3RvckNvZGUgPQogICAgIihmdW5jdGlvbiAob2JqLCBkZWZhdWx0
Q29uc3RydWN0b3IpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgdmFyIGNvbnN0cnVjdG9yID0g
b2JqLmNvbnN0cnVjdG9yO1xuIiBcCiAgICAiICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gQHVuZGVm
aW5lZClcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25zdHJ1Y3RvcjtcbiIgXAog
ICAgIiAgICBpZiAoIUBpc09iamVjdChjb25zdHJ1Y3RvcikpXG4iIFwKICAgICIgICAgICAgIEB0
aHJvd1R5cGVFcnJvcihcInx0aGlzfC5jb25zdHJ1Y3RvciBpcyBub3QgYW4gT2JqZWN0IG9yIHVu
ZGVmaW5lZFwiKTtcbiIgXAogICAgIiAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLkBzcGVj
aWVzU3ltYm9sO1xuIiBcCiAgICAiICAgIGlmIChjb25zdHJ1Y3RvciA9PSBudWxsKVxuIiBcCiAg
ICAiICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuIiBcCiAgICAiICAgIGlmIChA
aXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpXG4iIFwKICAgICIgICAgICAgIHJldHVybiBjb25z
dHJ1Y3RvcjtcbiIgXAogICAgIiAgICBAdGhyb3dUeXBlRXJyb3IoXCJ8dGhpc3wuY29uc3RydWN0
b3JbU3ltYm9sLnNwZWNpZXNdIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19nbG9iYWxPcGVyYXRpb25zQ29w
eURhdGFQcm9wZXJ0aWVzQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxp
dHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT3BlcmF0aW9uc0NvcHlEYXRh
UHJvcGVydGllc0NvZGVMZW5ndGggPSA2NTM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X2dsb2JhbE9wZXJhdGlvbnNDb3B5RGF0YVByb3BlcnRpZXNDb2RlSW50cmluc2ljID0gSlNDOjpO
b0ludHJpbnNpYzsKY29uc3QgY2hhciogc19nbG9iYWxPcGVyYXRpb25zQ29weURhdGFQcm9wZXJ0
aWVzQ29kZSA9CiAgICAiKGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjbHVkZWRTZXQpXG4i
IFwKICAgICJ7XG4iIFwKICAgICIgICAgaWYgKCFAaXNPYmplY3QodGFyZ2V0KSlcbiIgXAogICAg
IiAgICAgICAgQHRocm93VHlwZUVycm9yKFwidGFyZ2V0IG5lZWRzIHRvIGJlIGFuIG9iamVjdFwi
KTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgXG4iIFwKICAg
ICIgICAgICAgIHJldHVybiB0YXJnZXQ7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBsZXQgZnJv
bSA9IEB0b09iamVjdChzb3VyY2UpO1xuIiBcCiAgICAiICAgIGxldCBrZXlzID0gQFJlZmxlY3Qu
QG93bktleXMoZnJvbSk7IFxuIiBcCiAgICAiICAgIGxldCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5n
dGg7XG4iIFwKICAgICIgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzTGVuZ3RoOyBpKyspIHtc
biIgXAogICAgIiAgICAgICAgbGV0IG5leHRLZXkgPSBrZXlzW2ldO1xuIiBcCiAgICAiICAgICAg
ICBpZiAoIWV4Y2x1ZGVkU2V0LkBoYXMobmV4dEtleSkpIHtcbiIgXAogICAgIiAgICAgICAgICAg
IGlmIChAcHJvcGVydHlJc0VudW1lcmFibGUoZnJvbSwgbmV4dEtleSkpIHtcbiIgXAogICAgIiAg
ICAgICAgICAgICAgICBsZXQgcHJvcFZhbHVlID0gZnJvbVtuZXh0S2V5XTtcbiIgXAogICAgIiAg
ICAgICAgICAgICAgICBAZGVmaW5lRW51bWVyYWJsZVdyaXRhYmxlQ29uZmlndXJhYmxlRGF0YVBy
b3BlcnR5KHRhcmdldCwgbmV4dEtleSwgcHJvcFZhbHVlKTtcbiIgXAogICAgIiAgICAgICAgICAg
IH1cbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIHJldHVybiB0YXJnZXQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX2dsb2JhbE9wZXJhdGlvbnNDb3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1
c2lvbnNDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19nbG9iYWxPcGVyYXRpb25zQ29weURhdGFQcm9wZXJ0aWVz
Tm9FeGNsdXNpb25zQ29kZUxlbmd0aCA9IDU3MjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfZ2xvYmFsT3BlcmF0aW9uc0NvcHlEYXRhUHJvcGVydGllc05vRXhjbHVzaW9uc0NvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2dsb2JhbE9wZXJhdGlvbnND
b3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1c2lvbnNDb2RlID0KICAgICIoZnVuY3Rpb24gKHRhcmdl
dCwgc291cmNlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIGlmICghQGlzT2JqZWN0KHRhcmdl
dCkpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcInRhcmdldCBuZWVkcyB0byBi
ZSBhbiBvYmplY3RcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoc291cmNlID09IG51
bGwpIFxuIiBcCiAgICAiICAgICAgICByZXR1cm4gdGFyZ2V0O1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgbGV0IGZyb20gPSBAdG9PYmplY3Qoc291cmNlKTtcbiIgXAogICAgIiAgICBsZXQga2V5
cyA9IEBSZWZsZWN0LkBvd25LZXlzKGZyb20pOyBcbiIgXAogICAgIiAgICBsZXQga2V5c0xlbmd0
aCA9IGtleXMubGVuZ3RoO1xuIiBcCiAgICAiICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5c0xl
bmd0aDsgaSsrKSB7XG4iIFwKICAgICIgICAgICAgIGxldCBuZXh0S2V5ID0ga2V5c1tpXTtcbiIg
XAogICAgIiAgICAgICAgaWYgKEBwcm9wZXJ0eUlzRW51bWVyYWJsZShmcm9tLCBuZXh0S2V5KSkg
e1xuIiBcCiAgICAiICAgICAgICAgICAgbGV0IHByb3BWYWx1ZSA9IGZyb21bbmV4dEtleV07XG4i
IFwKICAgICIgICAgICAgICAgICBAZGVmaW5lRW51bWVyYWJsZVdyaXRhYmxlQ29uZmlndXJhYmxl
RGF0YVByb3BlcnR5KHRhcmdldCwgbmV4dEtleSwgcHJvcFZhbHVlKTtcbiIgXAogICAgIiAgICAg
ICAgfVxuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiB0YXJn
ZXQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdFByb21pc2VGdWxmaWxsZWRDb2RlQ29uc3RydWN0
QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBp
bnQgc19pbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RQcm9taXNlRnVsZmlsbGVkQ29kZUxl
bmd0aCA9IDEwMzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfaW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uT2JqZWN0UHJvbWlzZUZ1bGZpbGxlZENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50
cmluc2ljOwpjb25zdCBjaGFyKiBzX2luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdFByb21p
c2VGdWxmaWxsZWRDb2RlID0KICAgICIoZnVuY3Rpb24gKHByb21pc2UsIHZhbHVlLCByZWFjdGlv
bnMpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKVxuIiBcCiAgICAiICAgICAgICByZXR1
cm47XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdFByb21pc2VSZWplY3RlZENvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX2luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdFByb21pc2VSZWplY3RlZENvZGVMZW5n
dGggPSAxMDQ7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2luc3BlY3Rvckluc3RydW1l
bnRhdGlvbk9iamVjdFByb21pc2VSZWplY3RlZENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmlu
c2ljOwpjb25zdCBjaGFyKiBzX2luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdFByb21pc2VS
ZWplY3RlZENvZGUgPQogICAgIihmdW5jdGlvbiAocHJvbWlzZSwgcmVhc29uLCByZWFjdGlvbnMp
XG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKVxuIiBcCiAgICAiICAgICAgICByZXR1cm47
XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2ludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9ySW50ZXJuYWxBbGxDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19pbnRlcm5h
bFByb21pc2VDb25zdHJ1Y3RvckludGVybmFsQWxsQ29kZUxlbmd0aCA9IDE2MDM7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX2ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9ySW50ZXJuYWxB
bGxDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19pbnRlcm5h
bFByb21pc2VDb25zdHJ1Y3RvckludGVybmFsQWxsQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChhcnJh
eSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAg
ICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAg
Ly9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICJcbiIgXAogICAg
IiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBwcm9taXNl
Q2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKTtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIHZhciB2YWx1ZXMgPSBbXTtcbiIgXAogICAgIiAgICB2YXIg
aW5kZXggPSAwO1xuIiBcCiAgICAiICAgIHZhciByZW1haW5pbmdFbGVtZW50c0NvdW50ID0gMDtc
biIgXAogICAgIlxuIiBcCiAgICAiICAgIGZ1bmN0aW9uIG5ld1Jlc29sdmVFbGVtZW50KGluZGV4
KVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAgIiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBm
YWxzZTtcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmd1bWVudClcbiIgXAog
ICAgIiAgICAgICAge1xuIiBcCiAgICAiICAgICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpXG4i
IFwKICAgICIgICAgICAgICAgICAgICAgcmV0dXJuIEB1bmRlZmluZWQ7XG4iIFwKICAgICIgICAg
ICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAg
ICAgICAgQHB1dEJ5VmFsRGlyZWN0KHZhbHVlcywgaW5kZXgsIGFyZ3VtZW50KTtcbiIgXAogICAg
IlxuIiBcCiAgICAiICAgICAgICAgICAgLS1yZW1haW5pbmdFbGVtZW50c0NvdW50O1xuIiBcCiAg
ICAiICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0VsZW1lbnRzQ291bnQgPT09IDApXG4iIFwKICAg
ICIgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxs
KEB1bmRlZmluZWQsIHZhbHVlcyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgICAgIHJl
dHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICIgICAgfVxuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgdHJ5IHtcbiIgXAogICAgIiAgICAgICAgaWYgKGFycmF5Lmxl
bmd0aCA9PT0gMClcbiIgXAogICAgIiAgICAgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZXNv
bHZlLkBjYWxsKEB1bmRlZmluZWQsIHZhbHVlcyk7XG4iIFwKICAgICIgICAgICAgIGVsc2Uge1xu
IiBcCiAgICAiICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBhcnJheS5s
ZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KSB7XG4iIFwKICAgICIgICAgICAgICAgICAg
ICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIEBw
dXRCeVZhbERpcmVjdCh2YWx1ZXMsIGluZGV4LCBAdW5kZWZpbmVkKTtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgICAgICAgICAgICAgIHZhciBuZXh0UHJvbWlzZUNhcGFiaWxpdHkgPSBAbmV3UHJv
bWlzZUNhcGFiaWxpdHkoQEludGVybmFsUHJvbWlzZSk7XG4iIFwKICAgICIgICAgICAgICAgICAg
ICAgbmV4dFByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHZhbHVl
KTtcbiIgXAogICAgIiAgICAgICAgICAgICAgICB2YXIgbmV4dFByb21pc2UgPSBuZXh0UHJvbWlz
ZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgICAgICAg
ICB2YXIgcmVzb2x2ZUVsZW1lbnQgPSBuZXdSZXNvbHZlRWxlbWVudChpbmRleCk7XG4iIFwKICAg
ICIgICAgICAgICAgICAgICAgKytyZW1haW5pbmdFbGVtZW50c0NvdW50O1xuIiBcCiAgICAiICAg
ICAgICAgICAgICAgIG5leHRQcm9taXNlLnRoZW4ocmVzb2x2ZUVsZW1lbnQsIHByb21pc2VDYXBh
YmlsaXR5LkByZWplY3QpO1xuIiBcCiAgICAiICAgICAgICAgICAgfVxuIiBcCiAgICAiICAgICAg
ICB9XG4iIFwKICAgICIgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiIgXAogICAgIiAgICAgICAgcHJv
bWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBlcnJvcik7XG4iIFwKICAg
ICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5
LkBwcm9taXNlO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxp
dHkgc19pdGVyYXRvckhlbHBlcnNQZXJmb3JtSXRlcmF0aW9uQ29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfaXRl
cmF0b3JIZWxwZXJzUGVyZm9ybUl0ZXJhdGlvbkNvZGVMZW5ndGggPSA0Njk7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX2l0ZXJhdG9ySGVscGVyc1BlcmZvcm1JdGVyYXRpb25Db2RlSW50
cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19pdGVyYXRvckhlbHBlcnNQ
ZXJmb3JtSXRlcmF0aW9uQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChpdGVyYWJsZSlcbiIgXAogICAg
IntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIiAgICAvL1xuIiBcCiAg
ICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCBy
ZXN1bHQgPSBbXTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCBpdGVyYXRvciA9IGl0ZXJh
YmxlLkBpdGVyYXRvclN5bWJvbCgpO1xuIiBcCiAgICAiICAgIGxldCBuZXh0ID0gaXRlcmF0b3Iu
bmV4dDtcbiIgXAogICAgIiAgICBsZXQgaXRlbTtcbiIgXAogICAgIiAgICBsZXQgaW5kZXggPSAw
O1xuIiBcCiAgICAiICAgIHdoaWxlICh0cnVlKSB7XG4iIFwKICAgICIgICAgICAgIGl0ZW0gPSBu
ZXh0LkBjYWxsKGl0ZXJhdG9yKTtcbiIgXAogICAgIiAgICAgICAgaWYgKCFAaXNPYmplY3QoaXRl
bSkpXG4iIFwKICAgICIgICAgICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJJdGVyYXRvciByZXN1
bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3RcIik7XG4iIFwKICAgICIgICAgICAgIGlmIChp
dGVtLmRvbmUpXG4iIFwKICAgICIgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAi
ICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBpbmRleCsrLCBpdGVtLnZhbHVlKTtcbiIg
XAogICAgIiAgICB9XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX2l0ZXJhdG9yUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JHZXR0ZXJDb2RlQ29uc3RydWN0
QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBp
bnQgc19pdGVyYXRvclByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yR2V0dGVyQ29kZUxlbmd0aCA9IDU0
OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19pdGVyYXRvclByb3RvdHlwZVN5bWJvbEl0
ZXJhdG9yR2V0dGVyQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIq
IHNfaXRlcmF0b3JQcm90b3R5cGVTeW1ib2xJdGVyYXRvckdldHRlckNvZGUgPQogICAgIihmdW5j
dGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgcmV0dXJuIHRoaXM7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0
IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTWFwSXRlcmF0b3JO
ZXh0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENv
bnN0cnVjdDsKY29uc3QgaW50IHNfbWFwSXRlcmF0b3JQcm90b3R5cGVNYXBJdGVyYXRvck5leHRD
b2RlTGVuZ3RoID0gNDYwOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tYXBJdGVyYXRv
clByb3RvdHlwZU1hcEl0ZXJhdG9yTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2lj
Owpjb25zdCBjaGFyKiBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTWFwSXRlcmF0b3JOZXh0Q29kZSA9
CiAgICAiKGZ1bmN0aW9uIChidWNrZXQsIGtpbmQpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAg
XCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIgICAgdmFyIHZhbHVlO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgYnVja2V0ID0gQG1hcEJ1Y2tldE5leHQoYnVja2V0KTtcbiIgXAogICAgIiAgICB0
aGlzLkBtYXBCdWNrZXQgPSBidWNrZXQ7XG4iIFwKICAgICIgICAgdmFyIGRvbmUgPSBidWNrZXQg
PT09IEBzZW50aW5lbE1hcEJ1Y2tldDtcbiIgXAogICAgIiAgICBpZiAoIWRvbmUpIHtcbiIgXAog
ICAgIiAgICAgICAgdmFyIGtleSA9IEBtYXBCdWNrZXRLZXkoYnVja2V0KTtcbiIgXAogICAgIiAg
ICAgICAgdmFsdWUgPSBAbWFwQnVja2V0VmFsdWUoYnVja2V0KTtcbiIgXAogICAgIiAgICAgICAg
aWYgKGtpbmQgPT09IEBpdGVyYXRpb25LaW5kS2V5VmFsdWUpXG4iIFwKICAgICIgICAgICAgICAg
ICB2YWx1ZSA9IFsga2V5LCB2YWx1ZSBdXG4iIFwKICAgICIgICAgICAgIGVsc2UgaWYgKGtpbmQg
PT09IEBpdGVyYXRpb25LaW5kS2V5KVxuIiBcCiAgICAiICAgICAgICAgICAgdmFsdWUgPSBrZXk7
XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiICAgIHJldHVybiB7IGRvbmUsIHZhbHVlIH07XG4i
IFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX21hcEl0ZXJh
dG9yUHJvdG90eXBlTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4
dENvZGVMZW5ndGggPSA0MDM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX21hcEl0ZXJh
dG9yUHJvdG90eXBlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGUgPQogICAgIihmdW5jdGlvbiAoKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgaWYgKHRoaXMgPT0gbnVsbClcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVy
cm9yKFwiJU1hcEl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5v
dCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBi
dWNrZXQgPSB0aGlzLkBtYXBCdWNrZXQ7XG4iIFwKICAgICIgICAgaWYgKGJ1Y2tldCA9PT0gQHVu
ZGVmaW5lZClcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiJU1hcEl0ZXJhdG9y
UHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIGEgTWFwIEl0ZXJhdG9yIGlu
c3RhbmNlXCIpO1xuIiBcCiAgICAiICAgIHJldHVybiBAbWFwSXRlcmF0b3JOZXh0LkBjYWxsKHRo
aXMsIGJ1Y2tldCwgdGhpcy5AbWFwSXRlcmF0b3JLaW5kKTtcbiIgXAogICAgIn0pXG4iIFwKOwoK
Y29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbWFwUHJvdG90eXBlQ3JlYXRlTWFwSXRlcmF0
b3JDb25zdHJ1Y3RvckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5Db25zdHJ1Y3Q7CmNvbnN0IGludCBzX21hcFByb3RvdHlwZUNyZWF0ZU1hcEl0ZXJhdG9y
Q29uc3RydWN0b3JDb2RlTGVuZ3RoID0gMjI1OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMg
c19tYXBQcm90b3R5cGVDcmVhdGVNYXBJdGVyYXRvckNvbnN0cnVjdG9yQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbWFwUHJvdG90eXBlQ3JlYXRlTWFwSXRl
cmF0b3JDb25zdHJ1Y3RvckNvZGUgPQogICAgIihmdW5jdGlvbiAoaXRlcmF0ZWRPYmplY3QsIGtp
bmQpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICBAYXNzZXJ0KEBpc01hcChpdGVyYXRlZE9iamVjdCkpO1xuIiBcCiAgICAi
ICAgIHRoaXMuQGl0ZXJhdGVkT2JqZWN0ID0gaXRlcmF0ZWRPYmplY3Q7XG4iIFwKICAgICIgICAg
dGhpcy5AbWFwSXRlcmF0b3JLaW5kID0ga2luZDtcbiIgXAogICAgIiAgICB0aGlzLkBtYXBCdWNr
ZXQgPSBAbWFwQnVja2V0SGVhZChpdGVyYXRlZE9iamVjdCk7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX21hcFByb3RvdHlwZVZhbHVlc0NvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX21hcFByb3RvdHlwZVZhbHVlc0NvZGVMZW5ndGggPSAyMDA7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX21hcFByb3RvdHlwZVZhbHVlc0NvZGVJbnRyaW5zaWMgPSBKU0M6
Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21hcFByb3RvdHlwZVZhbHVlc0NvZGUgPQogICAg
IihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKCFAaXNNYXAodGhpcykpXG4iIFwKICAgICIgICAg
ICAgIEB0aHJvd1R5cGVFcnJvcihcIk1hcC5wcm90b3R5cGUudmFsdWVzIHJlcXVpcmVzIHRoYXQg
fHRoaXN8IGJlIE1hcFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBuZXcgQGNy
ZWF0ZU1hcEl0ZXJhdG9yKHRoaXMsIEBpdGVyYXRpb25LaW5kVmFsdWUpO1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19tYXBQcm90b3R5cGVLZXlzQ29k
ZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dDsKY29uc3QgaW50IHNfbWFwUHJvdG90eXBlS2V5c0NvZGVMZW5ndGggPSAxOTY7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX21hcFByb3RvdHlwZUtleXNDb2RlSW50cmluc2ljID0gSlND
OjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19tYXBQcm90b3R5cGVLZXlzQ29kZSA9CiAgICAi
KGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoIUBpc01hcCh0aGlzKSlcbiIgXAogICAgIiAgICAg
ICAgQHRocm93VHlwZUVycm9yKFwiTWFwLnByb3RvdHlwZS5rZXlzIHJlcXVpcmVzIHRoYXQgfHRo
aXN8IGJlIE1hcFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBuZXcgQGNyZWF0
ZU1hcEl0ZXJhdG9yKHRoaXMsIEBpdGVyYXRpb25LaW5kS2V5KTtcbiIgXAogICAgIn0pXG4iIFwK
OwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbWFwUHJvdG90eXBlRW50cmllc0NvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX21hcFByb3RvdHlwZUVudHJpZXNDb2RlTGVuZ3RoID0gMjA0OwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc19tYXBQcm90b3R5cGVFbnRyaWVzQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbWFwUHJvdG90eXBlRW50cmllc0NvZGUg
PQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmlj
dFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKCFAaXNNYXAodGhpcykpXG4iIFwKICAg
ICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIk1hcC5wcm90b3R5cGUuZW50cmllcyByZXF1aXJl
cyB0aGF0IHx0aGlzfCBiZSBNYXBcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4g
bmV3IEBjcmVhdGVNYXBJdGVyYXRvcih0aGlzLCBAaXRlcmF0aW9uS2luZEtleVZhbHVlKTtcbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbWFwUHJvdG90
eXBlRm9yRWFjaENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX21hcFByb3RvdHlwZUZvckVhY2hDb2RlTGVuZ3Ro
ID0gNTQ3OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tYXBQcm90b3R5cGVGb3JFYWNo
Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbWFwUHJvdG90
eXBlRm9yRWFjaENvZGUgPQogICAgIihmdW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xu
IiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYg
KCFAaXNNYXAodGhpcykpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIk1hcCBv
cGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0XCIpO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiIgXAogICAgIiAgICAg
ICAgQHRocm93VHlwZUVycm9yKFwiTWFwLnByb3RvdHlwZS5mb3JFYWNoIGNhbGxiYWNrIG11c3Qg
YmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciB0aGlzQXJnID0g
QGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiICAgIHZhciBidWNrZXQgPSBAbWFwQnVja2V0SGVhZCh0
aGlzKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGRvIHtcbiIgXAogICAgIiAgICAgICAgYnVj
a2V0ID0gQG1hcEJ1Y2tldE5leHQoYnVja2V0KTtcbiIgXAogICAgIiAgICAgICAgaWYgKGJ1Y2tl
dCA9PT0gQHNlbnRpbmVsTWFwQnVja2V0KVxuIiBcCiAgICAiICAgICAgICAgICAgYnJlYWs7XG4i
IFwKICAgICIgICAgICAgIGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIEBtYXBCdWNrZXRWYWx1ZShi
dWNrZXQpLCBAbWFwQnVja2V0S2V5KGJ1Y2tldCksIHRoaXMpO1xuIiBcCiAgICAiICAgIH0gd2hp
bGUgKHRydWUpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxp
dHkgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVTZXRTdGF0ZVRvTWF4Q29kZUNvbnN0cnVjdEFiaWxp
dHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNf
bW9kdWxlTG9hZGVyUHJvdG90eXBlU2V0U3RhdGVUb01heENvZGVMZW5ndGggPSAxMjQ7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3RvdHlwZVNldFN0YXRlVG9N
YXhDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19tb2R1bGVM
b2FkZXJQcm90b3R5cGVTZXRTdGF0ZVRvTWF4Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChlbnRyeSwg
bmV3U3RhdGUpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGVudHJ5
LnN0YXRlIDwgbmV3U3RhdGUpXG4iIFwKICAgICIgICAgICAgIGVudHJ5LnN0YXRlID0gbmV3U3Rh
dGU7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX21v
ZHVsZUxvYWRlclByb3RvdHlwZU5ld1JlZ2lzdHJ5RW50cnlDb2RlQ29uc3RydWN0QWJpbGl0eSA9
IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19tb2R1
bGVMb2FkZXJQcm90b3R5cGVOZXdSZWdpc3RyeUVudHJ5Q29kZUxlbmd0aCA9IDY2MDsKc3RhdGlj
IGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTmV3UmVnaXN0cnlF
bnRyeUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVs
ZUxvYWRlclByb3RvdHlwZU5ld1JlZ2lzdHJ5RW50cnlDb2RlID0KICAgICIoZnVuY3Rpb24gKGtl
eSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAg
ICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAg
Ly9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIg
XAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAg
IiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAv
L1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBc
CiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAi
ICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8v
XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwK
ICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIg
ICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9c
biIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAog
ICAgIiAgICAvL1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICByZXR1cm4ge1xuIiBcCiAgICAiICAgICAgICBrZXk6IGtleSxc
biIgXAogICAgIiAgICAgICAgc3RhdGU6IEBNb2R1bGVGZXRjaCxcbiIgXAogICAgIiAgICAgICAg
ZmV0Y2g6IEB1bmRlZmluZWQsXG4iIFwKICAgICIgICAgICAgIGluc3RhbnRpYXRlOiBAdW5kZWZp
bmVkLFxuIiBcCiAgICAiICAgICAgICBzYXRpc2Z5OiBAdW5kZWZpbmVkLFxuIiBcCiAgICAiICAg
ICAgICBkZXBlbmRlbmNpZXM6IFtdLCAvL1xuIiBcCiAgICAiICAgICAgICBkZXBlbmRlbmNpZXNN
YXA6IEB1bmRlZmluZWQsXG4iIFwKICAgICIgICAgICAgIG1vZHVsZTogQHVuZGVmaW5lZCwgLy9c
biIgXAogICAgIiAgICAgICAgbGlua0Vycm9yOiBAdW5kZWZpbmVkLFxuIiBcCiAgICAiICAgICAg
ICBsaW5rU3VjY2VlZGVkOiB0cnVlLFxuIiBcCiAgICAiICAgICAgICBldmFsdWF0ZWQ6IGZhbHNl
LFxuIiBcCiAgICAiICAgIH07XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eSBzX21vZHVsZUxvYWRlclByb3RvdHlwZUVuc3VyZVJlZ2lzdGVyZWRDb2RlQ29u
c3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpj
b25zdCBpbnQgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVFbnN1cmVSZWdpc3RlcmVkQ29kZUxlbmd0
aCA9IDIxODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbW9kdWxlTG9hZGVyUHJvdG90
eXBlRW5zdXJlUmVnaXN0ZXJlZENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX21vZHVsZUxvYWRlclByb3RvdHlwZUVuc3VyZVJlZ2lzdGVyZWRDb2RlID0KICAg
ICIoZnVuY3Rpb24gKGtleSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAi
XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2
YXIgZW50cnkgPSB0aGlzLnJlZ2lzdHJ5LkBnZXQoa2V5KTtcbiIgXAogICAgIiAgICBpZiAoZW50
cnkpXG4iIFwKICAgICIgICAgICAgIHJldHVybiBlbnRyeTtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIGVudHJ5ID0gQG5ld1JlZ2lzdHJ5RW50cnkoa2V5KTtcbiIgXAogICAgIiAgICB0aGlzLnJl
Z2lzdHJ5LkBzZXQoa2V5LCBlbnRyeSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4g
ZW50cnk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X21vZHVsZUxvYWRlclByb3RvdHlwZUZvcmNlRnVsZmlsbFByb21pc2VDb2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQg
c19tb2R1bGVMb2FkZXJQcm90b3R5cGVGb3JjZUZ1bGZpbGxQcm9taXNlQ29kZUxlbmd0aCA9IDE0
ODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlRm9y
Y2VGdWxmaWxsUHJvbWlzZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX21vZHVsZUxvYWRlclByb3RvdHlwZUZvcmNlRnVsZmlsbFByb21pc2VDb2RlID0KICAg
ICIoZnVuY3Rpb24gKHByb21pc2UsIHZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwi
dXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHByb21pc2UuQHByb21p
c2VTdGF0ZSA9PT0gQHByb21pc2VTdGF0ZVBlbmRpbmcpXG4iIFwKICAgICIgICAgICAgIEBmdWxm
aWxsUHJvbWlzZShwcm9taXNlLCB2YWx1ZSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eSBzX21vZHVsZUxvYWRlclByb3RvdHlwZUZ1bGZpbGxGZXRjaENv
ZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3Q7CmNvbnN0IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlwZUZ1bGZpbGxGZXRjaENvZGVMZW5n
dGggPSAyNTA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3Rv
dHlwZUZ1bGZpbGxGZXRjaENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX21vZHVsZUxvYWRlclByb3RvdHlwZUZ1bGZpbGxGZXRjaENvZGUgPQogICAgIihmdW5j
dGlvbiAoZW50cnksIHNvdXJjZSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICAvL1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICBpZiAoIWVudHJ5LmZldGNoKVxuIiBcCiAgICAiICAgICAgICBlbnRyeS5mZXRjaCA9IEBuZXdQ
cm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKS5AcHJvbWlzZTtcbiIgXAogICAgIiAg
ICB0aGlzLmZvcmNlRnVsZmlsbFByb21pc2UoZW50cnkuZmV0Y2gsIHNvdXJjZSk7XG4iIFwKICAg
ICIgICAgQHNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJbnN0YW50aWF0ZSk7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX21vZHVsZUxvYWRlclBy
b3RvdHlwZVJlcXVlc3RGZXRjaENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlw
ZVJlcXVlc3RGZXRjaENvZGVMZW5ndGggPSA3Nzk7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNp
YyBzX21vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RGZXRjaENvZGVJbnRyaW5zaWMgPSBKU0M6
Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RG
ZXRjaENvZGUgPQogICAgIihmdW5jdGlvbiAoZW50cnksIHBhcmFtZXRlcnMsIGZldGNoZXIpXG4i
IFwKICAgICJ7XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIFwidXNl
IHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGVudHJ5LmZldGNoKSB7XG4i
IFwKICAgICIgICAgICAgIHZhciBjdXJyZW50QXR0ZW1wdCA9IGVudHJ5LmZldGNoO1xuIiBcCiAg
ICAiICAgICAgICBpZiAoZW50cnkuc3RhdGUgIT09IEBNb2R1bGVGZXRjaClcbiIgXAogICAgIiAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50QXR0ZW1wdDtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
ICAgICByZXR1cm4gY3VycmVudEF0dGVtcHQuY2F0Y2goKGVycm9yKSA9PiB7XG4iIFwKICAgICIg
ICAgICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgLy9cbiIgXAogICAgIiAgICAgICAg
ICAgIC8vXG4iIFwKICAgICIgICAgICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgLy9c
biIgXAogICAgIiAgICAgICAgICAgIGlmIChjdXJyZW50QXR0ZW1wdCA9PT0gZW50cnkuZmV0Y2gp
XG4iIFwKICAgICIgICAgICAgICAgICAgICAgZW50cnkuZmV0Y2ggPSBAdW5kZWZpbmVkO1xuIiBc
CiAgICAiICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEZldGNoKGVudHJ5LCBwYXJhbWV0
ZXJzLCBmZXRjaGVyKTtcbiIgXAogICAgIiAgICAgICAgfSk7XG4iIFwKICAgICIgICAgfVxuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8v
XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwK
ICAgICIgICAgdmFyIGZldGNoUHJvbWlzZSA9IHRoaXMuZmV0Y2goZW50cnkua2V5LCBwYXJhbWV0
ZXJzLCBmZXRjaGVyKS50aGVuKChzb3VyY2UpID0+IHtcbiIgXAogICAgIiAgICAgICAgQHNldFN0
YXRlVG9NYXgoZW50cnksIEBNb2R1bGVJbnN0YW50aWF0ZSk7XG4iIFwKICAgICIgICAgICAgIHJl
dHVybiBzb3VyY2U7XG4iIFwKICAgICIgICAgfSk7XG4iIFwKICAgICIgICAgZW50cnkuZmV0Y2gg
PSBmZXRjaFByb21pc2U7XG4iIFwKICAgICIgICAgcmV0dXJuIGZldGNoUHJvbWlzZTtcbiIgXAog
ICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbW9kdWxlTG9hZGVy
UHJvdG90eXBlUmVxdWVzdEluc3RhbnRpYXRlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfbW9kdWxlTG9hZGVy
UHJvdG90eXBlUmVxdWVzdEluc3RhbnRpYXRlQ29kZUxlbmd0aCA9IDEyNjM7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RJbnN0YW50aWF0
ZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVsZUxv
YWRlclByb3RvdHlwZVJlcXVlc3RJbnN0YW50aWF0ZUNvZGUgPQogICAgIihmdW5jdGlvbiAoZW50
cnksIHBhcmFtZXRlcnMsIGZldGNoZXIpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgLy9cbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgLy9cbiIgXAogICAgIiAgICBpZiAoZW50cnkuaW5zdGFudGlhdGUpXG4iIFwKICAgICIg
ICAgICAgIHJldHVybiBlbnRyeS5pbnN0YW50aWF0ZTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
IHZhciBpbnN0YW50aWF0ZVByb21pc2UgPSB0aGlzLnJlcXVlc3RGZXRjaChlbnRyeSwgcGFyYW1l
dGVycywgZmV0Y2hlcikudGhlbigoc291cmNlKSA9PiB7XG4iIFwKICAgICIgICAgICAgIC8vXG4i
IFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAg
IGlmIChlbnRyeS5pbnN0YW50aWF0ZSlcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiBlbnRy
eTtcbiIgXAogICAgIiAgICAgICAgZW50cnkuaW5zdGFudGlhdGUgPSBpbnN0YW50aWF0ZVByb21p
c2U7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgdmFyIGtleSA9IGVudHJ5LmtleTtcbiIg
XAogICAgIiAgICAgICAgdmFyIG1vZHVsZVJlY29yZCA9IHRoaXMucGFyc2VNb2R1bGUoa2V5LCBz
b3VyY2UpO1xuIiBcCiAgICAiICAgICAgICB2YXIgZGVwZW5kZW5jaWVzTWFwID0gbW9kdWxlUmVj
b3JkLmRlcGVuZGVuY2llc01hcDtcbiIgXAogICAgIiAgICAgICAgdmFyIHJlcXVlc3RlZE1vZHVs
ZXMgPSB0aGlzLnJlcXVlc3RlZE1vZHVsZXMobW9kdWxlUmVjb3JkKTtcbiIgXAogICAgIiAgICAg
ICAgdmFyIGRlcGVuZGVuY2llcyA9IEBuZXdBcnJheVdpdGhTaXplKHJlcXVlc3RlZE1vZHVsZXMu
bGVuZ3RoKTtcbiIgXAogICAgIiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlcXVl
c3RlZE1vZHVsZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiIgXAogICAgIiAgICAgICAg
ICAgIHZhciBkZXBOYW1lID0gcmVxdWVzdGVkTW9kdWxlc1tpXTtcbiIgXAogICAgIiAgICAgICAg
ICAgIHZhciBkZXBLZXkgPSB0aGlzLnJlc29sdmVTeW5jKGRlcE5hbWUsIGtleSwgZmV0Y2hlcik7
XG4iIFwKICAgICIgICAgICAgICAgICB2YXIgZGVwRW50cnkgPSB0aGlzLmVuc3VyZVJlZ2lzdGVy
ZWQoZGVwS2V5KTtcbiIgXAogICAgIiAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChkZXBlbmRl
bmNpZXMsIGksIGRlcEVudHJ5KTtcbiIgXAogICAgIiAgICAgICAgICAgIGRlcGVuZGVuY2llc01h
cC5Ac2V0KGRlcE5hbWUsIGRlcEVudHJ5KTtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAi
ICAgICAgICBlbnRyeS5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG4iIFwKICAgICIgICAg
ICAgIGVudHJ5LmRlcGVuZGVuY2llc01hcCA9IGRlcGVuZGVuY2llc01hcDtcbiIgXAogICAgIiAg
ICAgICAgZW50cnkubW9kdWxlID0gbW9kdWxlUmVjb3JkO1xuIiBcCiAgICAiICAgICAgICBAc2V0
U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVNhdGlzZnkpO1xuIiBcCiAgICAiICAgICAgICByZXR1
cm4gZW50cnk7XG4iIFwKICAgICIgICAgfSk7XG4iIFwKICAgICIgICAgcmV0dXJuIGluc3RhbnRp
YXRlUHJvbWlzZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmls
aXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdFNhdGlzZnlDb2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQg
c19tb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0U2F0aXNmeUNvZGVMZW5ndGggPSAxMjkxOwpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0
U2F0aXNmeUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21v
ZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RTYXRpc2Z5Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChl
bnRyeSwgcGFyYW1ldGVycywgZmV0Y2hlciwgdmlzaXRlZClcbiIgXAogICAgIntcbiIgXAogICAg
IiAgICAvL1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAg
ICJcbiIgXAogICAgIiAgICBpZiAoZW50cnkuc2F0aXNmeSlcbiIgXAogICAgIiAgICAgICAgcmV0
dXJuIGVudHJ5LnNhdGlzZnk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2aXNpdGVkLkBhZGQo
ZW50cnkpO1xuIiBcCiAgICAiICAgIHZhciBzYXRpc2Z5UHJvbWlzZSA9IHRoaXMucmVxdWVzdElu
c3RhbnRpYXRlKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKS50aGVuKChlbnRyeSkgPT4ge1xu
IiBcCiAgICAiICAgICAgICBpZiAoZW50cnkuc2F0aXNmeSlcbiIgXAogICAgIiAgICAgICAgICAg
IHJldHVybiBlbnRyeTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICB2YXIgZGVwTG9hZHMg
PSBAbmV3QXJyYXlXaXRoU2l6ZShlbnRyeS5kZXBlbmRlbmNpZXMubGVuZ3RoKTtcbiIgXAogICAg
IiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVudHJ5LmRlcGVuZGVuY2llcy5sZW5n
dGg7IGkgPCBsZW5ndGg7ICsraSkge1xuIiBcCiAgICAiICAgICAgICAgICAgdmFyIGRlcEVudHJ5
ID0gZW50cnkuZGVwZW5kZW5jaWVzW2ldO1xuIiBcCiAgICAiICAgICAgICAgICAgdmFyIHByb21p
c2U7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAg
ICAgICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgLy9cbiIgXAogICAgIiAgICAgICAgICAgIC8v
XG4iIFwKICAgICIgICAgICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgLy9cbiIgXAog
ICAgIiAgICAgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgICAgICAvL1xuIiBcCiAgICAiICAg
ICAgICAgICAgLy9cbiIgXAogICAgIiAgICAgICAgICAgIGlmICh2aXNpdGVkLkBoYXMoZGVwRW50
cnkpKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RJbnN0
YW50aWF0ZShkZXBFbnRyeSwgQHVuZGVmaW5lZCwgZmV0Y2hlcik7XG4iIFwKICAgICIgICAgICAg
ICAgICBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAvL1xuIiBcCiAgICAiICAgICAg
ICAgICAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RTYXRpc2Z5KGRlcEVudHJ5LCBAdW5kZWZp
bmVkLCBmZXRjaGVyLCB2aXNpdGVkKTtcbiIgXAogICAgIiAgICAgICAgICAgIH1cbiIgXAogICAg
IiAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChkZXBMb2FkcywgaSwgcHJvbWlzZSk7XG4iIFwK
ICAgICIgICAgICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICByZXR1cm4gQEludGVy
bmFsUHJvbWlzZS5pbnRlcm5hbEFsbChkZXBMb2FkcykudGhlbigoZW50cmllcykgPT4ge1xuIiBc
CiAgICAiICAgICAgICAgICAgaWYgKGVudHJ5LnNhdGlzZnkpXG4iIFwKICAgICIgICAgICAgICAg
ICAgICAgcmV0dXJuIGVudHJ5O1xuIiBcCiAgICAiICAgICAgICAgICAgQHNldFN0YXRlVG9NYXgo
ZW50cnksIEBNb2R1bGVMaW5rKTtcbiIgXAogICAgIiAgICAgICAgICAgIGVudHJ5LnNhdGlzZnkg
PSBzYXRpc2Z5UHJvbWlzZTtcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiIg
XAogICAgIiAgICAgICAgfSk7XG4iIFwKICAgICIgICAgfSk7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICByZXR1cm4gc2F0aXNmeVByb21pc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eSBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxpbmtDb2RlQ29uc3Ry
dWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25z
dCBpbnQgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVMaW5rQ29kZUxlbmd0aCA9IDYyNTsKc3RhdGlj
IGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTGlua0NvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVsZUxvYWRlclByb3Rv
dHlwZUxpbmtDb2RlID0KICAgICIoZnVuY3Rpb24gKGVudHJ5LCBmZXRjaGVyKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICJcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3Rc
IjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmICghZW50cnkubGlua1N1Y2NlZWRlZClcbiIg
XAogICAgIiAgICAgICAgdGhyb3cgZW50cnkubGlua0Vycm9yO1xuIiBcCiAgICAiICAgIGlmIChl
bnRyeS5zdGF0ZSA9PT0gQE1vZHVsZVJlYWR5KVxuIiBcCiAgICAiICAgICAgICByZXR1cm47XG4i
IFwKICAgICIgICAgQHNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVSZWFkeSk7XG4iIFwKICAg
ICJcbiIgXAogICAgIiAgICB0cnkge1xuIiBcCiAgICAiICAgICAgICAvL1xuIiBcCiAgICAiICAg
ICAgICAvL1xuIiBcCiAgICAiICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICB2YXIgZGVwZW5k
ZW5jaWVzID0gZW50cnkuZGVwZW5kZW5jaWVzO1xuIiBcCiAgICAiICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbGVuZ3RoID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKVxuIiBc
CiAgICAiICAgICAgICAgICAgdGhpcy5saW5rKGRlcGVuZGVuY2llc1tpXSwgZmV0Y2hlcik7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICAgICAgdGhpcy5tb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRp
YXRpb24oZW50cnkubW9kdWxlLCBlbnRyeS5rZXksIGZldGNoZXIpO1xuIiBcCiAgICAiICAgIH0g
Y2F0Y2ggKGVycm9yKSB7XG4iIFwKICAgICIgICAgICAgIGVudHJ5LmxpbmtTdWNjZWVkZWQgPSBm
YWxzZTtcbiIgXAogICAgIiAgICAgICAgZW50cnkubGlua0Vycm9yID0gZXJyb3I7XG4iIFwKICAg
ICIgICAgICAgIHRocm93IGVycm9yO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIn0pXG4iIFwK
OwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTW9k
dWxlRXZhbHVhdGlvbkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlwZU1vZHVs
ZUV2YWx1YXRpb25Db2RlTGVuZ3RoID0gMzU3OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMg
c19tb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVFdmFsdWF0aW9uQ29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTW9kdWxl
RXZhbHVhdGlvbkNvZGUgPQogICAgIihmdW5jdGlvbiAoZW50cnksIGZldGNoZXIpXG4iIFwKICAg
ICJ7XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIFwidXNlIHN0cmlj
dFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGVudHJ5LmV2YWx1YXRlZClcbiIgXAog
ICAgIiAgICAgICAgcmV0dXJuO1xuIiBcCiAgICAiICAgIGVudHJ5LmV2YWx1YXRlZCA9IHRydWU7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIHZhciBkZXBlbmRlbmNp
ZXMgPSBlbnRyeS5kZXBlbmRlbmNpZXM7XG4iIFwKICAgICIgICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSlcbiIgXAogICAgIiAg
ICAgICAgdGhpcy5tb2R1bGVFdmFsdWF0aW9uKGRlcGVuZGVuY2llc1tpXSwgZmV0Y2hlcik7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICB0aGlzLmV2YWx1YXRlKGVudHJ5LmtleSwgZW50cnkubW9k
dWxlLCBmZXRjaGVyKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlUHJvdmlkZUZldGNoQ29kZUNvbnN0cnVjdEFi
aWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50
IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlUHJvdmlkZUZldGNoQ29kZUxlbmd0aCA9IDIzMDsKc3Rh
dGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlUHJvdmlkZUZl
dGNoQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxl
TG9hZGVyUHJvdG90eXBlUHJvdmlkZUZldGNoQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChrZXksIHZh
bHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAi
XG4iIFwKICAgICIgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoZW50cnkuc3RhdGUgPiBATW9kdWxlRmV0Y2gpXG4i
IFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxy
ZWFkeSBmZXRjaGVkLlwiKTtcbiIgXAogICAgIiAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwg
dmFsdWUpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19tb2R1bGVMb2FkZXJQcm90b3R5cGVMb2FkTW9kdWxlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBK
U0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfbW9kdWxl
TG9hZGVyUHJvdG90eXBlTG9hZE1vZHVsZUNvZGVMZW5ndGggPSAzMjM7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxvYWRNb2R1bGVDb2RlSW50cmlu
c2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19tb2R1bGVMb2FkZXJQcm90b3R5
cGVMb2FkTW9kdWxlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBwYXJhbWV0ZXJz
LCBmZXRjaGVyKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8v
XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICByZXR1cm4gdGhpcy5yZXNvbHZlKG1vZHVs
ZU5hbWUsIEB1bmRlZmluZWQsIGZldGNoZXIpLnRoZW4oKGtleSkgPT4ge1xuIiBcCiAgICAiICAg
ICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0U2F0aXNmeSh0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5
KSwgcGFyYW1ldGVycywgZmV0Y2hlciwgbmV3IEBTZXQpO1xuIiBcCiAgICAiICAgIH0pLnRoZW4o
KGVudHJ5KSA9PiB7XG4iIFwKICAgICIgICAgICAgIHJldHVybiBlbnRyeS5rZXk7XG4iIFwKICAg
ICIgICAgfSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxpbmtBbmRFdmFsdWF0ZU1vZHVsZUNvZGVDb25zdHJ1
Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0
IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxpbmtBbmRFdmFsdWF0ZU1vZHVsZUNvZGVMZW5n
dGggPSAyODA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3Rv
dHlwZUxpbmtBbmRFdmFsdWF0ZU1vZHVsZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2lj
Owpjb25zdCBjaGFyKiBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxpbmtBbmRFdmFsdWF0ZU1vZHVs
ZUNvZGUgPQogICAgIihmdW5jdGlvbiAoa2V5LCBmZXRjaGVyKVxuIiBcCiAgICAie1xuIiBcCiAg
ICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGVudHJ5
ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7XG4iIFwKICAgICIgICAgaWYgKGVudHJ5LnN0
YXRlIDwgQE1vZHVsZUxpbmspXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIlJl
cXVlc3RlZCBtb2R1bGUgaXMgbm90IGluc3RhbnRpYXRlZCB5ZXQuXCIpO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgdGhpcy5saW5rKGVudHJ5LCBmZXRjaGVyKTtcbiIgXAogICAgIiAgICByZXR1
cm4gdGhpcy5tb2R1bGVFdmFsdWF0aW9uKGVudHJ5LCBmZXRjaGVyKTtcbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBl
TG9hZEFuZEV2YWx1YXRlTW9kdWxlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfbW9kdWxlTG9hZGVyUHJvdG90
eXBlTG9hZEFuZEV2YWx1YXRlTW9kdWxlQ29kZUxlbmd0aCA9IDIwOTsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTG9hZEFuZEV2YWx1YXRlTW9kdWxl
Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxlTG9h
ZGVyUHJvdG90eXBlTG9hZEFuZEV2YWx1YXRlTW9kdWxlQ29kZSA9CiAgICAiKGZ1bmN0aW9uICht
b2R1bGVOYW1lLCBwYXJhbWV0ZXJzLCBmZXRjaGVyKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAg
IFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIHRoaXMubG9h
ZE1vZHVsZShtb2R1bGVOYW1lLCBwYXJhbWV0ZXJzLCBmZXRjaGVyKS50aGVuKChrZXkpID0+IHtc
biIgXAogICAgIiAgICAgICAgcmV0dXJuIHRoaXMubGlua0FuZEV2YWx1YXRlTW9kdWxlKGtleSwg
ZmV0Y2hlcik7XG4iIFwKICAgICIgICAgfSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eSBzX21vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RJbXBvcnRN
b2R1bGVDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0SW1wb3J0
TW9kdWxlQ29kZUxlbmd0aCA9IDI5MzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbW9k
dWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdEltcG9ydE1vZHVsZUNvZGVJbnRyaW5zaWMgPSBKU0M6
Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RJ
bXBvcnRNb2R1bGVDb2RlID0KICAgICIoZnVuY3Rpb24gKGtleSwgcGFyYW1ldGVycywgZmV0Y2hl
cilcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIHJldHVybiB0aGlzLnJlcXVlc3RTYXRpc2Z5KHRoaXMuZW5zdXJlUmVnaXN0
ZXJlZChrZXkpLCBwYXJhbWV0ZXJzLCBmZXRjaGVyLCBuZXcgQFNldCkudGhlbigoZW50cnkpID0+
IHtcbiIgXAogICAgIiAgICAgICAgdGhpcy5saW5rQW5kRXZhbHVhdGVNb2R1bGUoZW50cnkua2V5
LCBmZXRjaGVyKTtcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlTmFtZXNw
YWNlT2JqZWN0KGVudHJ5Lm1vZHVsZSk7XG4iIFwKICAgICIgICAgfSk7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX251bWJlckNvbnN0cnVjdG9ySXNG
aW5pdGVDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19udW1iZXJDb25zdHJ1Y3RvcklzRmluaXRlQ29kZUxlbmd0
aCA9IDIxMTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbnVtYmVyQ29uc3RydWN0b3JJ
c0Zpbml0ZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX251
bWJlckNvbnN0cnVjdG9ySXNGaW5pdGVDb2RlID0KICAgICIoZnVuY3Rpb24gKHZhbHVlKVxuIiBc
CiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIilcbiIgXAogICAgIiAgICAgICAg
cmV0dXJuIGZhbHNlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBp
ZiAodmFsdWUgIT09IHZhbHVlKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gdmFsdWUgIT09IEBJbmZpbml0eSAmJiB2YWx1ZSAh
PT0gLUBJbmZpbml0eTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5IHNfbnVtYmVyQ29uc3RydWN0b3JJc05hTkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlND
OjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX251bWJlckNv
bnN0cnVjdG9ySXNOYU5Db2RlTGVuZ3RoID0gNzA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNp
YyBzX251bWJlckNvbnN0cnVjdG9ySXNOYU5Db2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc19udW1iZXJDb25zdHJ1Y3RvcklzTmFOQ29kZSA9CiAgICAiKGZ1bmN0
aW9uICh2YWx1ZSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX251bWJlclByb3RvdHlwZVRv
TG9jYWxlU3RyaW5nQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfbnVtYmVyUHJvdG90eXBlVG9Mb2NhbGVTdHJp
bmdDb2RlTGVuZ3RoID0gMjQ2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19udW1iZXJQ
cm90b3R5cGVUb0xvY2FsZVN0cmluZ0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpj
b25zdCBjaGFyKiBzX251bWJlclByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZSA9CiAgICAiKGZ1
bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgdmFyIG51bWJlciA9IEB0
aGlzTnVtYmVyVmFsdWUuQGNhbGwodGhpcyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAvL1xu
IiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgdmFyIG51bWJlckZvcm1hdCA9IG5ldyBATnVt
YmVyRm9ybWF0KEBhcmd1bWVudCgwKSwgQGFyZ3VtZW50KDEpKTtcbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIC8vXG4iIFwKICAgICIgICAgcmV0dXJuIG51bWJlckZvcm1hdC5mb3JtYXQobnVtYmVy
KTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfb2Jq
ZWN0Q29uc3RydWN0b3JFbnRyaWVzQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfb2JqZWN0Q29uc3RydWN0b3JF
bnRyaWVzQ29kZUxlbmd0aCA9IDQzMzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfb2Jq
ZWN0Q29uc3RydWN0b3JFbnRyaWVzQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNv
bnN0IGNoYXIqIHNfb2JqZWN0Q29uc3RydWN0b3JFbnRyaWVzQ29kZSA9CiAgICAiKGZ1bmN0aW9u
IChvYmplY3QpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICB2YXIgb2JqID0gQHRvT2JqZWN0KG9iamVjdCwgXCJPYmplY3Qu
ZW50cmllcyByZXF1aXJlcyB0aGF0IGlucHV0IHBhcmFtZXRlciBub3QgYmUgbnVsbCBvciB1bmRl
ZmluZWRcIik7XG4iIFwKICAgICIgICAgdmFyIG5hbWVzID0gQGdldE93blByb3BlcnR5TmFtZXMo
b2JqKTtcbiIgXAogICAgIiAgICB2YXIgcHJvcGVydGllcyA9IFtdO1xuIiBcCiAgICAiICAgIGZv
ciAodmFyIGkgPSAwLCBsZW5ndGggPSBuYW1lcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xu
IiBcCiAgICAiICAgICAgICB2YXIgbmFtZSA9IG5hbWVzW2ldO1xuIiBcCiAgICAiICAgICAgICBp
ZiAoQHByb3BlcnR5SXNFbnVtZXJhYmxlKG9iaiwgbmFtZSkpXG4iIFwKICAgICIgICAgICAgICAg
ICBwcm9wZXJ0aWVzLkBwdXNoKFtuYW1lLCBvYmpbbmFtZV1dKTtcbiIgXAogICAgIiAgICB9XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gcHJvcGVydGllcztcbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZUNvbnN0cnVjdG9yQWxs
Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdDsKY29uc3QgaW50IHNfcHJvbWlzZUNvbnN0cnVjdG9yQWxsQ29kZUxlbmd0aCA9IDEzODM7
CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VDb25zdHJ1Y3RvckFsbENvZGVJ
bnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VDb25zdHJ1
Y3RvckFsbENvZGUgPQogICAgIihmdW5jdGlvbiAoaXRlcmFibGUpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoIUBp
c09iamVjdCh0aGlzKSlcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwifHRoaXN8
IGlzIG5vdCBhIG9iamVjdFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBwcm9taXNl
Q2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIHZhciB2YWx1ZXMgPSBbXTtcbiIgXAogICAgIiAgICB2YXIgaW5kZXggPSAwO1xu
IiBcCiAgICAiICAgIHZhciByZW1haW5pbmdFbGVtZW50c0NvdW50ID0gMTtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIGZ1bmN0aW9uIG5ld1Jlc29sdmVFbGVtZW50KGluZGV4KVxuIiBcCiAgICAi
ICAgIHtcbiIgXAogICAgIiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiIgXAog
ICAgIiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIEByZXNvbHZlKGFyZ3VtZW50KVxuIiBcCiAgICAi
ICAgICAgICB7XG4iIFwKICAgICIgICAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZClcbiIgXAog
ICAgIiAgICAgICAgICAgICAgICByZXR1cm4gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAgICAgICAg
ICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgICAg
ICBAcHV0QnlWYWxEaXJlY3QodmFsdWVzLCBpbmRleCwgYXJndW1lbnQpO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgICAgICAgICAtLXJlbWFpbmluZ0VsZW1lbnRzQ291bnQ7XG4iIFwKICAgICIg
ICAgICAgICAgICBpZiAocmVtYWluaW5nRWxlbWVudHNDb3VudCA9PT0gMClcbiIgXAogICAgIiAg
ICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwoQHVu
ZGVmaW5lZCwgdmFsdWVzKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICAgICAgcmV0dXJu
IEB1bmRlZmluZWQ7XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIiAgICB9XG4iIFwKICAg
ICJcbiIgXAogICAgIiAgICB0cnkge1xuIiBcCiAgICAiICAgICAgICBmb3IgKHZhciB2YWx1ZSBv
ZiBpdGVyYWJsZSkge1xuIiBcCiAgICAiICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHZhbHVl
cywgaW5kZXgsIEB1bmRlZmluZWQpO1xuIiBcCiAgICAiICAgICAgICAgICAgdmFyIG5leHRQcm9t
aXNlID0gdGhpcy5yZXNvbHZlKHZhbHVlKTtcbiIgXAogICAgIiAgICAgICAgICAgIHZhciByZXNv
bHZlRWxlbWVudCA9IG5ld1Jlc29sdmVFbGVtZW50KGluZGV4KTtcbiIgXAogICAgIiAgICAgICAg
ICAgICsrcmVtYWluaW5nRWxlbWVudHNDb3VudDtcbiIgXAogICAgIiAgICAgICAgICAgIG5leHRQ
cm9taXNlLnRoZW4ocmVzb2x2ZUVsZW1lbnQsIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QpO1xu
IiBcCiAgICAiICAgICAgICAgICAgKytpbmRleDtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgICAgIC0tcmVtYWluaW5nRWxlbWVudHNDb3VudDtcbiIgXAogICAg
IiAgICAgICAgaWYgKHJlbWFpbmluZ0VsZW1lbnRzQ291bnQgPT09IDApXG4iIFwKICAgICIgICAg
ICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB2YWx1
ZXMpO1xuIiBcCiAgICAiICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4iIFwKICAgICIgICAgICAgIHBy
b21pc2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJyb3IpO1xuIiBcCiAg
ICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0
eS5AcHJvbWlzZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmls
aXR5IHNfcHJvbWlzZUNvbnN0cnVjdG9yUmFjZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpD
b25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VDb25z
dHJ1Y3RvclJhY2VDb2RlTGVuZ3RoID0gNTAzOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMg
c19wcm9taXNlQ29uc3RydWN0b3JSYWNlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7
CmNvbnN0IGNoYXIqIHNfcHJvbWlzZUNvbnN0cnVjdG9yUmFjZUNvZGUgPQogICAgIihmdW5jdGlv
biAoaXRlcmFibGUpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoIUBpc09iamVjdCh0aGlzKSlcbiIgXAogICAgIiAg
ICAgICAgQHRocm93VHlwZUVycm9yKFwifHRoaXN8IGlzIG5vdCBhIG9iamVjdFwiKTtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2Fw
YWJpbGl0eSh0aGlzKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHRyeSB7XG4iIFwKICAgICIg
ICAgICAgIGZvciAodmFyIHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4iIFwKICAgICIgICAgICAgICAg
ICB2YXIgbmV4dFByb21pc2UgPSB0aGlzLnJlc29sdmUodmFsdWUpO1xuIiBcCiAgICAiICAgICAg
ICAgICAgbmV4dFByb21pc2UudGhlbihwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSwgcHJvbWlz
ZUNhcGFiaWxpdHkuQHJlamVjdCk7XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIiAgICB9
IGNhdGNoIChlcnJvcikge1xuIiBcCiAgICAiICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVq
ZWN0LkBjYWxsKEB1bmRlZmluZWQsIGVycm9yKTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJc
biIgXAogICAgIiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3Byb21pc2VDb25zdHJ1
Y3RvclJlamVjdENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VDb25zdHJ1Y3RvclJlamVjdENvZGVM
ZW5ndGggPSAyNzY7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VDb25zdHJ1
Y3RvclJlamVjdENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBz
X3Byb21pc2VDb25zdHJ1Y3RvclJlamVjdENvZGUgPQogICAgIihmdW5jdGlvbiAocmVhc29uKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgaWYgKCFAaXNPYmplY3QodGhpcykpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5
cGVFcnJvcihcInx0aGlzfCBpcyBub3QgYSBvYmplY3RcIik7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxs
KEB1bmRlZmluZWQsIHJlYXNvbik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gcHJv
bWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6
Q29uc3RydWN0QWJpbGl0eSBzX3Byb21pc2VDb25zdHJ1Y3RvclJlc29sdmVDb2RlQ29uc3RydWN0
QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBp
bnQgc19wcm9taXNlQ29uc3RydWN0b3JSZXNvbHZlQ29kZUxlbmd0aCA9IDQyNjsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfcHJvbWlzZUNvbnN0cnVjdG9yUmVzb2x2ZUNvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VDb25zdHJ1Y3RvclJl
c29sdmVDb2RlID0KICAgICIoZnVuY3Rpb24gKHZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAi
ICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKCFAaXNPYmpl
Y3QodGhpcykpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcInx0aGlzfCBpcyBu
b3QgYSBvYmplY3RcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoQGlzUHJvbWlzZSh2
YWx1ZSkpIHtcbiIgXAogICAgIiAgICAgICAgdmFyIHZhbHVlQ29uc3RydWN0b3IgPSB2YWx1ZS5j
b25zdHJ1Y3RvcjtcbiIgXAogICAgIiAgICAgICAgaWYgKHZhbHVlQ29uc3RydWN0b3IgPT09IHRo
aXMpXG4iIFwKICAgICIgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4iIFwKICAgICIgICAgfVxu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gQG5ld1Byb21p
c2VDYXBhYmlsaXR5KHRoaXMpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcHJvbWlzZUNhcGFi
aWxpdHkuQHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgdmFsdWUpO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlT3BlcmF0aW9uc0lz
UHJvbWlzZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRpb25zSXNQcm9taXNlQ29kZUxl
bmd0aCA9IDEwMjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfcHJvbWlzZU9wZXJhdGlv
bnNJc1Byb21pc2VDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciog
c19wcm9taXNlT3BlcmF0aW9uc0lzUHJvbWlzZUNvZGUgPQogICAgIihmdW5jdGlvbiAocHJvbWlz
ZSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIHJldHVybiBAaXNPYmplY3QocHJvbWlzZSkgJiYgISFwcm9taXNlLkBwcm9t
aXNlU3RhdGU7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX3Byb21pc2VPcGVyYXRpb25zTmV3UHJvbWlzZVJlYWN0aW9uQ29kZUNvbnN0cnVjdEFiaWxp
dHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNf
cHJvbWlzZU9wZXJhdGlvbnNOZXdQcm9taXNlUmVhY3Rpb25Db2RlTGVuZ3RoID0gMTk1OwpzdGF0
aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19wcm9taXNlT3BlcmF0aW9uc05ld1Byb21pc2VSZWFj
dGlvbkNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21p
c2VPcGVyYXRpb25zTmV3UHJvbWlzZVJlYWN0aW9uQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYXBh
YmlsaXR5LCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiIgXAogICAgIntcbiIgXAogICAgIiAg
ICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiB7XG4iIFwK
ICAgICIgICAgICAgIEBjYXBhYmlsaXRpZXM6IGNhcGFiaWxpdHksXG4iIFwKICAgICIgICAgICAg
IEBvbkZ1bGZpbGxlZDogb25GdWxmaWxsZWQsXG4iIFwKICAgICIgICAgICAgIEBvblJlamVjdGVk
OiBvblJlamVjdGVkLFxuIiBcCiAgICAiICAgIH07XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0
IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3Byb21pc2VPcGVyYXRpb25zTmV3UHJvbWlzZUNhcGFi
aWxpdHlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19wcm9taXNlT3BlcmF0aW9uc05ld1Byb21pc2VDYXBhYmls
aXR5Q29kZUxlbmd0aCA9IDEwNDY7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21p
c2VPcGVyYXRpb25zTmV3UHJvbWlzZUNhcGFiaWxpdHlDb2RlSW50cmluc2ljID0gSlNDOjpOb0lu
dHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9taXNlT3BlcmF0aW9uc05ld1Byb21pc2VDYXBhYmls
aXR5Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChjb25zdHJ1Y3RvcilcbiIgXAogICAgIntcbiIgXAog
ICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmICghQGlz
Q29uc3RydWN0b3IoY29uc3RydWN0b3IpKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJy
b3IoXCJwcm9taXNlIGNhcGFiaWxpdHkgcmVxdWlyZXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvblwi
KTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IHtcbiIg
XAogICAgIiAgICAgICAgQHByb21pc2U6IEB1bmRlZmluZWQsXG4iIFwKICAgICIgICAgICAgIEBy
ZXNvbHZlOiBAdW5kZWZpbmVkLFxuIiBcCiAgICAiICAgICAgICBAcmVqZWN0OiBAdW5kZWZpbmVk
XG4iIFwKICAgICIgICAgfTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGZ1bmN0aW9uIEBleGVj
dXRvcihyZXNvbHZlLCByZWplY3QpXG4iIFwKICAgICIgICAge1xuIiBcCiAgICAiICAgICAgICBp
ZiAocHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUgIT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIg
ICAgICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJyZXNvbHZlIGZ1bmN0aW9uIGlzIGFscmVhZHkg
c2V0XCIpO1xuIiBcCiAgICAiICAgICAgICBpZiAocHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdCAh
PT0gQHVuZGVmaW5lZClcbiIgXAogICAgIiAgICAgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcInJl
amVjdCBmdW5jdGlvbiBpcyBhbHJlYWR5IHNldFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
ICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSA9IHJlc29sdmU7XG4iIFwKICAgICIgICAg
ICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QgPSByZWplY3Q7XG4iIFwKICAgICIgICAgfVxu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHByb21pc2UgPSBuZXcgY29uc3RydWN0b3IoQGV4
ZWN1dG9yKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmICh0eXBlb2YgcHJvbWlzZUNhcGFi
aWxpdHkuQHJlc29sdmUgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiAgICAgICAgQHRocm93
VHlwZUVycm9yKFwiZXhlY3V0b3IgZGlkIG5vdCB0YWtlIGEgcmVzb2x2ZSBmdW5jdGlvblwiKTtc
biIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmICh0eXBlb2YgcHJvbWlzZUNhcGFiaWxpdHkuQHJl
amVjdCAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3Io
XCJleGVjdXRvciBkaWQgbm90IHRha2UgYSByZWplY3QgZnVuY3Rpb25cIik7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZSA9IHByb21pc2U7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHk7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3Byb21pc2VPcGVyYXRpb25z
TmV3SGFuZGxlZFJlamVjdGVkUHJvbWlzZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRp
b25zTmV3SGFuZGxlZFJlamVjdGVkUHJvbWlzZUNvZGVMZW5ndGggPSAxMjQ7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VPcGVyYXRpb25zTmV3SGFuZGxlZFJlamVjdGVkUHJv
bWlzZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21p
c2VPcGVyYXRpb25zTmV3SGFuZGxlZFJlamVjdGVkUHJvbWlzZUNvZGUgPQogICAgIihmdW5jdGlv
biAoZXJyb3IpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgbGV0IHByb21pc2UgPSBAUHJvbWlz
ZS5AcmVqZWN0KGVycm9yKTtcbiIgXAogICAgIiAgICBwcm9taXNlLkBwcm9taXNlSXNIYW5kbGVk
ID0gdHJ1ZTtcbiIgXAogICAgIiAgICByZXR1cm4gcHJvbWlzZTtcbiIgXAogICAgIn0pXG4iIFwK
OwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZU9wZXJhdGlvbnNUcmlnZ2Vy
UHJvbWlzZVJlYWN0aW9uc0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRpb25zVHJpZ2dl
clByb21pc2VSZWFjdGlvbnNDb2RlTGVuZ3RoID0gMjE4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19wcm9taXNlT3BlcmF0aW9uc1RyaWdnZXJQcm9taXNlUmVhY3Rpb25zQ29kZUludHJp
bnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlzZU9wZXJhdGlvbnNU
cmlnZ2VyUHJvbWlzZVJlYWN0aW9uc0NvZGUgPQogICAgIihmdW5jdGlvbiAoc3RhdGUsIHJlYWN0
aW9ucywgYXJndW1lbnQpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IHJl
YWN0aW9ucy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KVxuIiBcCiAgICAiICAgICAg
ICBAZW5xdWV1ZUpvYihAcHJvbWlzZVJlYWN0aW9uSm9iLCBbc3RhdGUsIHJlYWN0aW9uc1tpbmRl
eF0sIGFyZ3VtZW50XSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0
QWJpbGl0eSBzX3Byb21pc2VPcGVyYXRpb25zUmVqZWN0UHJvbWlzZUNvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X3Byb21pc2VPcGVyYXRpb25zUmVqZWN0UHJvbWlzZUNvZGVMZW5ndGggPSA0ODk7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VPcGVyYXRpb25zUmVqZWN0UHJvbWlzZUNvZGVJ
bnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VPcGVyYXRp
b25zUmVqZWN0UHJvbWlzZUNvZGUgPQogICAgIihmdW5jdGlvbiAocHJvbWlzZSwgcmVhc29uKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgdmFyIHJlYWN0aW9ucyA9IHByb21pc2UuQHByb21pc2VSZWFjdGlvbnM7XG4iIFwK
ICAgICIgICAgcHJvbWlzZS5AcHJvbWlzZVJlc3VsdCA9IHJlYXNvbjtcbiIgXAogICAgIiAgICBw
cm9taXNlLkBwcm9taXNlUmVhY3Rpb25zID0gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAgICBwcm9t
aXNlLkBwcm9taXNlU3RhdGUgPSBAcHJvbWlzZVN0YXRlUmVqZWN0ZWQ7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICBASW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLnByb21pc2VSZWplY3RlZChwcm9t
aXNlLCByZWFzb24sIHJlYWN0aW9ucyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoIXBy
b21pc2UuQHByb21pc2VJc0hhbmRsZWQpXG4iIFwKICAgICIgICAgICAgIEBob3N0UHJvbWlzZVJl
amVjdGlvblRyYWNrZXIocHJvbWlzZSwgQHByb21pc2VSZWplY3Rpb25SZWplY3QpO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgQHRyaWdnZXJQcm9taXNlUmVhY3Rpb25zKEBwcm9taXNlU3RhdGVS
ZWplY3RlZCwgcmVhY3Rpb25zLCByZWFzb24pO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlT3BlcmF0aW9uc0Z1bGZpbGxQcm9taXNlQ29k
ZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dDsKY29uc3QgaW50IHNfcHJvbWlzZU9wZXJhdGlvbnNGdWxmaWxsUHJvbWlzZUNvZGVMZW5ndGgg
PSAzNzk7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VPcGVyYXRpb25zRnVs
ZmlsbFByb21pc2VDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciog
c19wcm9taXNlT3BlcmF0aW9uc0Z1bGZpbGxQcm9taXNlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChw
cm9taXNlLCB2YWx1ZSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciByZWFjdGlvbnMgPSBwcm9taXNlLkBwcm9taXNl
UmVhY3Rpb25zO1xuIiBcCiAgICAiICAgIHByb21pc2UuQHByb21pc2VSZXN1bHQgPSB2YWx1ZTtc
biIgXAogICAgIiAgICBwcm9taXNlLkBwcm9taXNlUmVhY3Rpb25zID0gQHVuZGVmaW5lZDtcbiIg
XAogICAgIiAgICBwcm9taXNlLkBwcm9taXNlU3RhdGUgPSBAcHJvbWlzZVN0YXRlRnVsZmlsbGVk
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgQEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5wcm9t
aXNlRnVsZmlsbGVkKHByb21pc2UsIHZhbHVlLCByZWFjdGlvbnMpO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgQHRyaWdnZXJQcm9taXNlUmVhY3Rpb25zKEBwcm9taXNlU3RhdGVGdWxmaWxsZWQs
IHJlYWN0aW9ucywgdmFsdWUpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0
cnVjdEFiaWxpdHkgc19wcm9taXNlT3BlcmF0aW9uc0NyZWF0ZVJlc29sdmluZ0Z1bmN0aW9uc0Nv
ZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRpb25zQ3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25z
Q29kZUxlbmd0aCA9IDEwMTE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VP
cGVyYXRpb25zQ3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25zQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlzZU9wZXJhdGlvbnNDcmVhdGVSZXNvbHZpbmdG
dW5jdGlvbnNDb2RlID0KICAgICIoZnVuY3Rpb24gKHByb21pc2UpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgYWxy
ZWFkeVJlc29sdmVkID0gZmFsc2U7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBmdW5jdGlvbiBA
cmVzb2x2ZShyZXNvbHV0aW9uKSB7XG4iIFwKICAgICIgICAgICAgIGlmIChhbHJlYWR5UmVzb2x2
ZWQpXG4iIFwKICAgICIgICAgICAgICAgICByZXR1cm4gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAg
ICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAg
ICBpZiAocmVzb2x1dGlvbiA9PT0gcHJvbWlzZSlcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVy
biBAcmVqZWN0UHJvbWlzZShwcm9taXNlLCBuZXcgQFR5cGVFcnJvcihcIlJlc29sdmUgYSBwcm9t
aXNlIHdpdGggaXRzZWxmXCIpKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICBpZiAoIUBp
c09iamVjdChyZXNvbHV0aW9uKSlcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiBAZnVsZmls
bFByb21pc2UocHJvbWlzZSwgcmVzb2x1dGlvbik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAg
ICAgdmFyIHRoZW47XG4iIFwKICAgICIgICAgICAgIHRyeSB7XG4iIFwKICAgICIgICAgICAgICAg
ICB0aGVuID0gcmVzb2x1dGlvbi50aGVuO1xuIiBcCiAgICAiICAgICAgICB9IGNhdGNoIChlcnJv
cikge1xuIiBcCiAgICAiICAgICAgICAgICAgcmV0dXJuIEByZWplY3RQcm9taXNlKHByb21pc2Us
IGVycm9yKTtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAg
IGlmICh0eXBlb2YgdGhlbiAhPT0gJ2Z1bmN0aW9uJylcbiIgXAogICAgIiAgICAgICAgICAgIHJl
dHVybiBAZnVsZmlsbFByb21pc2UocHJvbWlzZSwgcmVzb2x1dGlvbik7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICAgICAgQGVucXVldWVKb2IoQHByb21pc2VSZXNvbHZlVGhlbmFibGVKb2IsIFtw
cm9taXNlLCByZXNvbHV0aW9uLCB0aGVuXSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAg
cmV0dXJuIEB1bmRlZmluZWQ7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgZnVuY3Rpb24gQHJlamVjdChyZWFzb24pIHtcbiIgXAogICAgIiAgICAgICAgaWYgKGFscmVh
ZHlSZXNvbHZlZClcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiBAdW5kZWZpbmVkO1xuIiBc
CiAgICAiICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgICAgIHJldHVybiBAcmVqZWN0UHJvbWlzZShwcm9taXNlLCByZWFzb24pO1xuIiBcCiAg
ICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiB7IEByZXNvbHZlLCBAcmVq
ZWN0IH07XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X3Byb21pc2VPcGVyYXRpb25zUHJvbWlzZVJlYWN0aW9uSm9iQ29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfcHJv
bWlzZU9wZXJhdGlvbnNQcm9taXNlUmVhY3Rpb25Kb2JDb2RlTGVuZ3RoID0gNDM4OwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc19wcm9taXNlT3BlcmF0aW9uc1Byb21pc2VSZWFjdGlvbkpv
YkNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VP
cGVyYXRpb25zUHJvbWlzZVJlYWN0aW9uSm9iQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChzdGF0ZSwg
cmVhY3Rpb24sIGFyZ3VtZW50KVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmlj
dFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gcmVh
Y3Rpb24uQGNhcGFiaWxpdGllcztcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciByZXN1bHQ7
XG4iIFwKICAgICIgICAgdmFyIGhhbmRsZXIgPSAoc3RhdGUgPT09IEBwcm9taXNlU3RhdGVGdWxm
aWxsZWQpID8gcmVhY3Rpb24uQG9uRnVsZmlsbGVkOiByZWFjdGlvbi5Ab25SZWplY3RlZDtcbiIg
XAogICAgIiAgICB0cnkge1xuIiBcCiAgICAiICAgICAgICByZXN1bHQgPSBoYW5kbGVyKGFyZ3Vt
ZW50KTtcbiIgXAogICAgIiAgICB9IGNhdGNoIChlcnJvcikge1xuIiBcCiAgICAiICAgICAgICBy
ZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBlcnJvcik7
XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIHByb21pc2VD
YXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHJlc3VsdCk7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3Byb21pc2VPcGVyYXRpb25z
UHJvbWlzZVJlc29sdmVUaGVuYWJsZUpvYkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRp
b25zUHJvbWlzZVJlc29sdmVUaGVuYWJsZUpvYkNvZGVMZW5ndGggPSAzNDQ7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VPcGVyYXRpb25zUHJvbWlzZVJlc29sdmVUaGVuYWJs
ZUpvYkNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21p
c2VPcGVyYXRpb25zUHJvbWlzZVJlc29sdmVUaGVuYWJsZUpvYkNvZGUgPQogICAgIihmdW5jdGlv
biAocHJvbWlzZVRvUmVzb2x2ZSwgdGhlbmFibGUsIHRoZW4pXG4iIFwKICAgICJ7XG4iIFwKICAg
ICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgcmVzb2x2
aW5nRnVuY3Rpb25zID0gQGNyZWF0ZVJlc29sdmluZ0Z1bmN0aW9ucyhwcm9taXNlVG9SZXNvbHZl
KTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHRyeSB7XG4iIFwKICAgICIgICAgICAgIHJldHVy
biB0aGVuLkBjYWxsKHRoZW5hYmxlLCByZXNvbHZpbmdGdW5jdGlvbnMuQHJlc29sdmUsIHJlc29s
dmluZ0Z1bmN0aW9ucy5AcmVqZWN0KTtcbiIgXAogICAgIiAgICB9IGNhdGNoIChlcnJvcikge1xu
IiBcCiAgICAiICAgICAgICByZXR1cm4gcmVzb2x2aW5nRnVuY3Rpb25zLkByZWplY3QuQGNhbGwo
QHVuZGVmaW5lZCwgZXJyb3IpO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIn0pXG4iIFwKOwoK
Y29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZU9wZXJhdGlvbnNJbml0aWFsaXpl
UHJvbWlzZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRpb25zSW5pdGlhbGl6ZVByb21p
c2VDb2RlTGVuZ3RoID0gNTM4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19wcm9taXNl
T3BlcmF0aW9uc0luaXRpYWxpemVQcm9taXNlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5z
aWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlzZU9wZXJhdGlvbnNJbml0aWFsaXplUHJvbWlzZUNvZGUg
PQogICAgIihmdW5jdGlvbiAoZXhlY3V0b3IpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAodHlwZW9mIGV4ZWN1dG9y
ICE9PSAnZnVuY3Rpb24nKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJQcm9t
aXNlIGNvbnN0cnVjdG9yIHRha2VzIGEgZnVuY3Rpb24gYXJndW1lbnRcIik7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICB0aGlzLkBwcm9taXNlU3RhdGUgPSBAcHJvbWlzZVN0YXRlUGVuZGluZztc
biIgXAogICAgIiAgICB0aGlzLkBwcm9taXNlUmVhY3Rpb25zID0gW107XG4iIFwKICAgICIgICAg
dGhpcy5AcHJvbWlzZUlzSGFuZGxlZCA9IGZhbHNlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAg
dmFyIHJlc29sdmluZ0Z1bmN0aW9ucyA9IEBjcmVhdGVSZXNvbHZpbmdGdW5jdGlvbnModGhpcyk7
XG4iIFwKICAgICIgICAgdHJ5IHtcbiIgXAogICAgIiAgICAgICAgZXhlY3V0b3IocmVzb2x2aW5n
RnVuY3Rpb25zLkByZXNvbHZlLCByZXNvbHZpbmdGdW5jdGlvbnMuQHJlamVjdCk7XG4iIFwKICAg
ICIgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIHJlc29sdmlu
Z0Z1bmN0aW9ucy5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGVycm9yKTtcbiIgXAogICAgIiAg
ICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gdGhpcztcbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZVByb3RvdHlwZUNhdGNo
Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdDsKY29uc3QgaW50IHNfcHJvbWlzZVByb3RvdHlwZUNhdGNoQ29kZUxlbmd0aCA9IDkzOwpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19wcm9taXNlUHJvdG90eXBlQ2F0Y2hDb2RlSW50
cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9taXNlUHJvdG90eXBl
Q2F0Y2hDb2RlID0KICAgICIoZnVuY3Rpb24gKG9uUmVqZWN0ZWQpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4g
dGhpcy50aGVuKEB1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlUHJvdG90eXBlVGhlbkNvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX3Byb21pc2VQcm90b3R5cGVUaGVuQ29kZUxlbmd0aCA9IDEwNDU7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VQcm90b3R5cGVUaGVuQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlzZVByb3RvdHlwZVRoZW5Db2Rl
ID0KICAgICIoZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuIiBcCiAgICAie1xu
IiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYg
KCFAaXNQcm9taXNlKHRoaXMpKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJ8
dGhpc3wgaXMgbm90IGEgb2JqZWN0XCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGNv
bnN0cnVjdG9yID0gQHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBAUHJvbWlzZSk7XG4iIFwKICAg
ICJcbiIgXAogICAgIiAgICB2YXIgcmVzdWx0Q2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJp
bGl0eShjb25zdHJ1Y3Rvcik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAodHlwZW9mIG9u
RnVsZmlsbGVkICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgICAgICAgIG9uRnVsZmlsbGVk
ID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudDsgfTtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIGlmICh0eXBlb2Ygb25SZWplY3RlZCAhPT0gXCJmdW5jdGlvblwiKVxuIiBc
CiAgICAiICAgICAgICBvblJlamVjdGVkID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7IHRocm93IGFy
Z3VtZW50OyB9O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHJlYWN0aW9uID0gQG5ld1By
b21pc2VSZWFjdGlvbihyZXN1bHRDYXBhYmlsaXR5LCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgc3RhdGUgPSB0aGlzLkBwcm9taXNlU3RhdGU7
XG4iIFwKICAgICIgICAgaWYgKHN0YXRlID09PSBAcHJvbWlzZVN0YXRlUGVuZGluZylcbiIgXAog
ICAgIiAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHRoaXMuQHByb21pc2VSZWFjdGlvbnMsIHRoaXMu
QHByb21pc2VSZWFjdGlvbnMubGVuZ3RoLCByZWFjdGlvbik7XG4iIFwKICAgICIgICAgZWxzZSB7
XG4iIFwKICAgICIgICAgICAgIGlmIChzdGF0ZSA9PT0gQHByb21pc2VTdGF0ZVJlamVjdGVkICYm
ICF0aGlzLkBwcm9taXNlSXNIYW5kbGVkKVxuIiBcCiAgICAiICAgICAgICAgICAgQGhvc3RQcm9t
aXNlUmVqZWN0aW9uVHJhY2tlcih0aGlzLCBAcHJvbWlzZVJlamVjdGlvbkhhbmRsZSk7XG4iIFwK
ICAgICIgICAgICAgIEBlbnF1ZXVlSm9iKEBwcm9taXNlUmVhY3Rpb25Kb2IsIFtzdGF0ZSwgcmVh
Y3Rpb24sIHRoaXMuQHByb21pc2VSZXN1bHRdKTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJc
biIgXAogICAgIiAgICB0aGlzLkBwcm9taXNlSXNIYW5kbGVkID0gdHJ1ZTtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIHJldHVybiByZXN1bHRDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAi
fSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlUHJvdG90eXBl
RmluYWxseUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VQcm90b3R5cGVGaW5hbGx5Q29kZUxlbmd0
aCA9IDU4MjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfcHJvbWlzZVByb3RvdHlwZUZp
bmFsbHlDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9t
aXNlUHJvdG90eXBlRmluYWxseUNvZGUgPQogICAgIihmdW5jdGlvbiAob25GaW5hbGx5KVxuIiBc
CiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgaWYgKCFAaXNQcm9taXNlKHRoaXMpKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBl
RXJyb3IoXCJ8dGhpc3wgaXMgbm90IGEgUHJvbWlzZVwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gQHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBAUHJvbWlz
ZSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBAYXNzZXJ0KEBpc0NvbnN0cnVjdG9yKGNvbnN0
cnVjdG9yKSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBsZXQgdGhlbkZpbmFsbHk7XG4iIFwK
ICAgICIgICAgbGV0IGNhdGNoRmluYWxseTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmICh0
eXBlb2Ygb25GaW5hbGx5ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiIgXAogICAgIiAgICAgICAgdGhl
bkZpbmFsbHkgPSBvbkZpbmFsbHk7XG4iIFwKICAgICIgICAgICAgIGNhdGNoRmluYWxseSA9IG9u
RmluYWxseTtcbiIgXAogICAgIiAgICB9IGVsc2Uge1xuIiBcCiAgICAiICAgICAgICB0aGVuRmlu
YWxseSA9IEBnZXRUaGVuRmluYWxseShvbkZpbmFsbHksIGNvbnN0cnVjdG9yKTtcbiIgXAogICAg
IiAgICAgICAgY2F0Y2hGaW5hbGx5ID0gQGdldENhdGNoRmluYWxseShvbkZpbmFsbHksIGNvbnN0
cnVjdG9yKTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4g
dGhpcy50aGVuKHRoZW5GaW5hbGx5LCBjYXRjaEZpbmFsbHkpO1xuIiBcCiAgICAifSlcbiIgXAo7
Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlUHJvdG90eXBlR2V0VGhlbkZp
bmFsbHlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19wcm9taXNlUHJvdG90eXBlR2V0VGhlbkZpbmFsbHlDb2Rl
TGVuZ3RoID0gNTE0OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19wcm9taXNlUHJvdG90
eXBlR2V0VGhlbkZpbmFsbHlDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3Qg
Y2hhciogc19wcm9taXNlUHJvdG90eXBlR2V0VGhlbkZpbmFsbHlDb2RlID0KICAgICIoZnVuY3Rp
b24gKG9uRmluYWxseSwgY29uc3RydWN0b3IpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gZnVuY3Rpb24odmFs
dWUpXG4iIFwKICAgICIgICAge1xuIiBcCiAgICAiICAgICAgICBAYXNzZXJ0KHR5cGVvZiBvbkZp
bmFsbHkgPT09IFwiZnVuY3Rpb25cIik7XG4iIFwKICAgICIgICAgICAgIGNvbnN0IHJlc3VsdCA9
IG9uRmluYWxseSgpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIEBhc3NlcnQoQGlzQ29u
c3RydWN0b3IoY29uc3RydWN0b3IpKTtcbiIgXAogICAgIiAgICAgICAgY29uc3QgcmVzdWx0Q2Fw
YWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShjb25zdHJ1Y3Rvcik7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICAgICAgcmVzdWx0Q2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZp
bmVkLCByZXN1bHQpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIGNvbnN0IHByb21pc2Ug
PSByZXN1bHRDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAiICAgICAgICBjb25zdCB2YWx1
ZVRodW5rID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH07XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbih2YWx1ZVRodW5rKTtcbiIgXAogICAgIiAg
ICB9XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3By
b21pc2VQcm90b3R5cGVHZXRDYXRjaEZpbmFsbHlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6
Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19wcm9taXNlUHJv
dG90eXBlR2V0Q2F0Y2hGaW5hbGx5Q29kZUxlbmd0aCA9IDUwOTsKc3RhdGljIGNvbnN0IEpTQzo6
SW50cmluc2ljIHNfcHJvbWlzZVByb3RvdHlwZUdldENhdGNoRmluYWxseUNvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VQcm90b3R5cGVHZXRDYXRj
aEZpbmFsbHlDb2RlID0KICAgICIoZnVuY3Rpb24gKG9uRmluYWxseSwgY29uc3RydWN0b3IpXG4i
IFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICByZXR1cm4gZnVuY3Rpb24ocmVhc29uKVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAg
IiAgICAgICAgQGFzc2VydCh0eXBlb2Ygb25GaW5hbGx5ID09PSBcImZ1bmN0aW9uXCIpO1xuIiBc
CiAgICAiICAgICAgICBjb25zdCByZXN1bHQgPSBvbkZpbmFsbHkoKTtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgICAgICBAYXNzZXJ0KEBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSk7XG4iIFwK
ICAgICIgICAgICAgIGNvbnN0IHJlc3VsdENhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxp
dHkoY29uc3RydWN0b3IpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIHJlc3VsdENhcGFi
aWxpdHkuQHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgcmVzdWx0KTtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgICAgICBjb25zdCBwcm9taXNlID0gcmVzdWx0Q2FwYWJpbGl0eS5AcHJvbWlzZTtc
biIgXAogICAgIiAgICAgICAgY29uc3QgdGhyb3dlciA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgcmVh
c29uOyB9O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4o
dGhyb3dlcik7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6
OkNvbnN0cnVjdEFiaWxpdHkgc19yZWZsZWN0T2JqZWN0QXBwbHlDb2RlQ29uc3RydWN0QWJpbGl0
eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19y
ZWZsZWN0T2JqZWN0QXBwbHlDb2RlTGVuZ3RoID0gMzY5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19yZWZsZWN0T2JqZWN0QXBwbHlDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc19yZWZsZWN0T2JqZWN0QXBwbHlDb2RlID0KICAgICIoZnVuY3Rpb24g
KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KVxuIiBcCiAgICAie1xuIiBcCiAg
ICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHR5cGVv
ZiB0YXJnZXQgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVy
cm9yKFwiUmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5j
dGlvblwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmICghQGlzT2JqZWN0KGFyZ3VtZW50
c0xpc3QpKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJSZWZsZWN0LmFwcGx5
IHJlcXVpcmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RcIik7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICByZXR1cm4gdGFyZ2V0LkBhcHBseSh0aGlzQXJndW1lbnQsIGFyZ3VtZW50
c0xpc3QpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19yZWZsZWN0T2JqZWN0RGVsZXRlUHJvcGVydHlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6
Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWZsZWN0T2Jq
ZWN0RGVsZXRlUHJvcGVydHlDb2RlTGVuZ3RoID0gMjEyOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19yZWZsZWN0T2JqZWN0RGVsZXRlUHJvcGVydHlDb2RlSW50cmluc2ljID0gSlNDOjpO
b0ludHJpbnNpYzsKY29uc3QgY2hhciogc19yZWZsZWN0T2JqZWN0RGVsZXRlUHJvcGVydHlDb2Rl
ID0KICAgICIoZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXkpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYg
KCFAaXNPYmplY3QodGFyZ2V0KSlcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwi
UmVmbGVjdC5kZWxldGVQcm9wZXJ0eSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0XCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIGRlbGV0ZSB0YXJnZXRb
cHJvcGVydHlLZXldO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFi
aWxpdHkgc19yZWZsZWN0T2JqZWN0SGFzQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfcmVmbGVjdE9iamVjdEhh
c0NvZGVMZW5ndGggPSAyMDA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3JlZmxlY3RP
YmplY3RIYXNDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19y
ZWZsZWN0T2JqZWN0SGFzQ29kZSA9CiAgICAiKGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5
KVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgaWYgKCFAaXNPYmplY3QodGFyZ2V0KSlcbiIgXAogICAgIiAgICAgICAgQHRo
cm93VHlwZUVycm9yKFwiUmVmbGVjdC5oYXMgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJl
IGFuIG9iamVjdFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBwcm9wZXJ0eUtl
eSBpbiB0YXJnZXQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX3JlZ0V4cFByb3RvdHlwZUFkdmFuY2VTdHJpbmdJbmRleENvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X3JlZ0V4cFByb3RvdHlwZUFkdmFuY2VTdHJpbmdJbmRleENvZGVMZW5ndGggPSA0Mjc7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3JlZ0V4cFByb3RvdHlwZUFkdmFuY2VTdHJpbmdJbmRl
eENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3JlZ0V4cFBy
b3RvdHlwZUFkdmFuY2VTdHJpbmdJbmRleENvZGUgPQogICAgIihmdW5jdGlvbiAoc3RyaW5nLCBp
bmRleCwgdW5pY29kZSlcbiIgXAogICAgIntcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAg
IFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKCF1bmljb2RlKVxu
IiBcCiAgICAiICAgICAgICByZXR1cm4gaW5kZXggKyAxO1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgaWYgKGluZGV4ICsgMSA+PSBzdHJpbmcubGVuZ3RoKVxuIiBcCiAgICAiICAgICAgICByZXR1
cm4gaW5kZXggKyAxO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0IGZpcnN0ID0gc3RyaW5n
LkBjaGFyQ29kZUF0KGluZGV4KTtcbiIgXAogICAgIiAgICBpZiAoZmlyc3QgPCAweEQ4MDAgfHwg
Zmlyc3QgPiAweERCRkYpXG4iIFwKICAgICIgICAgICAgIHJldHVybiBpbmRleCArIDE7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICBsZXQgc2Vjb25kID0gc3RyaW5nLkBjaGFyQ29kZUF0KGluZGV4
ICsgMSk7XG4iIFwKICAgICIgICAgaWYgKHNlY29uZCA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERG
RkYpXG4iIFwKICAgICIgICAgICAgIHJldHVybiBpbmRleCArIDE7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICByZXR1cm4gaW5kZXggKyAyO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6
OkNvbnN0cnVjdEFiaWxpdHkgc19yZWdFeHBQcm90b3R5cGVSZWdFeHBFeGVjQ29kZUNvbnN0cnVj
dEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3Qg
aW50IHNfcmVnRXhwUHJvdG90eXBlUmVnRXhwRXhlY0NvZGVMZW5ndGggPSA0MzU7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX3JlZ0V4cFByb3RvdHlwZVJlZ0V4cEV4ZWNDb2RlSW50cmlu
c2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19yZWdFeHBQcm90b3R5cGVSZWdF
eHBFeGVjQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChyZWdleHAsIHN0cilcbiIgXAogICAgIntcbiIg
XAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCBl
eGVjID0gcmVnZXhwLmV4ZWM7XG4iIFwKICAgICIgICAgbGV0IGJ1aWx0aW5FeGVjID0gQHJlZ0V4
cEJ1aWx0aW5FeGVjO1xuIiBcCiAgICAiICAgIGlmIChleGVjICE9PSBidWlsdGluRXhlYyAmJiB0
eXBlb2YgZXhlYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4iIFwKICAgICIgICAgICAgIGxldCByZXN1
bHQgPSBleGVjLkBjYWxsKHJlZ2V4cCwgc3RyKTtcbiIgXAogICAgIiAgICAgICAgaWYgKHJlc3Vs
dCAhPT0gbnVsbCAmJiAhQGlzT2JqZWN0KHJlc3VsdCkpXG4iIFwKICAgICIgICAgICAgICAgICBA
dGhyb3dUeXBlRXJyb3IoXCJUaGUgcmVzdWx0IG9mIGEgUmVnRXhwIGV4ZWMgbXVzdCBiZSBudWxs
IG9yIGFuIG9iamVjdFwiKTtcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiIgXAog
ICAgIiAgICB9XG4iIFwKICAgICIgICAgcmV0dXJuIGJ1aWx0aW5FeGVjLkBjYWxsKHJlZ2V4cCwg
c3RyKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNf
cmVnRXhwUHJvdG90eXBlSGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9yUmVnRXhwTWF0Y2hDb2Rl
Q29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0
Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5cGVIYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JS
ZWdFeHBNYXRjaENvZGVMZW5ndGggPSA0NDA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X3JlZ0V4cFByb3RvdHlwZUhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclJlZ0V4cE1hdGNoQ29k
ZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcmVnRXhwUHJvdG90
eXBlSGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9yUmVnRXhwTWF0Y2hDb2RlID0KICAgICIoZnVu
Y3Rpb24gKHJlZ2V4cCkge1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgbGV0IHJlZ2V4
cEV4ZWMgPSBAdHJ5R2V0QnlJZChyZWdleHAsIFwiZXhlY1wiKTtcbiIgXAogICAgIiAgICBpZiAo
cmVnZXhwRXhlYyAhPT0gQHJlZ0V4cEJ1aWx0aW5FeGVjKVxuIiBcCiAgICAiICAgICAgICByZXR1
cm4gdHJ1ZTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCByZWdleHBHbG9iYWwgPSBAdHJ5
R2V0QnlJZChyZWdleHAsIFwiZ2xvYmFsXCIpO1xuIiBcCiAgICAiICAgIGlmIChyZWdleHBHbG9i
YWwgIT09IEByZWdFeHBQcm90b0dsb2JhbEdldHRlcilcbiIgXAogICAgIiAgICAgICAgcmV0dXJu
IHRydWU7XG4iIFwKICAgICIgICAgbGV0IHJlZ2V4cFVuaWNvZGUgPSBAdHJ5R2V0QnlJZChyZWdl
eHAsIFwidW5pY29kZVwiKTtcbiIgXAogICAgIiAgICBpZiAocmVnZXhwVW5pY29kZSAhPT0gQHJl
Z0V4cFByb3RvVW5pY29kZUdldHRlcilcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIHRydWU7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gIUBpc1JlZ0V4cE9iamVjdChyZWdleHApO1xu
IiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19yZWdFeHBQ
cm90b3R5cGVNYXRjaFNsb3dDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5cGVNYXRjaFNs
b3dDb2RlTGVuZ3RoID0gOTUwOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19yZWdFeHBQ
cm90b3R5cGVNYXRjaFNsb3dDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3Qg
Y2hhciogc19yZWdFeHBQcm90b3R5cGVNYXRjaFNsb3dDb2RlID0KICAgICIoZnVuY3Rpb24gKHJl
Z2V4cCwgc3RyKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgaWYgKCFyZWdleHAuZ2xvYmFsKVxuIiBcCiAgICAiICAgICAg
ICByZXR1cm4gQHJlZ0V4cEV4ZWMocmVnZXhwLCBzdHIpO1xuIiBcCiAgICAiICAgIFxuIiBcCiAg
ICAiICAgIGxldCB1bmljb2RlID0gcmVnZXhwLnVuaWNvZGU7XG4iIFwKICAgICIgICAgcmVnZXhw
Lmxhc3RJbmRleCA9IDA7XG4iIFwKICAgICIgICAgbGV0IHJlc3VsdExpc3QgPSBbXTtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xu
IiBcCiAgICAiICAgIGNvbnN0IG1heGltdW1SZWFzb25hYmxlTWF0Y2hTaXplID0gMTAwMDAwMDAw
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgd2hpbGUgKHRydWUpIHtcbiIgXAogICAgIiAgICAg
ICAgbGV0IHJlc3VsdCA9IEByZWdFeHBFeGVjKHJlZ2V4cCwgc3RyKTtcbiIgXAogICAgIiAgICAg
ICAgXG4iIFwKICAgICIgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiIgXAogICAgIiAg
ICAgICAgICAgIGlmIChyZXN1bHRMaXN0Lmxlbmd0aCA9PT0gMClcbiIgXAogICAgIiAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbDtcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiByZXN1bHRM
aXN0O1xuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgaWYg
KHJlc3VsdExpc3QubGVuZ3RoID4gbWF4aW11bVJlYXNvbmFibGVNYXRjaFNpemUpXG4iIFwKICAg
ICIgICAgICAgICAgICBAdGhyb3dPdXRPZk1lbW9yeUVycm9yKCk7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICAgICAgaWYgKCFAaXNPYmplY3QocmVzdWx0KSlcbiIgXAogICAgIiAgICAgICAgICAg
IEB0aHJvd1R5cGVFcnJvcihcIlJlZ0V4cC5wcm90b3R5cGUuQEBtYXRjaCBjYWxsIHRvIFJlZ0V4
cC5leGVjIGRpZG4ndCByZXR1cm4gbnVsbCBvciBhbiBvYmplY3RcIik7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICAgICAgbGV0IHJlc3VsdFN0cmluZyA9IEB0b1N0cmluZyhyZXN1bHRbMF0pO1xu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIGlmICghcmVzdWx0U3RyaW5nLmxlbmd0aClcbiIg
XAogICAgIiAgICAgICAgICAgIHJlZ2V4cC5sYXN0SW5kZXggPSBAYWR2YW5jZVN0cmluZ0luZGV4
KHN0ciwgcmVnZXhwLmxhc3RJbmRleCwgdW5pY29kZSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICAgICAgcmVzdWx0TGlzdC5AcHVzaChyZXN1bHRTdHJpbmcpO1xuIiBcCiAgICAiICAgIH1cbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcmVnRXhwUHJv
dG90eXBlTWF0Y2hDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5cGVNYXRjaENvZGVMZW5n
dGggPSAzMzg7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3JlZ0V4cFByb3RvdHlwZU1h
dGNoQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcmVnRXhw
UHJvdG90eXBlTWF0Y2hDb2RlID0KICAgICIoZnVuY3Rpb24gKHN0ckFyZylcbiIgXAogICAgIntc
biIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlm
ICghQGlzT2JqZWN0KHRoaXMpKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJS
ZWdFeHAucHJvdG90eXBlLkBAbWF0Y2ggcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYW4gT2JqZWN0
XCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0IHN0ciA9IEB0b1N0cmluZyhzdHJBcmcp
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBpZiAoIUBoYXNPYnNl
cnZhYmxlU2lkZUVmZmVjdHNGb3JSZWdFeHBNYXRjaCh0aGlzKSlcbiIgXAogICAgIiAgICAgICAg
cmV0dXJuIEByZWdFeHBNYXRjaEZhc3QuQGNhbGwodGhpcywgc3RyKTtcbiIgXAogICAgIiAgICBy
ZXR1cm4gQG1hdGNoU2xvdyh0aGlzLCBzdHIpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19yZWdFeHBQcm90b3R5cGVSZXBsYWNlQ29kZUNvbnN0cnVj
dEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3Qg
aW50IHNfcmVnRXhwUHJvdG90eXBlUmVwbGFjZUNvZGVMZW5ndGggPSA1MzMwOwpzdGF0aWMgY29u
c3QgSlNDOjpJbnRyaW5zaWMgc19yZWdFeHBQcm90b3R5cGVSZXBsYWNlQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcmVnRXhwUHJvdG90eXBlUmVwbGFjZUNv
ZGUgPQogICAgIihmdW5jdGlvbiAoc3RyQXJnLCByZXBsYWNlKVxuIiBcCiAgICAie1xuIiBcCiAg
ICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZnVuY3Rpb24g
Z2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCByZXBsYWNl
bWVudClcbiIgXAogICAgIiAgICB7XG4iIFwKICAgICIgICAgICAgIFwidXNlIHN0cmljdFwiO1xu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIGxldCBtYXRjaExlbmd0aCA9IG1hdGNoZWQubGVu
Z3RoO1xuIiBcCiAgICAiICAgICAgICBsZXQgc3RyaW5nTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiIg
XAogICAgIiAgICAgICAgbGV0IHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoTGVuZ3RoO1xuIiBc
CiAgICAiICAgICAgICBsZXQgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiIgXAogICAgIiAgICAgICAg
bGV0IHJlcGxhY2VtZW50TGVuZ3RoID0gcmVwbGFjZW1lbnQubGVuZ3RoO1xuIiBcCiAgICAiICAg
ICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiIgXAogICAgIiAgICAgICAgbGV0IGxhc3RTdGFydCA9
IDA7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgZm9yIChsZXQgc3RhcnQgPSAwOyBzdGFy
dCA9IHJlcGxhY2VtZW50LmluZGV4T2YoXCIkXCIsIGxhc3RTdGFydCksIHN0YXJ0ICE9PSAtMTsg
bGFzdFN0YXJ0ID0gc3RhcnQpIHtcbiIgXAogICAgIiAgICAgICAgICAgIGlmIChzdGFydCAtIGxh
c3RTdGFydCA+IDApXG4iIFwKICAgICIgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsg
cmVwbGFjZW1lbnQuc3Vic3RyaW5nKGxhc3RTdGFydCwgc3RhcnQpO1xuIiBcCiAgICAiICAgICAg
ICAgICAgc3RhcnQrKztcbiIgXAogICAgIiAgICAgICAgICAgIGxldCBjaCA9IHJlcGxhY2VtZW50
LmNoYXJBdChzdGFydCk7XG4iIFwKICAgICIgICAgICAgICAgICBpZiAoY2ggPT09IFwiXCIpXG4i
IFwKICAgICIgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgXCIkXCI7XG4iIFwKICAg
ICIgICAgICAgICAgICBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNo
KVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICBj
YXNlIFwiJFwiOlxuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQg
KyBcIiRcIjtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgc3RhcnQrKztcbiIgXAogICAg
IiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgY2Fz
ZSBcIiZcIjpcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsg
bWF0Y2hlZDtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgc3RhcnQrKztcbiIgXAogICAg
IiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgY2Fz
ZSBcImBcIjpcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gMClc
biIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHN0ci5z
dWJzdHJpbmcoMCwgcG9zaXRpb24pO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICBzdGFy
dCsrO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICBicmVhaztcbiIgXAogICAgIiAgICAg
ICAgICAgICAgICBjYXNlIFwiJ1wiOlxuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICBpZiAo
dGFpbFBvcyA8IHN0cmluZ0xlbmd0aClcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHJlc3VsdCArIHN0ci5zdWJzdHJpbmcodGFpbFBvcyk7XG4iIFwKICAgICIgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0Kys7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgICAgIGJy
ZWFrO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4iIFwKICAgICIgICAgICAg
ICAgICAgICAgICAgIGxldCBjaENvZGUgPSBjaC5jaGFyQ29kZUF0KDApO1xuIiBcCiAgICAiICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hDb2RlID49IDB4MzAgJiYgY2hDb2RlIDw9IDB4MzkpIHtc
biIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Kys7XG4iIFwKICAgICIgICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgbiA9IGNoQ29kZSAtIDB4MzA7XG4iIFwKICAgICIgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobiA+IG0pXG4iIFwKICAgICIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhcnQgPCByZXBsYWNlbWVudExlbmd0aCkge1xuIiBcCiAgICAiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBuZXh0Q2hDb2RlID0gcmVwbGFjZW1lbnQuY2hhckNvZGVBdChzdGFydCk7
XG4iIFwKICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRDaENvZGUgPj0g
MHgzMCAmJiBuZXh0Q2hDb2RlIDw9IDB4MzkpIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGV0IG5uID0gMTAgKiBuICsgbmV4dENoQ29kZSAtIDB4MzA7XG4iIFwK
ICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChubiA8PSBtKSB7XG4iIFwK
ICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbm47XG4iIFwKICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCsrO1xuIiBcCiAgICAi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4iIFwKICAgICIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfVxuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICAgICAgfVxuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSAwKVxuIiBc
CiAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZXNbbl0gIT0gQHVuZGVmaW5l
ZClcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQg
KyBjYXB0dXJlc1tuXTtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgfSBlbHNlXG4iIFwK
ICAgICIgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBcIiRcIjtcbiIg
XAogICAgIiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4iIFwKICAgICIgICAgICAgICAgICAg
ICAgfVxuIiBcCiAgICAiICAgICAgICAgICAgfVxuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAg
ICJcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIHJlc3VsdCArIHJlcGxhY2VtZW50LnN1YnN0cmlu
ZyhsYXN0U3RhcnQpO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlm
ICghQGlzT2JqZWN0KHRoaXMpKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJS
ZWdFeHAucHJvdG90eXBlLkBAcmVwbGFjZSByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBhbiBPYmpl
Y3RcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBsZXQgcmVnZXhwID0gdGhpcztcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIGxldCBzdHIgPSBAdG9TdHJpbmcoc3RyQXJnKTtcbiIgXAogICAg
IiAgICBsZXQgc3RyaW5nTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiIgXAogICAgIiAgICBsZXQgZnVu
Y3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZSA9PT0gJ2Z1bmN0aW9uJztcbiIgXAogICAg
IlxuIiBcCiAgICAiICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpXG4iIFwKICAgICIgICAgICAg
IHJlcGxhY2UgPSBAdG9TdHJpbmcocmVwbGFjZSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBs
ZXQgZ2xvYmFsID0gcmVnZXhwLmdsb2JhbDtcbiIgXAogICAgIiAgICBsZXQgdW5pY29kZSA9IGZh
bHNlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGdsb2JhbCkge1xuIiBcCiAgICAiICAg
ICAgICB1bmljb2RlID0gcmVnZXhwLnVuaWNvZGU7XG4iIFwKICAgICIgICAgICAgIHJlZ2V4cC5s
YXN0SW5kZXggPSAwO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxl
dCByZXN1bHRMaXN0ID0gW107XG4iIFwKICAgICIgICAgbGV0IHJlc3VsdDtcbiIgXAogICAgIiAg
ICBsZXQgZG9uZSA9IGZhbHNlO1xuIiBcCiAgICAiICAgIHdoaWxlICghZG9uZSkge1xuIiBcCiAg
ICAiICAgICAgICByZXN1bHQgPSBAcmVnRXhwRXhlYyhyZWdleHAsIHN0cik7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbClcbiIgXAogICAgIiAgICAgICAg
ICAgIGRvbmUgPSB0cnVlO1xuIiBcCiAgICAiICAgICAgICBlbHNlIHtcbiIgXAogICAgIiAgICAg
ICAgICAgIHJlc3VsdExpc3QuQHB1c2gocmVzdWx0KTtcbiIgXAogICAgIiAgICAgICAgICAgIGlm
ICghZ2xvYmFsKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuIiBcCiAg
ICAiICAgICAgICAgICAgZWxzZSB7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgbGV0IG1hdGNo
U3RyID0gQHRvU3RyaW5nKHJlc3VsdFswXSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAg
ICAgICAgICBpZiAoIW1hdGNoU3RyLmxlbmd0aClcbiIgXAogICAgIiAgICAgICAgICAgICAgICAg
ICAgcmVnZXhwLmxhc3RJbmRleCA9IEBhZHZhbmNlU3RyaW5nSW5kZXgoc3RyLCByZWdleHAubGFz
dEluZGV4LCB1bmljb2RlKTtcbiIgXAogICAgIiAgICAgICAgICAgIH1cbiIgXAogICAgIiAgICAg
ICAgfVxuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCBhY2N1bXVs
YXRlZFJlc3VsdCA9IFwiXCI7XG4iIFwKICAgICIgICAgbGV0IG5leHRTb3VyY2VQb3NpdGlvbiA9
IDA7XG4iIFwKICAgICIgICAgbGV0IGxhc3RQb3NpdGlvbiA9IDA7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICBmb3IgKGxldCBpID0gMCwgcmVzdWx0TGlzdExlbmd0aCA9IHJlc3VsdExpc3QubGVu
Z3RoOyBpIDwgcmVzdWx0TGlzdExlbmd0aDsgKytpKSB7XG4iIFwKICAgICIgICAgICAgIGxldCBy
ZXN1bHQgPSByZXN1bHRMaXN0W2ldO1xuIiBcCiAgICAiICAgICAgICBsZXQgbkNhcHR1cmVzID0g
cmVzdWx0Lmxlbmd0aCAtIDE7XG4iIFwKICAgICIgICAgICAgIGlmIChuQ2FwdHVyZXMgPCAwKVxu
IiBcCiAgICAiICAgICAgICAgICAgbkNhcHR1cmVzID0gMDtcbiIgXAogICAgIiAgICAgICAgbGV0
IG1hdGNoZWQgPSBAdG9TdHJpbmcocmVzdWx0WzBdKTtcbiIgXAogICAgIiAgICAgICAgbGV0IG1h
dGNoTGVuZ3RoID0gbWF0Y2hlZC5sZW5ndGg7XG4iIFwKICAgICIgICAgICAgIGxldCBwb3NpdGlv
biA9IHJlc3VsdC5pbmRleDtcbiIgXAogICAgIiAgICAgICAgcG9zaXRpb24gPSAocG9zaXRpb24g
PiBzdHJpbmdMZW5ndGgpID8gc3RyaW5nTGVuZ3RoIDogcG9zaXRpb247XG4iIFwKICAgICIgICAg
ICAgIHBvc2l0aW9uID0gKHBvc2l0aW9uIDwgMCkgPyAwIDogcG9zaXRpb247XG4iIFwKICAgICJc
biIgXAogICAgIiAgICAgICAgbGV0IGNhcHR1cmVzID0gW107XG4iIFwKICAgICIgICAgICAgIGZv
ciAobGV0IG4gPSAxOyBuIDw9IG5DYXB0dXJlczsgbisrKSB7XG4iIFwKICAgICIgICAgICAgICAg
ICBsZXQgY2FwTiA9IHJlc3VsdFtuXTtcbiIgXAogICAgIiAgICAgICAgICAgIGlmIChjYXBOICE9
PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIGNhcE4gPSBAdG9TdHJpbmco
Y2FwTik7XG4iIFwKICAgICIgICAgICAgICAgICBjYXB0dXJlc1tuXSA9IGNhcE47XG4iIFwKICAg
ICIgICAgICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICBsZXQgcmVwbGFjZW1lbnQ7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4i
IFwKICAgICIgICAgICAgICAgICBsZXQgcmVwbGFjZXJBcmdzID0gWyBtYXRjaGVkIF0uY29uY2F0
KGNhcHR1cmVzLnNsaWNlKDEpKTtcbiIgXAogICAgIiAgICAgICAgICAgIHJlcGxhY2VyQXJncy5A
cHVzaChwb3NpdGlvbik7XG4iIFwKICAgICIgICAgICAgICAgICByZXBsYWNlckFyZ3MuQHB1c2go
c3RyKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICAgICAgbGV0IHJlcGxWYWx1ZSA9IHJl
cGxhY2UuQGFwcGx5KEB1bmRlZmluZWQsIHJlcGxhY2VyQXJncyk7XG4iIFwKICAgICIgICAgICAg
ICAgICByZXBsYWNlbWVudCA9IEB0b1N0cmluZyhyZXBsVmFsdWUpO1xuIiBcCiAgICAiICAgICAg
ICB9IGVsc2VcbiIgXAogICAgIiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0
aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCByZXBsYWNlKTtcbiIgXAogICAg
IlxuIiBcCiAgICAiICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uICYm
IHBvc2l0aW9uID49IGxhc3RQb3NpdGlvbikge1xuIiBcCiAgICAiICAgICAgICAgICAgYWNjdW11
bGF0ZWRSZXN1bHQgPSBhY2N1bXVsYXRlZFJlc3VsdCArIHN0ci5zdWJzdHJpbmcobmV4dFNvdXJj
ZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiIgXAogICAgIiAgICAgICAgICAg
IG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hMZW5ndGg7XG4iIFwKICAgICIg
ICAgICAgICAgICBsYXN0UG9zaXRpb24gPSBwb3NpdGlvbjtcbiIgXAogICAgIiAgICAgICAgfVxu
IiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChuZXh0U291cmNlUG9z
aXRpb24gPj0gc3RyaW5nTGVuZ3RoKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gIGFjY3VtdWxh
dGVkUmVzdWx0O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVz
dWx0ICsgc3RyLnN1YnN0cmluZyhuZXh0U291cmNlUG9zaXRpb24pO1xuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19yZWdFeHBQcm90b3R5cGVTZWFyY2hD
b2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3Ry
dWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5cGVTZWFyY2hDb2RlTGVuZ3RoID0gNzg0Owpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19yZWdFeHBQcm90b3R5cGVTZWFyY2hDb2RlSW50
cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19yZWdFeHBQcm90b3R5cGVT
ZWFyY2hDb2RlID0KICAgICIoZnVuY3Rpb24gKHN0ckFyZylcbiIgXAogICAgIntcbiIgXAogICAg
IiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCByZWdleHAg
PSB0aGlzO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBpZiAoQGlz
UmVnRXhwT2JqZWN0KHJlZ2V4cCkgJiYgQHRyeUdldEJ5SWQocmVnZXhwLCBcImV4ZWNcIikgPT09
IEByZWdFeHBCdWlsdGluRXhlYylcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIEByZWdFeHBTZWFy
Y2hGYXN0LkBjYWxsKHJlZ2V4cCwgc3RyQXJnKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIC8v
XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBpZiAoIUBpc09iamVjdCh0aGlzKSlcbiIg
XAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiUmVnRXhwLnByb3RvdHlwZS5AQHNlYXJj
aCByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBhbiBPYmplY3RcIik7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGxldCBzdHIgPSBAdG9TdHJpbmcoc3RyQXJnKVxuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBsZXQgcHJldmlvdXNMYXN0SW5k
ZXggPSByZWdleHAubGFzdEluZGV4O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAog
ICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgaWYgKHByZXZpb3VzTGFz
dEluZGV4ICE9PSAwKVxuIiBcCiAgICAiICAgICAgICByZWdleHAubGFzdEluZGV4ID0gMDtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgbGV0IHJlc3VsdCA9IEByZWdF
eHBFeGVjKHJlZ2V4cCwgc3RyKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAg
ICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAg
aWYgKHJlZ2V4cC5sYXN0SW5kZXggIT09IHByZXZpb3VzTGFzdEluZGV4KVxuIiBcCiAgICAiICAg
ICAgICByZWdleHAubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGlmIChyZXN1bHQgPT09IG51bGwpXG4iIFwKICAg
ICIgICAgICAgIHJldHVybiAtMTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAg
ICIgICAgcmV0dXJuIHJlc3VsdC5pbmRleDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlND
OjpDb25zdHJ1Y3RBYmlsaXR5IHNfcmVnRXhwUHJvdG90eXBlSGFzT2JzZXJ2YWJsZVNpZGVFZmZl
Y3RzRm9yUmVnRXhwU3BsaXRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5cGVIYXNPYnNl
cnZhYmxlU2lkZUVmZmVjdHNGb3JSZWdFeHBTcGxpdENvZGVMZW5ndGggPSAxMTMzOwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc19yZWdFeHBQcm90b3R5cGVIYXNPYnNlcnZhYmxlU2lkZUVm
ZmVjdHNGb3JSZWdFeHBTcGxpdENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX3JlZ0V4cFByb3RvdHlwZUhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclJlZ0V4
cFNwbGl0Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChyZWdleHApIHtcbiIgXAogICAgIiAgICAvL1xu
IiBcCiAgICAiICAgIGxldCByZWdleHBFeGVjID0gQHRyeUdldEJ5SWQocmVnZXhwLCBcImV4ZWNc
Iik7XG4iIFwKICAgICIgICAgaWYgKHJlZ2V4cEV4ZWMgIT09IEByZWdFeHBCdWlsdGluRXhlYylc
biIgXAogICAgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iIFwKICAgICIgICAgXG4iIFwKICAgICIg
ICAgLy9cbiIgXAogICAgIiAgICBsZXQgcmVnZXhwRmxhZ3MgPSBAdHJ5R2V0QnlJZChyZWdleHAs
IFwiZmxhZ3NcIik7XG4iIFwKICAgICIgICAgaWYgKHJlZ2V4cEZsYWdzICE9PSBAcmVnRXhwUHJv
dG9GbGFnc0dldHRlcilcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iIFwKICAgICIg
ICAgXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBsZXQgcmVnZXhwR2xvYmFsID0gQHRy
eUdldEJ5SWQocmVnZXhwLCBcImdsb2JhbFwiKTtcbiIgXAogICAgIiAgICBpZiAocmVnZXhwR2xv
YmFsICE9PSBAcmVnRXhwUHJvdG9HbG9iYWxHZXR0ZXIpXG4iIFwKICAgICIgICAgICAgIHJldHVy
biB0cnVlO1xuIiBcCiAgICAiICAgIGxldCByZWdleHBJZ25vcmVDYXNlID0gQHRyeUdldEJ5SWQo
cmVnZXhwLCBcImlnbm9yZUNhc2VcIik7XG4iIFwKICAgICIgICAgaWYgKHJlZ2V4cElnbm9yZUNh
c2UgIT09IEByZWdFeHBQcm90b0lnbm9yZUNhc2VHZXR0ZXIpXG4iIFwKICAgICIgICAgICAgIHJl
dHVybiB0cnVlO1xuIiBcCiAgICAiICAgIGxldCByZWdleHBNdWx0aWxpbmUgPSBAdHJ5R2V0QnlJ
ZChyZWdleHAsIFwibXVsdGlsaW5lXCIpO1xuIiBcCiAgICAiICAgIGlmIChyZWdleHBNdWx0aWxp
bmUgIT09IEByZWdFeHBQcm90b011bHRpbGluZUdldHRlcilcbiIgXAogICAgIiAgICAgICAgcmV0
dXJuIHRydWU7XG4iIFwKICAgICIgICAgbGV0IHJlZ2V4cFN0aWNreSA9IEB0cnlHZXRCeUlkKHJl
Z2V4cCwgXCJzdGlja3lcIik7XG4iIFwKICAgICIgICAgaWYgKHJlZ2V4cFN0aWNreSAhPT0gQHJl
Z0V4cFByb3RvU3RpY2t5R2V0dGVyKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIg
XAogICAgIiAgICBsZXQgcmVnZXhwVW5pY29kZSA9IEB0cnlHZXRCeUlkKHJlZ2V4cCwgXCJ1bmlj
b2RlXCIpO1xuIiBcCiAgICAiICAgIGlmIChyZWdleHBVbmljb2RlICE9PSBAcmVnRXhwUHJvdG9V
bmljb2RlR2V0dGVyKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIgXAogICAgIiAg
ICBcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGxldCByZWdleHBTb3VyY2UgPSBAdHJ5
R2V0QnlJZChyZWdleHAsIFwic291cmNlXCIpO1xuIiBcCiAgICAiICAgIGlmIChyZWdleHBTb3Vy
Y2UgIT09IEByZWdFeHBQcm90b1NvdXJjZUdldHRlcilcbiIgXAogICAgIiAgICAgICAgcmV0dXJu
IHRydWU7XG4iIFwKICAgICIgICAgXG4iIFwKICAgICIgICAgcmV0dXJuICFAaXNSZWdFeHBPYmpl
Y3QocmVnZXhwKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmls
aXR5IHNfcmVnRXhwUHJvdG90eXBlU3BsaXRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5
cGVTcGxpdENvZGVMZW5ndGggPSAzMjg4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19y
ZWdFeHBQcm90b3R5cGVTcGxpdENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX3JlZ0V4cFByb3RvdHlwZVNwbGl0Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChzdHJp
bmcsIGxpbWl0KVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGlm
ICghQGlzT2JqZWN0KHRoaXMpKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJS
ZWdFeHAucHJvdG90eXBlLkBAc3BsaXQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYW4gT2JqZWN0
XCIpO1xuIiBcCiAgICAiICAgIGxldCByZWdleHAgPSB0aGlzO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgLy9cbiIgXAogICAgIiAgICBsZXQgc3RyID0gQHRvU3RyaW5nKHN0cmluZyk7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGxldCBzcGVjaWVzQ29uc3RydWN0
b3IgPSBAc3BlY2llc0NvbnN0cnVjdG9yKHJlZ2V4cCwgQFJlZ0V4cCk7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICBpZiAoc3BlY2llc0NvbnN0cnVjdG9yID09PSBAUmVnRXhwICYmICFAaGFzT2Jz
ZXJ2YWJsZVNpZGVFZmZlY3RzRm9yUmVnRXhwU3BsaXQocmVnZXhwKSlcbiIgXAogICAgIiAgICAg
ICAgcmV0dXJuIEByZWdFeHBTcGxpdEZhc3QuQGNhbGwocmVnZXhwLCBzdHIsIGxpbWl0KTtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgbGV0IGZsYWdzID0gQHRvU3Ry
aW5nKHJlZ2V4cC5mbGFncyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAi
ICAgIC8vXG4iIFwKICAgICIgICAgbGV0IHVuaWNvZGVNYXRjaGluZyA9IEBzdHJpbmdJbmNsdWRl
c0ludGVybmFsLkBjYWxsKGZsYWdzLCBcInVcIik7XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAg
IiAgICAvL1xuIiBcCiAgICAiICAgIGxldCBuZXdGbGFncyA9IEBzdHJpbmdJbmNsdWRlc0ludGVy
bmFsLkBjYWxsKGZsYWdzLCBcInlcIikgPyBmbGFncyA6IGZsYWdzICsgXCJ5XCI7XG4iIFwKICAg
ICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGxldCBzcGxpdHRlciA9IG5ldyBzcGVj
aWVzQ29uc3RydWN0b3IocmVnZXhwLCBuZXdGbGFncyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgaWYgKCFAaGFzT2JzZXJ2YWJsZVNp
ZGVFZmZlY3RzRm9yUmVnRXhwU3BsaXQoc3BsaXR0ZXIpKVxuIiBcCiAgICAiICAgICAgICByZXR1
cm4gQHJlZ0V4cFNwbGl0RmFzdC5AY2FsbChzcGxpdHRlciwgc3RyLCBsaW1pdCk7XG4iIFwKICAg
ICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgbGV0IHJl
c3VsdCA9IFtdO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBsaW1p
dCA9IChsaW1pdCA9PT0gQHVuZGVmaW5lZCkgPyAweGZmZmZmZmZmIDogbGltaXQgPj4+IDA7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGlmICghbGltaXQpXG4iIFwK
ICAgICIgICAgICAgIHJldHVybiByZXN1bHQ7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAvL1xu
IiBcCiAgICAiICAgIGxldCBzaXplID0gc3RyLmxlbmd0aDtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIC8vXG4iIFwKICAgICIgICAgaWYgKCFzaXplKSB7XG4iIFwKICAgICIgICAgICAgIC8vXG4i
IFwKICAgICIgICAgICAgIGxldCB6ID0gQHJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIHN0cik7XG4iIFwK
ICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIGlmICh6ICE9IG51bGwpXG4iIFwKICAg
ICIgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAiICAgICAgICAvL1xuIiBcCiAg
ICAiICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCAwLCBzdHIpO1xuIiBcCiAgICAiICAg
ICAgICAvL1xuIiBcCiAgICAiICAgICAgICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAiICAgIH1c
biIgXAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgbGV0IHBvc2l0aW9uID0g
MDtcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGxldCBtYXRjaFBvc2l0aW9uID0gMDtc
biIgXAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgd2hpbGUgKG1hdGNoUG9z
aXRpb24gPCBzaXplKSB7XG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIHNw
bGl0dGVyLmxhc3RJbmRleCA9IG1hdGNoUG9zaXRpb247XG4iIFwKICAgICIgICAgICAgIC8vXG4i
IFwKICAgICIgICAgICAgIGxldCBtYXRjaGVzID0gQHJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIHN0cik7
XG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIGlmIChtYXRjaGVzID09PSBu
dWxsKVxuIiBcCiAgICAiICAgICAgICAgICAgbWF0Y2hQb3NpdGlvbiA9IEBhZHZhbmNlU3RyaW5n
SW5kZXgoc3RyLCBtYXRjaFBvc2l0aW9uLCB1bmljb2RlTWF0Y2hpbmcpO1xuIiBcCiAgICAiICAg
ICAgICAvL1xuIiBcCiAgICAiICAgICAgICBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgICAgIC8v
XG4iIFwKICAgICIgICAgICAgICAgICBsZXQgZW5kUG9zaXRpb24gPSBAdG9MZW5ndGgoc3BsaXR0
ZXIubGFzdEluZGV4KTtcbiIgXAogICAgIiAgICAgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAg
ICAgICBlbmRQb3NpdGlvbiA9IChlbmRQb3NpdGlvbiA8PSBzaXplKSA/IGVuZFBvc2l0aW9uIDog
c2l6ZTtcbiIgXAogICAgIiAgICAgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgICAgICBpZiAo
ZW5kUG9zaXRpb24gPT09IHBvc2l0aW9uKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIG1hdGNo
UG9zaXRpb24gPSBAYWR2YW5jZVN0cmluZ0luZGV4KHN0ciwgbWF0Y2hQb3NpdGlvbiwgdW5pY29k
ZU1hdGNoaW5nKTtcbiIgXAogICAgIiAgICAgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgICAg
ICBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAg
ICAgICAgIGxldCBzdWJTdHIgPSBAc3RyaW5nU3Vic3RySW50ZXJuYWwuQGNhbGwoc3RyLCBwb3Np
dGlvbiwgbWF0Y2hQb3NpdGlvbiAtIHBvc2l0aW9uKTtcbiIgXAogICAgIiAgICAgICAgICAgICAg
ICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgICAgICAg
ICAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgc3ViU3RyKTtcbiIgXAog
ICAgIiAgICAgICAgICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQubGVuZ3RoID09IGxpbWl0KVxuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgICAgICAgICAgLy9cbiIgXAogICAg
IiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uO1xuIiBcCiAgICAiICAgICAg
ICAgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgICAgICAgICAgLy9cbiIgXAogICAgIiAgICAg
ICAgICAgICAgICBsZXQgbnVtYmVyT2ZDYXB0dXJlcyA9IG1hdGNoZXMubGVuZ3RoID4gMSA/IG1h
dGNoZXMubGVuZ3RoIC0gMSA6IDA7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgICAgICAg
ICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIGxldCBpID0gMTtcbiIgXAogICAgIiAgICAg
ICAgICAgICAgICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIHdoaWxlIChpIDw9IG51bWJl
ck9mQ2FwdHVyZXMpIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgLy9cbiIgXAogICAg
IiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRDYXB0dXJlID0gbWF0Y2hlc1tpXTtcbiIgXAog
ICAgIiAgICAgICAgICAgICAgICAgICAgLy9cbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAg
Ly9cbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwg
cmVzdWx0Lmxlbmd0aCwgbmV4dENhcHR1cmUpO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgICAg
ICAvL1xuIiBcCiAgICAiICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSBs
aW1pdClcbiIgXAogICAgIiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4i
IFwKICAgICIgICAgICAgICAgICAgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgICAgICAgICAg
ICAgIGkrKztcbiIgXAogICAgIiAgICAgICAgICAgICAgICB9XG4iIFwKICAgICIgICAgICAgICAg
ICAgICAgLy9cbiIgXAogICAgIiAgICAgICAgICAgICAgICBtYXRjaFBvc2l0aW9uID0gcG9zaXRp
b247XG4iIFwKICAgICIgICAgICAgICAgICB9XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAg
IiAgICB9XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBsZXQgcmVtYWluaW5nU3RyID0g
QHN0cmluZ1N1YnN0ckludGVybmFsLkBjYWxsKHN0ciwgcG9zaXRpb24sIHNpemUpO1xuIiBcCiAg
ICAiICAgIC8vXG4iIFwKICAgICIgICAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwgcmVzdWx0Lmxl
bmd0aCwgcmVtYWluaW5nU3RyKTtcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIHJldHVy
biByZXN1bHQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX3JlZ0V4cFByb3RvdHlwZVRlc3RDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5cGVU
ZXN0Q29kZUxlbmd0aCA9IDUwNDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfcmVnRXhw
UHJvdG90eXBlVGVzdENvZGVJbnRyaW5zaWMgPSBKU0M6OlJlZ0V4cFRlc3RJbnRyaW5zaWM7CmNv
bnN0IGNoYXIqIHNfcmVnRXhwUHJvdG90eXBlVGVzdENvZGUgPQogICAgIihmdW5jdGlvbiAoc3Ry
QXJnKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAi
XG4iIFwKICAgICIgICAgbGV0IHJlZ2V4cCA9IHRoaXM7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICAvL1xuIiBcCiAgICAiICAgIGlmIChAaXNSZWdFeHBPYmplY3QocmVnZXhwKSAmJiBAdHJ5R2V0
QnlJZChyZWdleHAsIFwiZXhlY1wiKSA9PT0gQHJlZ0V4cEJ1aWx0aW5FeGVjKVxuIiBcCiAgICAi
ICAgICAgICByZXR1cm4gQHJlZ0V4cFRlc3RGYXN0LkBjYWxsKHJlZ2V4cCwgc3RyQXJnKTtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBp
ZiAoIUBpc09iamVjdChyZWdleHApKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3Io
XCJSZWdFeHAucHJvdG90eXBlLnRlc3QgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYW4gT2JqZWN0
XCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICBsZXQgc3RyID0g
QHRvU3RyaW5nKHN0ckFyZyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAi
ICAgIGxldCBtYXRjaCA9IEByZWdFeHBFeGVjKHJlZ2V4cCwgc3RyKTtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgaWYgKG1hdGNoICE9PSBudWxsKVxuIiBcCiAgICAi
ICAgICAgICByZXR1cm4gdHJ1ZTtcbiIgXAogICAgIiAgICByZXR1cm4gZmFsc2U7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3NldEl0ZXJhdG9yUHJv
dG90eXBlU2V0SXRlcmF0b3JOZXh0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc2V0SXRlcmF0b3JQcm90b3R5
cGVTZXRJdGVyYXRvck5leHRDb2RlTGVuZ3RoID0gMzQ5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19zZXRJdGVyYXRvclByb3RvdHlwZVNldEl0ZXJhdG9yTmV4dENvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3NldEl0ZXJhdG9yUHJvdG90eXBlU2V0
SXRlcmF0b3JOZXh0Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChidWNrZXQsIGtpbmQpXG4iIFwKICAg
ICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIgICAgdmFyIHZhbHVl
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgYnVja2V0ID0gQHNldEJ1Y2tldE5leHQoYnVja2V0
KTtcbiIgXAogICAgIiAgICB0aGlzLkBzZXRCdWNrZXQgPSBidWNrZXQ7XG4iIFwKICAgICIgICAg
dmFyIGRvbmUgPSBidWNrZXQgPT09IEBzZW50aW5lbFNldEJ1Y2tldDtcbiIgXAogICAgIiAgICBp
ZiAoIWRvbmUpIHtcbiIgXAogICAgIiAgICAgICAgdmFsdWUgPSBAc2V0QnVja2V0S2V5KGJ1Y2tl
dCk7XG4iIFwKICAgICIgICAgICAgIGlmIChraW5kID09PSBAaXRlcmF0aW9uS2luZEtleVZhbHVl
KVxuIiBcCiAgICAiICAgICAgICAgICAgdmFsdWUgPSBbIHZhbHVlLCB2YWx1ZSBdXG4iIFwKICAg
ICIgICAgfVxuIiBcCiAgICAiICAgIHJldHVybiB7IGRvbmUsIHZhbHVlIH07XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3NldEl0ZXJhdG9yUHJvdG90
eXBlTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVMZW5n
dGggPSA0MDM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3NldEl0ZXJhdG9yUHJvdG90
eXBlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Nl
dEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAg
aWYgKHRoaXMgPT0gbnVsbClcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiJVNl
dEl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxs
IG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBidWNrZXQgPSB0
aGlzLkBzZXRCdWNrZXQ7XG4iIFwKICAgICIgICAgaWYgKGJ1Y2tldCA9PT0gQHVuZGVmaW5lZClc
biIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiJVNldEl0ZXJhdG9yUHJvdG90eXBl
JS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIGEgU2V0IEl0ZXJhdG9yIGluc3RhbmNlXCIp
O1xuIiBcCiAgICAiICAgIHJldHVybiBAc2V0SXRlcmF0b3JOZXh0LkBjYWxsKHRoaXMsIGJ1Y2tl
dCwgdGhpcy5Ac2V0SXRlcmF0b3JLaW5kKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlND
OjpDb25zdHJ1Y3RBYmlsaXR5IHNfc2V0UHJvdG90eXBlQ3JlYXRlU2V0SXRlcmF0b3JDb25zdHJ1
Y3RvckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5Db25z
dHJ1Y3Q7CmNvbnN0IGludCBzX3NldFByb3RvdHlwZUNyZWF0ZVNldEl0ZXJhdG9yQ29uc3RydWN0
b3JDb2RlTGVuZ3RoID0gMjI1OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19zZXRQcm90
b3R5cGVDcmVhdGVTZXRJdGVyYXRvckNvbnN0cnVjdG9yQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc2V0UHJvdG90eXBlQ3JlYXRlU2V0SXRlcmF0b3JDb25z
dHJ1Y3RvckNvZGUgPQogICAgIihmdW5jdGlvbiAoaXRlcmF0ZWRPYmplY3QsIGtpbmQpXG4iIFwK
ICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICBAYXNzZXJ0KEBpc1NldChpdGVyYXRlZE9iamVjdCkpO1xuIiBcCiAgICAiICAgIHRoaXMu
QGl0ZXJhdGVkT2JqZWN0ID0gaXRlcmF0ZWRPYmplY3Q7XG4iIFwKICAgICIgICAgdGhpcy5Ac2V0
SXRlcmF0b3JLaW5kID0ga2luZDtcbiIgXAogICAgIiAgICB0aGlzLkBzZXRCdWNrZXQgPSBAc2V0
QnVja2V0SGVhZChpdGVyYXRlZE9iamVjdCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eSBzX3NldFByb3RvdHlwZVZhbHVlc0NvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X3NldFByb3RvdHlwZVZhbHVlc0NvZGVMZW5ndGggPSAyMDA7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3NldFByb3RvdHlwZVZhbHVlc0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmlu
c2ljOwpjb25zdCBjaGFyKiBzX3NldFByb3RvdHlwZVZhbHVlc0NvZGUgPQogICAgIihmdW5jdGlv
biAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAi
XG4iIFwKICAgICIgICAgaWYgKCFAaXNTZXQodGhpcykpXG4iIFwKICAgICIgICAgICAgIEB0aHJv
d1R5cGVFcnJvcihcIlNldC5wcm90b3R5cGUudmFsdWVzIHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJl
IFNldFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBuZXcgQGNyZWF0ZVNldEl0
ZXJhdG9yKHRoaXMsIEBpdGVyYXRpb25LaW5kVmFsdWUpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zZXRQcm90b3R5cGVFbnRyaWVzQ29kZUNvbnN0
cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29u
c3QgaW50IHNfc2V0UHJvdG90eXBlRW50cmllc0NvZGVMZW5ndGggPSAyMDQ7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX3NldFByb3RvdHlwZUVudHJpZXNDb2RlSW50cmluc2ljID0gSlND
OjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zZXRQcm90b3R5cGVFbnRyaWVzQ29kZSA9CiAg
ICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7
XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoIUBpc1NldCh0aGlzKSlcbiIgXAogICAgIiAg
ICAgICAgQHRocm93VHlwZUVycm9yKFwiU2V0LnByb3RvdHlwZS5lbnRyaWVzIHJlcXVpcmVzIHRo
YXQgfHRoaXN8IGJlIFNldFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBuZXcg
QGNyZWF0ZVNldEl0ZXJhdG9yKHRoaXMsIEBpdGVyYXRpb25LaW5kS2V5VmFsdWUpO1xuIiBcCiAg
ICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zZXRQcm90b3R5cGVG
b3JFYWNoQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5v
dENvbnN0cnVjdDsKY29uc3QgaW50IHNfc2V0UHJvdG90eXBlRm9yRWFjaENvZGVMZW5ndGggPSA1
NTA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3NldFByb3RvdHlwZUZvckVhY2hDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zZXRQcm90b3R5cGVG
b3JFYWNoQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoIUBp
c1NldCh0aGlzKSlcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiU2V0IG9wZXJh
dGlvbiBjYWxsZWQgb24gbm9uLVNldCBvYmplY3RcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKVxuIiBcCiAgICAiICAgICAgICBA
dGhyb3dUeXBlRXJyb3IoXCJTZXQucHJvdG90eXBlLmZvckVhY2ggY2FsbGJhY2sgbXVzdCBiZSBh
IGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHRoaXNBcmcgPSBAYXJn
dW1lbnQoMSk7XG4iIFwKICAgICIgICAgdmFyIGJ1Y2tldCA9IEBzZXRCdWNrZXRIZWFkKHRoaXMp
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZG8ge1xuIiBcCiAgICAiICAgICAgICBidWNrZXQg
PSBAc2V0QnVja2V0TmV4dChidWNrZXQpO1xuIiBcCiAgICAiICAgICAgICBpZiAoYnVja2V0ID09
PSBAc2VudGluZWxTZXRCdWNrZXQpXG4iIFwKICAgICIgICAgICAgICAgICBicmVhaztcbiIgXAog
ICAgIiAgICAgICAgdmFyIGtleSA9IEBzZXRCdWNrZXRLZXkoYnVja2V0KTtcbiIgXAogICAgIiAg
ICAgICAgY2FsbGJhY2suQGNhbGwodGhpc0FyZywga2V5LCBrZXksIHRoaXMpO1xuIiBcCiAgICAi
ICAgIH0gd2hpbGUgKHRydWUpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0
cnVjdEFiaWxpdHkgc19zdHJpbmdDb25zdHJ1Y3RvclJhd0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0g
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmlu
Z0NvbnN0cnVjdG9yUmF3Q29kZUxlbmd0aCA9IDg2MDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmlu
c2ljIHNfc3RyaW5nQ29uc3RydWN0b3JSYXdDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc19zdHJpbmdDb25zdHJ1Y3RvclJhd0NvZGUgPQogICAgIihmdW5jdGlv
biAodGVtcGxhdGUpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgY29va2VkU2VnbWVudHMgPSBAdG9PYmplY3QodGVt
cGxhdGUsIFwiU3RyaW5nLnJhdyByZXF1aXJlcyB0ZW1wbGF0ZSBub3QgYmUgbnVsbCBvciB1bmRl
ZmluZWRcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgcmF3U2VnbWVudHMgPSBAdG9P
YmplY3QoY29va2VkU2VnbWVudHMucmF3LCBcIlN0cmluZy5yYXcgcmVxdWlyZXMgdGVtcGxhdGUu
cmF3IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
IHZhciBudW1iZXJPZlN1YnN0aXR1dGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIHZhciBzZWdtZW50Q291bnQgPSBAdG9MZW5ndGgocmF3U2VnbWVu
dHMubGVuZ3RoKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChzZWdtZW50Q291bnQgPD0g
MClcbiIgXAogICAgIiAgICAgICAgcmV0dXJuICcnO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAg
dmFyIHN0cmluZ0VsZW1lbnRzID0gJyc7XG4iIFwKICAgICIgICAgZm9yICh2YXIgaSA9IDA7IDsg
KytpKSB7XG4iIFwKICAgICIgICAgICAgIHZhciBzZWdtZW50ID0gQHRvU3RyaW5nKHJhd1NlZ21l
bnRzW2ldKTtcbiIgXAogICAgIiAgICAgICAgc3RyaW5nRWxlbWVudHMgKz0gc2VnbWVudDtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgICAgICBpZiAoKGkgKyAxKSA9PT0gc2VnbWVudENvdW50KVxu
IiBcCiAgICAiICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0VsZW1lbnRzO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgICAgIGlmIChpIDwgbnVtYmVyT2ZTdWJzdGl0dXRpb25zKSB7XG4iIFwKICAg
ICIgICAgICAgICAgICB2YXIgc3Vic3RpdHV0aW9uSW5kZXhJbkFyZ3VtZW50cyA9IGkgKyAxO1xu
IiBcCiAgICAiICAgICAgICAgICAgdmFyIG5leHQgPSBAdG9TdHJpbmcoYXJndW1lbnRzW3N1YnN0
aXR1dGlvbkluZGV4SW5Bcmd1bWVudHNdKTtcbiIgXAogICAgIiAgICAgICAgICAgIHN0cmluZ0Vs
ZW1lbnRzICs9IG5leHQ7XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIiAgICB9XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ0l0ZXJh
dG9yUHJvdG90eXBlTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ0l0ZXJhdG9yUHJvdG90eXBl
TmV4dENvZGVMZW5ndGggPSAxMjIyOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19zdHJp
bmdJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsK
Y29uc3QgY2hhciogc19zdHJpbmdJdGVyYXRvclByb3RvdHlwZU5leHRDb2RlID0KICAgICIoZnVu
Y3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIGlmICh0aGlzID09IG51bGwpXG4iIFwKICAgICIgICAgICAgIEB0
aHJvd1R5cGVFcnJvcihcIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1aXJlcyB0
aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICB2YXIgcG9zaXRpb24gPSB0aGlzLkBzdHJpbmdJdGVyYXRvck5leHRJbmRleDtcbiIg
XAogICAgIiAgICBpZiAocG9zaXRpb24gPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAg
IEB0aHJvd1R5cGVFcnJvcihcIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1aXJl
cyB0aGF0IHx0aGlzfCBiZSBhIFN0cmluZyBJdGVyYXRvciBpbnN0YW5jZVwiKTtcbiIgXAogICAg
IlxuIiBcCiAgICAiICAgIHZhciBkb25lID0gdHJ1ZTtcbiIgXAogICAgIiAgICB2YXIgdmFsdWUg
PSBAdW5kZWZpbmVkO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHN0cmluZyA9IHRoaXMu
QGl0ZXJhdGVkU3RyaW5nO1xuIiBcCiAgICAiICAgIGlmIChzdHJpbmcgIT09IEB1bmRlZmluZWQp
IHtcbiIgXAogICAgIiAgICAgICAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGggPj4+IDA7XG4i
IFwKICAgICIgICAgICAgIGlmIChwb3NpdGlvbiA+PSBsZW5ndGgpIHtcbiIgXAogICAgIiAgICAg
ICAgICAgIHRoaXMuQGl0ZXJhdGVkU3RyaW5nID0gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAgICAg
ICAgfSBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiIgXAogICAg
IlxuIiBcCiAgICAiICAgICAgICAgICAgdmFyIGZpcnN0ID0gc3RyaW5nLkBjaGFyQ29kZUF0KHBv
c2l0aW9uKTtcbiIgXAogICAgIiAgICAgICAgICAgIGlmIChmaXJzdCA8IDB4RDgwMCB8fCBmaXJz
dCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IGxlbmd0aClcbiIgXAogICAgIiAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHN0cmluZ1twb3NpdGlvbl07XG4iIFwKICAgICIgICAgICAgICAgICBl
bHNlIHtcbiIgXAogICAgIiAgICAgICAgICAgICAgICB2YXIgc2Vjb25kID0gc3RyaW5nLkBjaGFy
Q29kZUF0KHBvc2l0aW9uICsgMSk7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgaWYgKHNlY29u
ZCA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkYpXG4iIFwKICAgICIgICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gc3RyaW5nW3Bvc2l0aW9uXTtcbiIgXAogICAgIiAgICAgICAgICAgICAgICBl
bHNlXG4iIFwKICAgICIgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RyaW5nW3Bvc2l0aW9u
XSArIHN0cmluZ1twb3NpdGlvbiArIDFdO1xuIiBcCiAgICAiICAgICAgICAgICAgfVxuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgICAgICAgICB0aGlzLkBzdHJpbmdJdGVyYXRvck5leHRJbmRleCA9
IHBvc2l0aW9uICsgdmFsdWUubGVuZ3RoO1xuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICIg
ICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuIHtkb25lLCB2YWx1ZX07XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3Rv
dHlwZU1hdGNoQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNh
bm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5nUHJvdG90eXBlTWF0Y2hDb2RlTGVuZ3Ro
ID0gNDcwOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVNYXRj
aENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1By
b3RvdHlwZU1hdGNoQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChyZWdleHApXG4iIFwKICAgICJ7XG4i
IFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAo
dGhpcyA9PSBudWxsKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJTdHJpbmcu
cHJvdG90eXBlLm1hdGNoIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVm
aW5lZFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChyZWdleHAgIT0gbnVsbCkge1xu
IiBcCiAgICAiICAgICAgICB2YXIgbWF0Y2hlciA9IHJlZ2V4cC5AbWF0Y2hTeW1ib2w7XG4iIFwK
ICAgICIgICAgICAgIGlmIChtYXRjaGVyICE9IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hlci5AY2FsbChyZWdleHAsIHRoaXMpO1xuIiBcCiAgICAiICAgIH1c
biIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCB0aGlzU3RyaW5nID0gQHRvU3RyaW5nKHRoaXMp
O1xuIiBcCiAgICAiICAgIGxldCBjcmVhdGVkUmVnRXhwID0gQHJlZ0V4cENyZWF0ZShyZWdleHAs
IEB1bmRlZmluZWQpO1xuIiBcCiAgICAiICAgIHJldHVybiBjcmVhdGVkUmVnRXhwLkBtYXRjaFN5
bWJvbCh0aGlzU3RyaW5nKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlUmVwZWF0U2xvd1BhdGhDb2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQg
c19zdHJpbmdQcm90b3R5cGVSZXBlYXRTbG93UGF0aENvZGVMZW5ndGggPSA0OTY7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZVJlcGVhdFNsb3dQYXRoQ29kZUlu
dHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBl
UmVwZWF0U2xvd1BhdGhDb2RlID0KICAgICIoZnVuY3Rpb24gKHN0cmluZywgY291bnQpXG4iIFwK
ICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICAvL1xuIiBcCiAgICAiICAgIGlmIChjb3VudCA9PT0gMCB8fCBzdHJpbmcubGVuZ3RoID09
PSAwKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gXCJcIjtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIC8vXG4iIFwKICAgICIgICAgaWYgKGNvdW50ID09PSAxKVxuIiBcCiAgICAiICAgICAgICBy
ZXR1cm4gc3RyaW5nO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHN0cmluZy5sZW5ndGgg
KiBjb3VudCA+IEBNQVhfU1RSSU5HX0xFTkdUSClcbiIgXAogICAgIiAgICAgICAgQHRocm93T3V0
T2ZNZW1vcnlFcnJvcigpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAg
ICAvL1xuIiBcCiAgICAiICAgIHZhciByZXN1bHQgPSBcIlwiO1xuIiBcCiAgICAiICAgIHZhciBv
cGVyYW5kID0gc3RyaW5nO1xuIiBcCiAgICAiICAgIHdoaWxlICh0cnVlKSB7XG4iIFwKICAgICIg
ICAgICAgIGlmIChjb3VudCAmIDEpXG4iIFwKICAgICIgICAgICAgICAgICByZXN1bHQgKz0gb3Bl
cmFuZDtcbiIgXAogICAgIiAgICAgICAgY291bnQgPj49IDE7XG4iIFwKICAgICIgICAgICAgIGlm
ICghY291bnQpXG4iIFwKICAgICIgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAi
ICAgICAgICBvcGVyYW5kICs9IG9wZXJhbmQ7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVSZXBl
YXRDaGFyYWN0ZXJzU2xvd1BhdGhDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVSZXBl
YXRDaGFyYWN0ZXJzU2xvd1BhdGhDb2RlTGVuZ3RoID0gNTQwOwpzdGF0aWMgY29uc3QgSlNDOjpJ
bnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVSZXBlYXRDaGFyYWN0ZXJzU2xvd1BhdGhDb2RlSW50
cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVS
ZXBlYXRDaGFyYWN0ZXJzU2xvd1BhdGhDb2RlID0KICAgICIoZnVuY3Rpb24gKHN0cmluZywgY291
bnQpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIg
ICAgdmFyIHJlcGVhdENvdW50ID0gKGNvdW50IC8gc3RyaW5nLmxlbmd0aCkgfCAwO1xuIiBcCiAg
ICAiICAgIHZhciByZW1haW5pbmdDaGFyYWN0ZXJzID0gY291bnQgLSByZXBlYXRDb3VudCAqIHN0
cmluZy5sZW5ndGg7XG4iIFwKICAgICIgICAgdmFyIHJlc3VsdCA9IFwiXCI7XG4iIFwKICAgICIg
ICAgdmFyIG9wZXJhbmQgPSBzdHJpbmc7XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAv
L1xuIiBcCiAgICAiICAgIHdoaWxlICh0cnVlKSB7XG4iIFwKICAgICIgICAgICAgIGlmIChyZXBl
YXRDb3VudCAmIDEpXG4iIFwKICAgICIgICAgICAgICAgICByZXN1bHQgKz0gb3BlcmFuZDtcbiIg
XAogICAgIiAgICAgICAgcmVwZWF0Q291bnQgPj49IDE7XG4iIFwKICAgICIgICAgICAgIGlmICgh
cmVwZWF0Q291bnQpXG4iIFwKICAgICIgICAgICAgICAgICBicmVhaztcbiIgXAogICAgIiAgICAg
ICAgb3BlcmFuZCArPSBvcGVyYW5kO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIiAgICBpZiAo
cmVtYWluaW5nQ2hhcmFjdGVycylcbiIgXAogICAgIiAgICAgICAgcmVzdWx0ICs9IEBzdHJpbmdT
dWJzdHJJbnRlcm5hbC5AY2FsbChzdHJpbmcsIDAsIHJlbWFpbmluZ0NoYXJhY3RlcnMpO1xuIiBc
CiAgICAiICAgIHJldHVybiByZXN1bHQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6
Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZVJlcGVhdENvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X3N0cmluZ1Byb3RvdHlwZVJlcGVhdENvZGVMZW5ndGggPSA1MTA7CnN0YXRpYyBjb25zdCBKU0M6
OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZVJlcGVhdENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZVJlcGVhdENvZGUgPQogICAg
IihmdW5jdGlvbiAoY291bnQpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0
XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAodGhpcyA9PSBudWxsKVxuIiBcCiAgICAi
ICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJTdHJpbmcucHJvdG90eXBlLnJlcGVhdCByZXF1aXJl
cyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICB2YXIgc3RyaW5nID0gQHRvU3RyaW5nKHRoaXMpO1xuIiBcCiAgICAiICAgIGNv
dW50ID0gQHRvSW50ZWdlcihjb3VudCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoY291
bnQgPCAwIHx8IGNvdW50ID09PSBASW5maW5pdHkpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1Jh
bmdlRXJyb3IoXCJTdHJpbmcucHJvdG90eXBlLnJlcGVhdCBhcmd1bWVudCBtdXN0IGJlIGdyZWF0
ZXIgdGhhbiBvciBlcXVhbCB0byAwIGFuZCBub3QgYmUgSW5maW5pdHlcIik7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMSlcbiIgXAogICAgIiAgICAgICAg
cmV0dXJuIEByZXBlYXRDaGFyYWN0ZXIoc3RyaW5nLCBjb3VudCk7XG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICByZXR1cm4gQHJlcGVhdFNsb3dQYXRoKHN0cmluZywgY291bnQpO1xuIiBcCiAgICAi
fSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVQ
YWRTdGFydENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZVBhZFN0YXJ0Q29kZUxlbmd0
aCA9IDk0MzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlUGFk
U3RhcnRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJp
bmdQcm90b3R5cGVQYWRTdGFydENvZGUgPQogICAgIihmdW5jdGlvbiAobWF4TGVuZ3RoKVxuIiBc
CiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgaWYgKHRoaXMgPT0gbnVsbClcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9y
KFwiU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUg
bnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgc3RyaW5n
ID0gQHRvU3RyaW5nKHRoaXMpO1xuIiBcCiAgICAiICAgIG1heExlbmd0aCA9IEB0b0xlbmd0aCht
YXhMZW5ndGgpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHN0cmluZ0xlbmd0aCA9IHN0
cmluZy5sZW5ndGg7XG4iIFwKICAgICIgICAgaWYgKG1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGgp
XG4iIFwKICAgICIgICAgICAgIHJldHVybiBzdHJpbmc7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICB2YXIgZmlsbGVyO1xuIiBcCiAgICAiICAgIHZhciBmaWxsU3RyaW5nID0gQGFyZ3VtZW50KDEp
O1xuIiBcCiAgICAiICAgIGlmIChmaWxsU3RyaW5nID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAi
ICAgICAgICBmaWxsZXIgPSBcIiBcIjtcbiIgXAogICAgIiAgICBlbHNlIHtcbiIgXAogICAgIiAg
ICAgICAgZmlsbGVyID0gQHRvU3RyaW5nKGZpbGxTdHJpbmcpO1xuIiBcCiAgICAiICAgICAgICBp
ZiAoZmlsbGVyID09PSBcIlwiKVxuIiBcCiAgICAiICAgICAgICAgICAgcmV0dXJuIHN0cmluZztc
biIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAobWF4TGVuZ3RoID4g
QE1BWF9TVFJJTkdfTEVOR1RIKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgZmlsbExlbmd0aCA9IG1heExlbmd0
aCAtIHN0cmluZ0xlbmd0aDtcbiIgXAogICAgIiAgICB2YXIgdHJ1bmNhdGVkU3RyaW5nRmlsbGVy
O1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKGZpbGxlci5sZW5ndGggPT09IDEpXG4iIFwK
ICAgICIgICAgICAgIHRydW5jYXRlZFN0cmluZ0ZpbGxlciA9IEByZXBlYXRDaGFyYWN0ZXIoZmls
bGVyLCBmaWxsTGVuZ3RoKTtcbiIgXAogICAgIiAgICBlbHNlXG4iIFwKICAgICIgICAgICAgIHRy
dW5jYXRlZFN0cmluZ0ZpbGxlciA9IEByZXBlYXRDaGFyYWN0ZXJzU2xvd1BhdGgoZmlsbGVyLCBm
aWxsTGVuZ3RoKTtcbiIgXAogICAgIiAgICByZXR1cm4gdHJ1bmNhdGVkU3RyaW5nRmlsbGVyICsg
c3RyaW5nO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19zdHJpbmdQcm90b3R5cGVQYWRFbmRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVQ
YWRFbmRDb2RlTGVuZ3RoID0gOTQxOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19zdHJp
bmdQcm90b3R5cGVQYWRFbmRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3Qg
Y2hhciogc19zdHJpbmdQcm90b3R5cGVQYWRFbmRDb2RlID0KICAgICIoZnVuY3Rpb24gKG1heExl
bmd0aClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAg
IlxuIiBcCiAgICAiICAgIGlmICh0aGlzID09IG51bGwpXG4iIFwKICAgICIgICAgICAgIEB0aHJv
d1R5cGVFcnJvcihcIlN0cmluZy5wcm90b3R5cGUucGFkRW5kIHJlcXVpcmVzIHRoYXQgfHRoaXN8
IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZh
ciBzdHJpbmcgPSBAdG9TdHJpbmcodGhpcyk7XG4iIFwKICAgICIgICAgbWF4TGVuZ3RoID0gQHRv
TGVuZ3RoKG1heExlbmd0aCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgc3RyaW5nTGVu
Z3RoID0gc3RyaW5nLmxlbmd0aDtcbiIgXAogICAgIiAgICBpZiAobWF4TGVuZ3RoIDw9IHN0cmlu
Z0xlbmd0aClcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIHN0cmluZztcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIHZhciBmaWxsZXI7XG4iIFwKICAgICIgICAgdmFyIGZpbGxTdHJpbmcgPSBAYXJn
dW1lbnQoMSk7XG4iIFwKICAgICIgICAgaWYgKGZpbGxTdHJpbmcgPT09IEB1bmRlZmluZWQpXG4i
IFwKICAgICIgICAgICAgIGZpbGxlciA9IFwiIFwiO1xuIiBcCiAgICAiICAgIGVsc2Uge1xuIiBc
CiAgICAiICAgICAgICBmaWxsZXIgPSBAdG9TdHJpbmcoZmlsbFN0cmluZyk7XG4iIFwKICAgICIg
ICAgICAgIGlmIChmaWxsZXIgPT09IFwiXCIpXG4iIFwKICAgICIgICAgICAgICAgICByZXR1cm4g
c3RyaW5nO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChtYXhM
ZW5ndGggPiBATUFYX1NUUklOR19MRU5HVEgpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd091dE9m
TWVtb3J5RXJyb3IoKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciBmaWxsTGVuZ3RoID0g
bWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuIiBcCiAgICAiICAgIHZhciB0cnVuY2F0ZWRTdHJp
bmdGaWxsZXI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAoZmlsbGVyLmxlbmd0aCA9PT0g
MSlcbiIgXAogICAgIiAgICAgICAgdHJ1bmNhdGVkU3RyaW5nRmlsbGVyID0gQHJlcGVhdENoYXJh
Y3RlcihmaWxsZXIsIGZpbGxMZW5ndGgpO1xuIiBcCiAgICAiICAgIGVsc2VcbiIgXAogICAgIiAg
ICAgICAgdHJ1bmNhdGVkU3RyaW5nRmlsbGVyID0gQHJlcGVhdENoYXJhY3RlcnNTbG93UGF0aChm
aWxsZXIsIGZpbGxMZW5ndGgpO1xuIiBcCiAgICAiICAgIHJldHVybiBzdHJpbmcgKyB0cnVuY2F0
ZWRTdHJpbmdGaWxsZXI7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0
QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZUhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclN0cmlu
Z1JlcGxhY2VDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVIYXNPYnNlcnZhYmxlU2lk
ZUVmZmVjdHNGb3JTdHJpbmdSZXBsYWNlQ29kZUxlbmd0aCA9IDUyMjsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlSGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9y
U3RyaW5nUmVwbGFjZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX3N0cmluZ1Byb3RvdHlwZUhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclN0cmluZ1JlcGxh
Y2VDb2RlID0KICAgICIoZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZXIpIHtcbiIgXAogICAgIiAg
ICBpZiAocmVwbGFjZXIgIT09IEByZWdFeHBQcm90b3R5cGVTeW1ib2xSZXBsYWNlKVxuIiBcCiAg
ICAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIgXAogICAgIiAgICBcbiIgXAogICAgIiAgICBsZXQg
cmVnZXhwRXhlYyA9IEB0cnlHZXRCeUlkKHJlZ2V4cCwgXCJleGVjXCIpO1xuIiBcCiAgICAiICAg
IGlmIChyZWdleHBFeGVjICE9PSBAcmVnRXhwQnVpbHRpbkV4ZWMpXG4iIFwKICAgICIgICAgICAg
IHJldHVybiB0cnVlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0IHJlZ2V4cEdsb2JhbCA9
IEB0cnlHZXRCeUlkKHJlZ2V4cCwgXCJnbG9iYWxcIik7XG4iIFwKICAgICIgICAgaWYgKHJlZ2V4
cEdsb2JhbCAhPT0gQHJlZ0V4cFByb3RvR2xvYmFsR2V0dGVyKVxuIiBcCiAgICAiICAgICAgICBy
ZXR1cm4gdHJ1ZTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCByZWdleHBVbmljb2RlID0g
QHRyeUdldEJ5SWQocmVnZXhwLCBcInVuaWNvZGVcIik7XG4iIFwKICAgICIgICAgaWYgKHJlZ2V4
cFVuaWNvZGUgIT09IEByZWdFeHBQcm90b1VuaWNvZGVHZXR0ZXIpXG4iIFwKICAgICIgICAgICAg
IHJldHVybiB0cnVlO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJuICFAaXNSZWdFeHBP
YmplY3QocmVnZXhwKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlUmVwbGFjZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlND
OjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1By
b3RvdHlwZVJlcGxhY2VDb2RlTGVuZ3RoID0gNjY3OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5z
aWMgc19zdHJpbmdQcm90b3R5cGVSZXBsYWNlQ29kZUludHJpbnNpYyA9IEpTQzo6U3RyaW5nUHJv
dG90eXBlUmVwbGFjZUludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVSZXBs
YWNlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChzZWFyY2gsIHJlcGxhY2UpXG4iIFwKICAgICJ7XG4i
IFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAo
dGhpcyA9PSBudWxsKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJTdHJpbmcu
cHJvdG90eXBlLnJlcGxhY2UgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5k
ZWZpbmVkXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHNlYXJjaCAhPSBudWxsKSB7
XG4iIFwKICAgICIgICAgICAgIGxldCByZXBsYWNlciA9IHNlYXJjaC5AcmVwbGFjZVN5bWJvbDtc
biIgXAogICAgIiAgICAgICAgaWYgKHJlcGxhY2VyICE9PSBAdW5kZWZpbmVkKSB7XG4iIFwKICAg
ICIgICAgICAgICAgICBpZiAoIUBoYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JTdHJpbmdSZXBs
YWNlKHNlYXJjaCwgcmVwbGFjZXIpKVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIHJldHVybiBA
dG9TdHJpbmcodGhpcykuQHJlcGxhY2VVc2luZ1JlZ0V4cChzZWFyY2gsIHJlcGxhY2UpO1xuIiBc
CiAgICAiICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VyLkBjYWxsKHNlYXJjaCwgdGhpcywgcmVw
bGFjZSk7XG4iIFwKICAgICIgICAgICAgIH1cbiIgXAogICAgIiAgICB9XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICBsZXQgdGhpc1N0cmluZyA9IEB0b1N0cmluZyh0aGlzKTtcbiIgXAogICAgIiAg
ICBsZXQgc2VhcmNoU3RyaW5nID0gQHRvU3RyaW5nKHNlYXJjaCk7XG4iIFwKICAgICIgICAgcmV0
dXJuIHRoaXNTdHJpbmcuQHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChzZWFyY2hTdHJpbmcsIHJl
cGxhY2UpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19zdHJpbmdQcm90b3R5cGVHZXREZWZhdWx0Q29sbGF0b3JDb2RlQ29uc3RydWN0QWJpbGl0eSA9
IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJp
bmdQcm90b3R5cGVHZXREZWZhdWx0Q29sbGF0b3JDb2RlTGVuZ3RoID0gMTExOwpzdGF0aWMgY29u
c3QgSlNDOjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVHZXREZWZhdWx0Q29sbGF0b3JDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5
cGVHZXREZWZhdWx0Q29sbGF0b3JDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntc
biIgXAogICAgIiAgICByZXR1cm4gQGdldERlZmF1bHRDb2xsYXRvci5jb2xsYXRvciB8fCAoQGdl
dERlZmF1bHRDb2xsYXRvci5jb2xsYXRvciA9IG5ldyBAQ29sbGF0b3IoKSk7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZUxv
Y2FsZUNvbXBhcmVDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVMb2NhbGVDb21wYXJl
Q29kZUxlbmd0aCA9IDYyNDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJv
dG90eXBlTG9jYWxlQ29tcGFyZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZUxvY2FsZUNvbXBhcmVDb2RlID0KICAgICIoZnVuY3Rp
b24gKHRoYXQpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICJcbiIgXAog
ICAgIiAgICAvL1xuIiBcCiAgICAiICAgIGlmICh0aGlzID09IG51bGwpXG4iIFwKICAgICIgICAg
ICAgIEB0aHJvd1R5cGVFcnJvcihcIlN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZSByZXF1
aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJc
biIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgdmFyIHRoaXNT
dHJpbmcgPSBAdG9TdHJpbmcodGhpcyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBc
CiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgdmFyIHRoYXRTdHJpbmcgPSBAdG9TdHJpbmcodGhh
dCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIHZhciBsb2NhbGVz
ID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiICAgIHZhciBvcHRpb25zID0gQGFyZ3VtZW50KDIp
O1xuIiBcCiAgICAiICAgIGlmIChsb2NhbGVzID09PSBAdW5kZWZpbmVkICYmIG9wdGlvbnMgPT09
IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAgIHJldHVybiBAZ2V0RGVmYXVsdENvbGxhdG9y
KCkuY29tcGFyZSh0aGlzU3RyaW5nLCB0aGF0U3RyaW5nKTtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIC8vXG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICB2YXIgY29sbGF0b3IgPSBuZXcg
QENvbGxhdG9yKGxvY2FsZXMsIG9wdGlvbnMpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgLy9c
biIgXAogICAgIiAgICByZXR1cm4gY29sbGF0b3IuY29tcGFyZSh0aGlzU3RyaW5nLCB0aGF0U3Ry
aW5nKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNf
c3RyaW5nUHJvdG90eXBlU2VhcmNoQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5nUHJvdG90eXBlU2Vh
cmNoQ29kZUxlbmd0aCA9IDQ3NjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5n
UHJvdG90eXBlU2VhcmNoQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNo
YXIqIHNfc3RyaW5nUHJvdG90eXBlU2VhcmNoQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChyZWdleHAp
XG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIg
XAogICAgIiAgICBpZiAodGhpcyA9PSBudWxsKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBl
RXJyb3IoXCJTdHJpbmcucHJvdG90eXBlLnNlYXJjaCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3Qg
YmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAocmVn
ZXhwICE9IG51bGwpIHtcbiIgXAogICAgIiAgICAgICAgdmFyIHNlYXJjaGVyID0gcmVnZXhwLkBz
ZWFyY2hTeW1ib2w7XG4iIFwKICAgICIgICAgICAgIGlmIChzZWFyY2hlciAhPSBAdW5kZWZpbmVk
KVxuIiBcCiAgICAiICAgICAgICAgICAgcmV0dXJuIHNlYXJjaGVyLkBjYWxsKHJlZ2V4cCwgdGhp
cyk7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHRoaXNTdHJp
bmcgPSBAdG9TdHJpbmcodGhpcyk7XG4iIFwKICAgICIgICAgdmFyIGNyZWF0ZWRSZWdFeHAgPSBA
cmVnRXhwQ3JlYXRlKHJlZ2V4cCwgQHVuZGVmaW5lZCk7XG4iIFwKICAgICIgICAgcmV0dXJuIGNy
ZWF0ZWRSZWdFeHAuQHNlYXJjaFN5bWJvbCh0aGlzU3RyaW5nKTtcbiIgXAogICAgIn0pXG4iIFwK
OwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlU3BsaXRDb2Rl
Q29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0
Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVTcGxpdENvZGVMZW5ndGggPSA0MjI7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZVNwbGl0Q29kZUludHJpbnNp
YyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlU3BsaXRD
b2RlID0KICAgICIoZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIgICAgXG4iIFwKICAgICIgICAgaWYg
KHRoaXMgPT0gbnVsbClcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiU3RyaW5n
LnByb3RvdHlwZS5zcGxpdCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRl
ZmluZWRcIik7XG4iIFwKICAgICIgICAgXG4iIFwKICAgICIgICAgaWYgKHNlcGFyYXRvciAhPSBu
dWxsKSB7XG4iIFwKICAgICIgICAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvci5Ac3BsaXRT
eW1ib2w7XG4iIFwKICAgICIgICAgICAgIGlmIChzcGxpdHRlciAhPSBAdW5kZWZpbmVkKVxuIiBc
CiAgICAiICAgICAgICAgICAgcmV0dXJuIHNwbGl0dGVyLkBjYWxsKHNlcGFyYXRvciwgdGhpcywg
bGltaXQpO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIiAgICBcbiIgXAogICAgIiAgICByZXR1
cm4gQHN0cmluZ1NwbGl0RmFzdC5AY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiIgXAog
ICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90
eXBlU3RyaW5nQ29uY2F0U2xvd1BhdGhDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVT
dHJpbmdDb25jYXRTbG93UGF0aENvZGVMZW5ndGggPSAxOTc7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZVN0cmluZ0NvbmNhdFNsb3dQYXRoQ29kZUludHJpbnNp
YyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlU3RyaW5n
Q29uY2F0U2xvd1BhdGhDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAog
ICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHZhciByZXN1
bHQgPSBAdG9TdHJpbmcodGhpcyk7XG4iIFwKICAgICIgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSlcbiIgXAogICAgIiAgICAgICAg
cmVzdWx0ICs9IEB0b1N0cmluZyhhcmd1bWVudHNbaV0pO1xuIiBcCiAgICAiICAgIHJldHVybiBy
ZXN1bHQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X3N0cmluZ1Byb3RvdHlwZUNvbmNhdENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZUNv
bmNhdENvZGVMZW5ndGggPSAzMTA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmlu
Z1Byb3RvdHlwZUNvbmNhdENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX3N0cmluZ1Byb3RvdHlwZUNvbmNhdENvZGUgPQogICAgIihmdW5jdGlvbiAoYXJnIClc
biIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIGlmICh0aGlzID09IG51bGwpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVF
cnJvcihcIlN0cmluZy5wcm90b3R5cGUuY29uY2F0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBi
ZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGlmIChAYXJn
dW1lbnRDb3VudCgpID09PSAxKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gQHRvU3RyaW5nKHRo
aXMpICsgQHRvU3RyaW5nKGFyZyk7XG4iIFwKICAgICIgICAgcmV0dXJuIEB0YWlsQ2FsbEZvcndh
cmRBcmd1bWVudHMoQHN0cmluZ0NvbmNhdFNsb3dQYXRoLCB0aGlzKTtcbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlQ3JlYXRl
SFRNTENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RD
b25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZUNyZWF0ZUhUTUxDb2RlTGVuZ3Ro
ID0gNTE4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVDcmVh
dGVIVE1MQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3Ry
aW5nUHJvdG90eXBlQ3JlYXRlSFRNTENvZGUgPQogICAgIihmdW5jdGlvbiAoZnVuYywgc3RyaW5n
LCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICIgICAgaWYgKHN0cmluZyA9PSBudWxsKVxuIiBcCiAgICAiICAg
ICAgICBAdGhyb3dUeXBlRXJyb3IoYCR7ZnVuY30gcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJl
IG51bGwgb3IgdW5kZWZpbmVkYCk7XG4iIFwKICAgICIgICAgbGV0IFMgPSBAdG9TdHJpbmcoc3Ry
aW5nKTtcbiIgXAogICAgIiAgICBsZXQgcDEgPSBcIjxcIiArIHRhZztcbiIgXAogICAgIiAgICBp
ZiAoYXR0cmlidXRlKSB7XG4iIFwKICAgICIgICAgICAgIGxldCBWID0gQHRvU3RyaW5nKHZhbHVl
KTtcbiIgXAogICAgIiAgICAgICAgbGV0IGVzY2FwZWRWID0gVi5AcmVwbGFjZVVzaW5nUmVnRXhw
KC9cIi9nLCAnJnF1b3Q7Jyk7XG4iIFwKICAgICIgICAgICAgIHAxID0gcDEgKyBcIiBcIiArIEB0
b1N0cmluZyhhdHRyaWJ1dGUpICsgJz1cIicgKyBlc2NhcGVkViArICdcIidcbiIgXAogICAgIiAg
ICB9XG4iIFwKICAgICIgICAgbGV0IHAyID0gcDEgKyBcIj5cIlxuIiBcCiAgICAiICAgIGxldCBw
MyA9IHAyICsgUztcbiIgXAogICAgIiAgICBsZXQgcDQgPSBwMyArIFwiPC9cIiArIHRhZyArIFwi
PlwiO1xuIiBcCiAgICAiICAgIHJldHVybiBwNDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3Qg
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlQW5jaG9yQ29kZUNvbnN0cnVj
dEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3Qg
aW50IHNfc3RyaW5nUHJvdG90eXBlQW5jaG9yQ29kZUxlbmd0aCA9IDExMTsKc3RhdGljIGNvbnN0
IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlQW5jaG9yQ29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlQW5jaG9yQ29kZSA9
CiAgICAiKGZ1bmN0aW9uICh1cmwpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3Ry
aWN0XCI7XG4iIFwKICAgICIgICAgcmV0dXJuIEBjcmVhdGVIVE1MKFwiU3RyaW5nLnByb3RvdHlw
ZS5saW5rXCIsIHRoaXMsIFwiYVwiLCBcIm5hbWVcIiwgdXJsKVxuIiBcCiAgICAifSlcbiIgXAo7
Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVCaWdDb2RlQ29u
c3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpj
b25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVCaWdDb2RlTGVuZ3RoID0gMTA1OwpzdGF0aWMgY29u
c3QgSlNDOjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVCaWdDb2RlSW50cmluc2ljID0gSlND
OjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVCaWdDb2RlID0KICAg
ICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgIiAgICByZXR1cm4gQGNyZWF0ZUhUTUwoXCJTdHJpbmcucHJvdG90eXBlLmJpZ1wi
LCB0aGlzLCBcImJpZ1wiLCBcIlwiLCBcIlwiKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3Qg
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlQmxpbmtDb2RlQ29uc3RydWN0
QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBp
bnQgc19zdHJpbmdQcm90b3R5cGVCbGlua0NvZGVMZW5ndGggPSAxMDk7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZUJsaW5rQ29kZUludHJpbnNpYyA9IEpTQzo6
Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlQmxpbmtDb2RlID0KICAg
ICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgIiAgICByZXR1cm4gQGNyZWF0ZUhUTUwoXCJTdHJpbmcucHJvdG90eXBlLmJsaW5r
XCIsIHRoaXMsIFwiYmxpbmtcIiwgXCJcIiwgXCJcIik7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZUJvbGRDb2RlQ29uc3Ry
dWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25z
dCBpbnQgc19zdHJpbmdQcm90b3R5cGVCb2xkQ29kZUxlbmd0aCA9IDEwNDsKc3RhdGljIGNvbnN0
IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlQm9sZENvZGVJbnRyaW5zaWMgPSBKU0M6
Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZUJvbGRDb2RlID0KICAg
ICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgIiAgICByZXR1cm4gQGNyZWF0ZUhUTUwoXCJTdHJpbmcucHJvdG90eXBlLmJvbGRc
IiwgdGhpcywgXCJiXCIsIFwiXCIsIFwiXCIpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVGaXhlZENvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX3N0cmluZ1Byb3RvdHlwZUZpeGVkQ29kZUxlbmd0aCA9IDEwNjsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlRml4ZWRDb2RlSW50cmluc2ljID0gSlNDOjpO
b0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVGaXhlZENvZGUgPQogICAg
IihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xu
IiBcCiAgICAiICAgIHJldHVybiBAY3JlYXRlSFRNTChcIlN0cmluZy5wcm90b3R5cGUuZml4ZWRc
IiwgdGhpcywgXCJ0dFwiLCBcIlwiLCBcIlwiKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3Qg
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlRm9udGNvbG9yQ29kZUNvbnN0
cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29u
c3QgaW50IHNfc3RyaW5nUHJvdG90eXBlRm9udGNvbG9yQ29kZUxlbmd0aCA9IDEyNTsKc3RhdGlj
IGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlRm9udGNvbG9yQ29kZUludHJp
bnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlRm9u
dGNvbG9yQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjb2xvcilcbiIgXAogICAgIntcbiIgXAogICAg
IiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIiAgICByZXR1cm4gQGNyZWF0ZUhUTUwoXCJT
dHJpbmcucHJvdG90eXBlLmZvbnRjb2xvclwiLCB0aGlzLCBcImZvbnRcIiwgXCJjb2xvclwiLCBj
b2xvcik7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X3N0cmluZ1Byb3RvdHlwZUZvbnRzaXplQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5nUHJvdG90eXBl
Rm9udHNpemVDb2RlTGVuZ3RoID0gMTIxOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19z
dHJpbmdQcm90b3R5cGVGb250c2l6ZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpj
b25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZUZvbnRzaXplQ29kZSA9CiAgICAiKGZ1bmN0aW9u
IChzaXplKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAg
ICAiICAgIHJldHVybiBAY3JlYXRlSFRNTChcIlN0cmluZy5wcm90b3R5cGUuZm9udHNpemVcIiwg
dGhpcywgXCJmb250XCIsIFwic2l6ZVwiLCBzaXplKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29u
c3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlSXRhbGljc0NvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZUl0YWxpY3NDb2RlTGVuZ3RoID0gMTA3OwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVJdGFsaWNzQ29kZUludHJpbnNp
YyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlSXRhbGlj
c0NvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNl
IHN0cmljdFwiO1xuIiBcCiAgICAiICAgIHJldHVybiBAY3JlYXRlSFRNTChcIlN0cmluZy5wcm90
b3R5cGUuaXRhbGljc1wiLCB0aGlzLCBcImlcIiwgXCJcIiwgXCJcIik7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZUxpbmtD
b2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3Ry
dWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVMaW5rQ29kZUxlbmd0aCA9IDExMTsKc3Rh
dGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlTGlua0NvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZUxpbmtD
b2RlID0KICAgICIoZnVuY3Rpb24gKHVybClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICBcInVz
ZSBzdHJpY3RcIjtcbiIgXAogICAgIiAgICByZXR1cm4gQGNyZWF0ZUhUTUwoXCJTdHJpbmcucHJv
dG90eXBlLmxpbmtcIiwgdGhpcywgXCJhXCIsIFwiaHJlZlwiLCB1cmwpXG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZVNtYWxs
Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdDsKY29uc3QgaW50IHNfc3RyaW5nUHJvdG90eXBlU21hbGxDb2RlTGVuZ3RoID0gMTA5Owpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVTbWFsbENvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZVNt
YWxsQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIgICAgcmV0dXJuIEBjcmVhdGVIVE1MKFwiU3RyaW5nLnBy
b3RvdHlwZS5zbWFsbFwiLCB0aGlzLCBcInNtYWxsXCIsIFwiXCIsIFwiXCIpO1xuIiBcCiAgICAi
fSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVT
dHJpa2VDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVTdHJpa2VDb2RlTGVuZ3RoID0g
MTExOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVTdHJpa2VD
b2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90
b3R5cGVTdHJpa2VDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAg
IiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIiAgICByZXR1cm4gQGNyZWF0ZUhUTUwoXCJT
dHJpbmcucHJvdG90eXBlLnN0cmlrZVwiLCB0aGlzLCBcInN0cmlrZVwiLCBcIlwiLCBcIlwiKTtc
biIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5n
UHJvdG90eXBlU3ViQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5nUHJvdG90eXBlU3ViQ29kZUxlbmd0
aCA9IDEwNTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlU3Vi
Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJv
dG90eXBlU3ViQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIg
ICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIgICAgcmV0dXJuIEBjcmVhdGVIVE1MKFwiU3Ry
aW5nLnByb3RvdHlwZS5zdWJcIiwgdGhpcywgXCJzdWJcIiwgXCJcIiwgXCJcIik7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlw
ZVN1cENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RD
b25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZVN1cENvZGVMZW5ndGggPSAxMDU7
CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZVN1cENvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZVN1
cENvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNl
IHN0cmljdFwiO1xuIiBcCiAgICAiICAgIHJldHVybiBAY3JlYXRlSFRNTChcIlN0cmluZy5wcm90
b3R5cGUuc3VwXCIsIHRoaXMsIFwic3VwXCIsIFwiXCIsIFwiXCIpO1xuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5Q29uc3RydWN0b3JP
ZkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25z
dHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlDb25zdHJ1Y3Rvck9mQ29kZUxlbmd0aCA9IDQw
MTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yT2ZD
b2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5
Q29uc3RydWN0b3JPZkNvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAg
ICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiICAgIGxldCBsZW4gPSBhcmd1bWVudHMu
bGVuZ3RoO1xuIiBcCiAgICAiICAgIGxldCBjb25zdHJ1Y3RGdW5jdGlvbiA9IHRoaXMuQGFsbG9j
YXRlVHlwZWRBcnJheTtcbiIgXAogICAgIiAgICBpZiAoY29uc3RydWN0RnVuY3Rpb24gPT09IEB1
bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJyYXku
b2YgcmVxdWlyZXMgaXRzIHRoaXMgYXJndW1lbnQgdG8gc3ViY2xhc3MgYSBUeXBlZEFycmF5IGNv
bnN0cnVjdG9yXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0IHJlc3VsdCA9IGNvbnN0
cnVjdEZ1bmN0aW9uKGxlbik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGxlbjsgaSsrKVxuIiBcCiAgICAiICAgICAgICByZXN1bHRbaV0gPSBhcmd1bWVudHNb
aV07XG4iIFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5Q29uc3RydWN0
b3JGcm9tQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5v
dENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yRnJvbUNvZGVMZW5n
dGggPSAyMTU5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5Q29uc3Ry
dWN0b3JGcm9tQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNf
dHlwZWRBcnJheUNvbnN0cnVjdG9yRnJvbUNvZGUgPQogICAgIihmdW5jdGlvbiAoaXRlbXMgKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgbGV0IG1hcEZuID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgbGV0IHRoaXNBcmc7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAobWFwRm4gIT09IEB1
bmRlZmluZWQpIHtcbiIgXAogICAgIiAgICAgICAgaWYgKHR5cGVvZiBtYXBGbiAhPT0gXCJmdW5j
dGlvblwiKVxuIiBcCiAgICAiICAgICAgICAgICAgQHRocm93VHlwZUVycm9yKFwiVHlwZWRBcnJh
eS5mcm9tIHJlcXVpcmVzIHRoYXQgdGhlIHNlY29uZCBhcmd1bWVudCwgd2hlbiBwcm92aWRlZCwg
YmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICB0aGlzQXJnID0g
QGFyZ3VtZW50KDIpO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxl
dCBhcnJheUxpa2UgPSBAdG9PYmplY3QoaXRlbXMsIFwiVHlwZWRBcnJheS5mcm9tIHJlcXVpcmVz
IGFuIGFycmF5LWxpa2Ugb2JqZWN0IC0gbm90IG51bGwgb3IgdW5kZWZpbmVkXCIpO1xuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgbGV0IGl0ZXJhdG9yTWV0aG9kID0gaXRlbXMuQGl0ZXJhdG9yU3lt
Ym9sO1xuIiBcCiAgICAiICAgIGlmIChpdGVyYXRvck1ldGhvZCAhPSBudWxsKSB7XG4iIFwKICAg
ICIgICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JNZXRob2QgIT09IFwiZnVuY3Rpb25cIilcbiIg
XAogICAgIiAgICAgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJyYXkuZnJvbSByZXF1
aXJlcyB0aGF0IHRoZSBwcm9wZXJ0eSBvZiB0aGUgZmlyc3QgYXJndW1lbnQsIGl0ZW1zW1N5bWJv
bC5pdGVyYXRvcl0sIHdoZW4gZXhpc3RzLCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgICAgIGxldCBhY2N1bXVsYXRvciA9IFtdO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgICAgIGxldCBrID0gMDtcbiIgXAogICAgIiAgICAgICAgbGV0IGl0ZXJhdG9yID0gaXRl
cmF0b3JNZXRob2QuQGNhbGwoaXRlbXMpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgIC8v
XG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgIC8vXG4iIFwKICAgICIgICAg
ICAgIGxldCB3cmFwcGVyID0ge307XG4iIFwKICAgICIgICAgICAgIHdyYXBwZXIuQGl0ZXJhdG9y
U3ltYm9sID0gZnVuY3Rpb24oKSB7IHJldHVybiBpdGVyYXRvcjsgfVxuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHdyYXBwZXIpIHtcbiIgXAogICAgIiAgICAg
ICAgICAgIGlmIChtYXBGbilcbiIgXAogICAgIiAgICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJl
Y3QoYWNjdW11bGF0b3IsIGssIHRoaXNBcmcgPT09IEB1bmRlZmluZWQgPyBtYXBGbih2YWx1ZSwg
aykgOiBtYXBGbi5AY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaykpO1xuIiBcCiAgICAiICAgICAgICAg
ICAgZWxzZVxuIiBcCiAgICAiICAgICAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChhY2N1bXVs
YXRvciwgaywgdmFsdWUpO1xuIiBcCiAgICAiICAgICAgICAgICAgaysrO1xuIiBcCiAgICAiICAg
ICAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgbGV0IGNvbnN0cnVjdEZ1bmN0aW9u
ID0gdGhpcy5AYWxsb2NhdGVUeXBlZEFycmF5O1xuIiBcCiAgICAiICAgICAgICBpZiAoY29uc3Ry
dWN0RnVuY3Rpb24gPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAgICAgICBAdGhyb3dU
eXBlRXJyb3IoXCJUeXBlZEFycmF5LmZyb20gcmVxdWlyZXMgaXRzIHRoaXMgYXJndW1lbnQgc3Vi
Y2xhc3MgYSBUeXBlZEFycmF5IGNvbnN0cnVjdG9yXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgICAgIGxldCByZXN1bHQgPSBjb25zdHJ1Y3RGdW5jdGlvbihrKTtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGs7IGkrKykgXG4iIFwKICAgICIgICAg
ICAgICAgICByZXN1bHRbaV0gPSBhY2N1bXVsYXRvcltpXTtcbiIgXAogICAgIlxuIiBcCiAgICAi
XG4iIFwKICAgICIgICAgICAgIHJldHVybiByZXN1bHQ7XG4iIFwKICAgICIgICAgfVxuIiBcCiAg
ICAiXG4iIFwKICAgICIgICAgbGV0IGFycmF5TGlrZUxlbmd0aCA9IEB0b0xlbmd0aChhcnJheUxp
a2UubGVuZ3RoKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCBjb25zdHJ1Y3RGdW5jdGlv
biA9IHRoaXMuQGFsbG9jYXRlVHlwZWRBcnJheTtcbiIgXAogICAgIiAgICBpZiAoY29uc3RydWN0
RnVuY3Rpb24gPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJv
cihcInRoaXMgZG9lcyBub3Qgc3ViY2xhc3MgYSBUeXBlZEFycmF5IGNvbnN0cnVjdG9yXCIpO1xu
IiBcCiAgICAiXG4iIFwKICAgICIgICAgbGV0IHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGFy
cmF5TGlrZUxlbmd0aCk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBsZXQgayA9IDA7XG4iIFwK
ICAgICIgICAgd2hpbGUgKGsgPCBhcnJheUxpa2VMZW5ndGgpIHtcbiIgXAogICAgIiAgICAgICAg
bGV0IHZhbHVlID0gYXJyYXlMaWtlW2tdO1xuIiBcCiAgICAiICAgICAgICBpZiAobWFwRm4pXG4i
IFwKICAgICIgICAgICAgICAgICByZXN1bHRba10gPSB0aGlzQXJnID09PSBAdW5kZWZpbmVkID8g
bWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFsdWUsIGspO1xuIiBcCiAg
ICAiICAgICAgICBlbHNlXG4iIFwKICAgICIgICAgICAgICAgICByZXN1bHRba10gPSB2YWx1ZTtc
biIgXAogICAgIiAgICAgICAgaysrO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIHJldHVybiByZXN1bHQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlSW50OEFycmF5Q29k
ZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dDsKY29uc3QgaW50IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVJbnQ4QXJyYXlDb2Rl
TGVuZ3RoID0gNTk7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3R5cGVkQXJyYXlDb25z
dHJ1Y3RvckFsbG9jYXRlSW50OEFycmF5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7
CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVJbnQ4QXJyYXlDb2Rl
ID0KICAgICIoZnVuY3Rpb24gKGxlbmd0aClcbiIgXAogICAgIntcbiIgXAogICAgIiAgICByZXR1
cm4gbmV3IEBJbnQ4QXJyYXkobGVuZ3RoKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlND
OjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVJbnQxNkFy
cmF5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENv
bnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVJbnQxNkFy
cmF5Q29kZUxlbmd0aCA9IDY0OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFy
cmF5Q29uc3RydWN0b3JBbGxvY2F0ZUludDE2QXJyYXlDb2RlSW50cmluc2ljID0gSlNDOjpOb0lu
dHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZUludDE2
QXJyYXlDb2RlID0KICAgICIoZnVuY3Rpb24gKGxlbmd0aClcbiIgXAogICAgIntcbiIgXAogICAg
IiAgICByZXR1cm4gbmV3IEBJbnQxNkFycmF5KGxlbmd0aCk7ICAgIFxuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5Q29uc3RydWN0b3JB
bGxvY2F0ZUludDMyQXJyYXlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5Q29uc3RydWN0b3JB
bGxvY2F0ZUludDMyQXJyYXlDb2RlTGVuZ3RoID0gNjM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJp
bnNpYyBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlSW50MzJBcnJheUNvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlDb25zdHJ1Y3Rv
ckFsbG9jYXRlSW50MzJBcnJheUNvZGUgPQogICAgIihmdW5jdGlvbiAobGVuZ3RoKVxuIiBcCiAg
ICAie1xuIiBcCiAgICAiICAgIHJldHVybiBuZXcgQEludDMyQXJyYXkobGVuZ3RoKTsgICBcbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJh
eUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50MzJBcnJheUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlND
OjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJy
YXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDMyQXJyYXlDb2RlTGVuZ3RoID0gNjE7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDMy
QXJyYXlDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBl
ZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQzMkFycmF5Q29kZSA9CiAgICAiKGZ1bmN0aW9u
IChsZW5ndGgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgcmV0dXJuIG5ldyBAVWludDMyQXJy
YXkobGVuZ3RoKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmls
aXR5IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50MTZBcnJheUNvZGVDb25zdHJ1
Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0
IGludCBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDE2QXJyYXlDb2RlTGVuZ3Ro
ID0gNjQ7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3R5cGVkQXJyYXlDb25zdHJ1Y3Rv
ckFsbG9jYXRlVWludDE2QXJyYXlDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29u
c3QgY2hhciogc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQxNkFycmF5Q29kZSA9
CiAgICAiKGZ1bmN0aW9uIChsZW5ndGgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgcmV0dXJu
IG5ldyBAVWludDE2QXJyYXkobGVuZ3RoKTsgICBcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3Qg
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50
OEFycmF5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5v
dENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50
OEFycmF5Q29kZUxlbmd0aCA9IDYzOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBl
ZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQ4QXJyYXlDb2RlSW50cmluc2ljID0gSlNDOjpO
b0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVp
bnQ4QXJyYXlDb2RlID0KICAgICIoZnVuY3Rpb24gKGxlbmd0aClcbiIgXAogICAgIntcbiIgXAog
ICAgIiAgICByZXR1cm4gbmV3IEBVaW50OEFycmF5KGxlbmd0aCk7ICAgXG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlDb25zdHJ1Y3Rv
ckFsbG9jYXRlVWludDhDbGFtcGVkQXJyYXlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5Q29u
c3RydWN0b3JBbGxvY2F0ZVVpbnQ4Q2xhbXBlZEFycmF5Q29kZUxlbmd0aCA9IDY3OwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQ4
Q2xhbXBlZEFycmF5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIq
IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50OENsYW1wZWRBcnJheUNvZGUgPQog
ICAgIihmdW5jdGlvbiAobGVuZ3RoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIHJldHVybiBu
ZXcgQFVpbnQ4Q2xhbXBlZEFycmF5KGxlbmd0aCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0
IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlRmxv
YXQzMkFycmF5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNh
bm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVG
bG9hdDMyQXJyYXlDb2RlTGVuZ3RoID0gNjI7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlRmxvYXQzMkFycmF5Q29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxs
b2NhdGVGbG9hdDMyQXJyYXlDb2RlID0KICAgICIoZnVuY3Rpb24gKGxlbmd0aClcbiIgXAogICAg
IntcbiIgXAogICAgIiAgICByZXR1cm4gbmV3IEBGbG9hdDMyQXJyYXkobGVuZ3RoKTtcbiIgXAog
ICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheUNv
bnN0cnVjdG9yQWxsb2NhdGVGbG9hdDY0QXJyYXlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6
Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5
Q29uc3RydWN0b3JBbGxvY2F0ZUZsb2F0NjRBcnJheUNvZGVMZW5ndGggPSA2MjsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVGbG9hdDY0
QXJyYXlDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBl
ZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZUZsb2F0NjRBcnJheUNvZGUgPQogICAgIihmdW5jdGlv
biAobGVuZ3RoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIHJldHVybiBuZXcgQEZsb2F0NjRB
cnJheShsZW5ndGgpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFi
aWxpdHkgc190eXBlZEFycmF5UHJvdG90eXBlVHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvckNv
ZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlQcm90b3R5cGVUeXBlZEFycmF5U3BlY2llc0NvbnN0
cnVjdG9yQ29kZUxlbmd0aCA9IDQ3MTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlw
ZWRBcnJheVByb3RvdHlwZVR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3JDb2RlSW50cmluc2lj
ID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5UHJvdG90eXBlVHlw
ZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvckNvZGUgPQogICAgIihmdW5jdGlvbiAodmFsdWUpXG4i
IFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIgICAgbGV0
IGNvbnN0cnVjdG9yID0gdmFsdWUuY29uc3RydWN0b3I7XG4iIFwKICAgICIgICAgaWYgKGNvbnN0
cnVjdG9yID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiICAgICAgICByZXR1cm4gQHR5cGVkQXJy
YXlHZXRPcmlnaW5hbENvbnN0cnVjdG9yKHZhbHVlKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
IGlmICghQGlzT2JqZWN0KGNvbnN0cnVjdG9yKSlcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlw
ZUVycm9yKFwifHRoaXN8LmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3Qgb3IgdW5kZWZpbmVk
XCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5A
c3BlY2llc1N5bWJvbDtcbiIgXAogICAgIiAgICBpZiAoY29uc3RydWN0b3IgPT0gbnVsbClcbiIg
XAogICAgIiAgICAgICAgcmV0dXJuIEB0eXBlZEFycmF5R2V0T3JpZ2luYWxDb25zdHJ1Y3Rvcih2
YWx1ZSk7XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICAvL1xuIiBcCiAgICAiICAgIC8v
XG4iIFwKICAgICIgICAgLy9cbiIgXAogICAgIiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQ
cm90b3R5cGVUeXBlZEFycmF5Q2xhbXBBcmd1bWVudFRvU3RhcnRPckVuZENvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX3R5cGVkQXJyYXlQcm90b3R5cGVUeXBlZEFycmF5Q2xhbXBBcmd1bWVudFRvU3RhcnRPckVu
ZENvZGVMZW5ndGggPSAyODM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3R5cGVkQXJy
YXlQcm90b3R5cGVUeXBlZEFycmF5Q2xhbXBBcmd1bWVudFRvU3RhcnRPckVuZENvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVU
eXBlZEFycmF5Q2xhbXBBcmd1bWVudFRvU3RhcnRPckVuZENvZGUgPQogICAgIihmdW5jdGlvbiAo
dmFsdWUsIGxlbmd0aCwgdW5kZWZpbmVkVmFsdWUpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAg
XCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAodmFsdWUgPT09IEB1
bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAgIHJldHVybiB1bmRlZmluZWRWYWx1ZTtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIGxldCBpbnQgPSBAdG9JbnRlZ2VyKHZhbHVlKTtcbiIgXAogICAg
IiAgICBpZiAoaW50IDwgMCkge1xuIiBcCiAgICAiICAgICAgICBpbnQgKz0gbGVuZ3RoO1xuIiBc
CiAgICAiICAgICAgICByZXR1cm4gaW50IDwgMCA/IDAgOiBpbnQ7XG4iIFwKICAgICIgICAgfVxu
IiBcCiAgICAiICAgIHJldHVybiBpbnQgPiBsZW5ndGggPyBsZW5ndGggOiBpbnQ7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQcm90
b3R5cGVWYWx1ZXNDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5UHJvdG90eXBlVmFsdWVzQ29k
ZUxlbmd0aCA9IDE0MjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVBy
b3RvdHlwZVZhbHVlc0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX3R5cGVkQXJyYXlQcm90b3R5cGVWYWx1ZXNDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIg
XAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIiAgICBAdHlw
ZWRBcnJheUxlbmd0aCh0aGlzKTtcbiIgXAogICAgIiAgICByZXR1cm4gbmV3IEBjcmVhdGVBcnJh
eUl0ZXJhdG9yKHRoaXMsIFwidmFsdWVcIiwgQGFycmF5SXRlcmF0b3JWYWx1ZU5leHQpO1xuIiBc
CiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5
UHJvdG90eXBlS2V5c0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlQcm90b3R5cGVLZXlzQ29k
ZUxlbmd0aCA9IDEzODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVBy
b3RvdHlwZUtleXNDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciog
c190eXBlZEFycmF5UHJvdG90eXBlS2V5c0NvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAg
ICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiICAgIEB0eXBlZEFy
cmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAgICAiICAgIHJldHVybiBuZXcgQGNyZWF0ZUFycmF5SXRl
cmF0b3IodGhpcywgXCJrZXlcIiwgQGFycmF5SXRlcmF0b3JLZXlOZXh0KTtcbiIgXAogICAgIn0p
XG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheVByb3RvdHlw
ZUVudHJpZXNDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5UHJvdG90eXBlRW50cmllc0NvZGVM
ZW5ndGggPSAxNDk7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3R5cGVkQXJyYXlQcm90
b3R5cGVFbnRyaWVzQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIq
IHNfdHlwZWRBcnJheVByb3RvdHlwZUVudHJpZXNDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIg
XAogICAgIntcbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIiAgICBAdHlw
ZWRBcnJheUxlbmd0aCh0aGlzKTtcbiIgXAogICAgIiAgICByZXR1cm4gbmV3IEBjcmVhdGVBcnJh
eUl0ZXJhdG9yKHRoaXMsIFwia2V5K3ZhbHVlXCIsIEBhcnJheUl0ZXJhdG9yS2V5VmFsdWVOZXh0
KTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlw
ZWRBcnJheVByb3RvdHlwZUV2ZXJ5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVByb3RvdHlw
ZUV2ZXJ5Q29kZUxlbmd0aCA9IDM4OTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlw
ZWRBcnJheVByb3RvdHlwZUV2ZXJ5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNv
bnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZUV2ZXJ5Q29kZSA9CiAgICAiKGZ1bmN0aW9u
IChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICIgICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAg
ICAiICAgIHZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAg
ICBAdGhyb3dUeXBlRXJyb3IoXCJUeXBlZEFycmF5LnByb3RvdHlwZS5ldmVyeSBjYWxsYmFjayBt
dXN0IGJlIGEgZnVuY3Rpb25cIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4iIFwKICAgICIgICAgICAgIGlmICghY2FsbGJhY2su
QGNhbGwodGhpc0FyZywgdGhpc1tpXSwgaSwgdGhpcykpXG4iIFwKICAgICIgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0
dXJuIHRydWU7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaWxsQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVBy
b3RvdHlwZUZpbGxDb2RlTGVuZ3RoID0gMzYzOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMg
c190eXBlZEFycmF5UHJvdG90eXBlRmlsbENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2lj
Owpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaWxsQ29kZSA9CiAgICAiKGZ1bmN0
aW9uICh2YWx1ZSApXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICBsZXQgbGVuZ3RoID0gQHR5cGVkQXJyYXlMZW5ndGgodGhp
cyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBsZXQgc3RhcnQgPSBAYXJndW1lbnQoMSk7XG4i
IFwKICAgICIgICAgbGV0IGVuZCA9IEBhcmd1bWVudCgyKTtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIHN0YXJ0ID0gQHR5cGVkQXJyYXlDbGFtcEFyZ3VtZW50VG9TdGFydE9yRW5kKHN0YXJ0LCBs
ZW5ndGgsIDApO1xuIiBcCiAgICAiICAgIGVuZCA9IEB0eXBlZEFycmF5Q2xhbXBBcmd1bWVudFRv
U3RhcnRPckVuZChlbmQsIGxlbmd0aCwgbGVuZ3RoKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
IGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKVxuIiBcCiAgICAiICAgICAgICB0aGlz
W2ldID0gdmFsdWU7XG4iIFwKICAgICIgICAgcmV0dXJuIHRoaXM7XG4iIFwKICAgICJ9KVxuIiBc
CjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaW5k
Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVByb3RvdHlwZUZpbmRDb2RlTGVuZ3RoID0gNDE2
OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5UHJvdG90eXBlRmluZENv
ZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlQ
cm90b3R5cGVGaW5kQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7
XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIgICAgdmFyIGxlbmd0aCA9
IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAgICAiICAgIHZhciB0aGlzQXJnID0gQGFy
Z3VtZW50KDEpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAh
PT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJUeXBl
ZEFycmF5LnByb3RvdHlwZS5maW5kIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIg
XAogICAgIlxuIiBcCiAgICAiICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biIgXAogICAgIiAgICAgICAgbGV0IGVsZW0gPSB0aGlzW2ldO1xuIiBcCiAgICAiICAgICAgICBp
ZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywgZWxlbSwgaSwgdGhpcykpXG4iIFwKICAgICIgICAg
ICAgICAgICByZXR1cm4gZWxlbTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICIgICAgcmV0dXJu
IEB1bmRlZmluZWQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaW5kSW5kZXhDb2RlQ29uc3RydWN0QWJpbGl0eSA9
IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBl
ZEFycmF5UHJvdG90eXBlRmluZEluZGV4Q29kZUxlbmd0aCA9IDM4NTsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVByb3RvdHlwZUZpbmRJbmRleENvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaW5k
SW5kZXhDb2RlID0KICAgICIoZnVuY3Rpb24gKGNhbGxiYWNrIClcbiIgXAogICAgIntcbiIgXAog
ICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIiAgICB2YXIgbGVuZ3RoID0gQHR5cGVk
QXJyYXlMZW5ndGgodGhpcyk7XG4iIFwKICAgICIgICAgdmFyIHRoaXNBcmcgPSBAYXJndW1lbnQo
MSk7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1
bmN0aW9uXCIpXG4iIFwKICAgICIgICAgICAgIEB0aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJyYXku
cHJvdG90eXBlLmZpbmRJbmRleCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4iIFwK
ICAgICJcbiIgXAogICAgIiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4i
IFwKICAgICIgICAgICAgIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCB0aGlzW2ldLCBpLCB0
aGlzKSlcbiIgXAogICAgIiAgICAgICAgICAgIHJldHVybiBpO1xuIiBcCiAgICAiICAgIH1cbiIg
XAogICAgIiAgICByZXR1cm4gLTE7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVGb3JFYWNoQ29kZUNvbnN0cnVjdEFi
aWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50
IHNfdHlwZWRBcnJheVByb3RvdHlwZUZvckVhY2hDb2RlTGVuZ3RoID0gMzM0OwpzdGF0aWMgY29u
c3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5UHJvdG90eXBlRm9yRWFjaENvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVG
b3JFYWNoQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICIgICAgdmFyIGxlbmd0aCA9IEB0eXBl
ZEFycmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAgICAiICAgIHZhciB0aGlzQXJnID0gQGFyZ3VtZW50
KDEpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJm
dW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJUeXBlZEFycmF5
LnByb3RvdHlwZS5mb3JFYWNoIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4iIFwK
ICAgICIgICAgICAgIGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIHRoaXNbaV0sIGksIHRoaXMpO1xu
IiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFy
cmF5UHJvdG90eXBlU29tZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlQcm90b3R5cGVTb21l
Q29kZUxlbmd0aCA9IDM5NDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJh
eVByb3RvdHlwZVNvbWVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hh
ciogc190eXBlZEFycmF5UHJvdG90eXBlU29tZUNvZGUgPQogICAgIihmdW5jdGlvbiAoY2FsbGJh
Y2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAgXCJ1c2Ugc3Ry
aWN0XCI7XG4iIFwKICAgICIgICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMp
O1xuIiBcCiAgICAiICAgIHZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiXG4i
IFwKICAgICIgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAg
ICAiICAgICAgICBAdGhyb3dUeXBlRXJyb3IoXCJUeXBlZEFycmF5LnByb3RvdHlwZS5zb21lIGNh
bGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiIgXAogICAgIiAgICAgICAgaWYgKGNh
bGxiYWNrLkBjYWxsKHRoaXNBcmcsIHRoaXNbaV0sIGksIHRoaXMpKVxuIiBcCiAgICAiICAgICAg
ICAgICAgcmV0dXJuIHRydWU7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgcmV0dXJuIGZhbHNlO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVj
dEFiaWxpdHkgc190eXBlZEFycmF5UHJvdG90eXBlU29ydENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0g
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVk
QXJyYXlQcm90b3R5cGVTb3J0Q29kZUxlbmd0aCA9IDE1NDA7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3R5cGVkQXJyYXlQcm90b3R5cGVTb3J0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZVNvcnRDb2RlID0KICAg
ICIoZnVuY3Rpb24gKGNvbXBhcmF0b3IpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgICAgLy9cbiIg
XAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGZ1bmN0
aW9uIG1pbihhLCBiKVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAgIiAgICAgICAgcmV0dXJuIGEg
PCBiID8gYSA6IGI7XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZnVu
Y3Rpb24gbWVyZ2UoZHN0LCBzcmMsIHNyY0luZGV4LCBzcmNFbmQsIHdpZHRoLCBjb21wYXJhdG9y
KVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAgIiAgICAgICAgdmFyIGxlZnQgPSBzcmNJbmRleDtc
biIgXAogICAgIiAgICAgICAgdmFyIGxlZnRFbmQgPSBtaW4obGVmdCArIHdpZHRoLCBzcmNFbmQp
O1xuIiBcCiAgICAiICAgICAgICB2YXIgcmlnaHQgPSBsZWZ0RW5kO1xuIiBcCiAgICAiICAgICAg
ICB2YXIgcmlnaHRFbmQgPSBtaW4ocmlnaHQgKyB3aWR0aCwgc3JjRW5kKTtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgICAgICBmb3IgKHZhciBkc3RJbmRleCA9IGxlZnQ7IGRzdEluZGV4IDwgcmln
aHRFbmQ7ICsrZHN0SW5kZXgpIHtcbiIgXAogICAgIiAgICAgICAgICAgIGlmIChyaWdodCA8IHJp
Z2h0RW5kKSB7XG4iIFwKICAgICIgICAgICAgICAgICAgICAgaWYgKGxlZnQgPj0gbGVmdEVuZCB8
fCBjb21wYXJhdG9yKHNyY1tyaWdodF0sIHNyY1tsZWZ0XSkgPCAwKSB7XG4iIFwKICAgICIgICAg
ICAgICAgICAgICAgICAgIGRzdFtkc3RJbmRleF0gPSBzcmNbcmlnaHQrK107XG4iIFwKICAgICIg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuIiBcCiAgICAiICAgICAgICAgICAgICAgIH1c
biIgXAogICAgIiAgICAgICAgICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgICAgICAgICAg
ZHN0W2RzdEluZGV4XSA9IHNyY1tsZWZ0KytdO1xuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAg
ICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZnVuY3Rpb24gbWVyZ2VTb3J0KGFycmF5
LCB2YWx1ZUNvdW50LCBjb21wYXJhdG9yKVxuIiBcCiAgICAiICAgIHtcbiIgXAogICAgIiAgICAg
ICAgdmFyIGJ1ZmZlciA9IFsgXTtcbiIgXAogICAgIiAgICAgICAgYnVmZmVyLmxlbmd0aCA9IHZh
bHVlQ291bnQ7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAgdmFyIGRzdCA9IGJ1ZmZlcjtc
biIgXAogICAgIiAgICAgICAgdmFyIHNyYyA9IGFycmF5O1xuIiBcCiAgICAiXG4iIFwKICAgICIg
ICAgICAgIGZvciAodmFyIHdpZHRoID0gMTsgd2lkdGggPCB2YWx1ZUNvdW50OyB3aWR0aCAqPSAy
KSB7XG4iIFwKICAgICIgICAgICAgICAgICBmb3IgKHZhciBzcmNJbmRleCA9IDA7IHNyY0luZGV4
IDwgdmFsdWVDb3VudDsgc3JjSW5kZXggKz0gMiAqIHdpZHRoKVxuIiBcCiAgICAiICAgICAgICAg
ICAgICAgIG1lcmdlKGRzdCwgc3JjLCBzcmNJbmRleCwgdmFsdWVDb3VudCwgd2lkdGgsIGNvbXBh
cmF0b3IpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgICAgICAgICB2YXIgdG1wID0gc3JjO1xu
IiBcCiAgICAiICAgICAgICAgICAgc3JjID0gZHN0O1xuIiBcCiAgICAiICAgICAgICAgICAgZHN0
ID0gdG1wO1xuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICJcbiIgXAogICAgIiAgICAgICAg
aWYgKHNyYyAhPSBhcnJheSkge1xuIiBcCiAgICAiICAgICAgICAgICAgZm9yKHZhciBpID0gMDsg
aSA8IHZhbHVlQ291bnQ7IGkrKylcbiIgXAogICAgIiAgICAgICAgICAgICAgICBhcnJheVtpXSA9
IHNyY1tpXTtcbiIgXAogICAgIiAgICAgICAgfVxuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTtcbiIgXAog
ICAgIlxuIiBcCiAgICAiICAgIGlmIChsZW5ndGggPCAyKVxuIiBcCiAgICAiICAgICAgICByZXR1
cm47XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBpZiAodHlwZW9mIGNvbXBhcmF0b3IgPT0gXCJm
dW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAgICBtZXJnZVNvcnQodGhpcywgbGVuZ3RoLCBjb21w
YXJhdG9yKTtcbiIgXAogICAgIiAgICBlbHNlXG4iIFwKICAgICIgICAgICAgIEB0eXBlZEFycmF5
U29ydCh0aGlzKTtcbiIgXAogICAgIiAgICBcbiIgXAogICAgIiAgICByZXR1cm4gdGhpcztcbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJh
eVByb3RvdHlwZVN1YmFycmF5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFi
aWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVByb3RvdHlwZVN1
YmFycmF5Q29kZUxlbmd0aCA9IDM5ODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlw
ZWRBcnJheVByb3RvdHlwZVN1YmFycmF5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7
CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZVN1YmFycmF5Q29kZSA9CiAgICAiKGZ1
bmN0aW9uIChiZWdpbiwgZW5kKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIFwidXNlIHN0cmlj
dFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgaWYgKCFAaXNUeXBlZEFycmF5Vmlldyh0aGlz
KSlcbiIgXAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwifHRoaXN8IHNob3VsZCBiZSBh
IHR5cGVkIGFycmF5IHZpZXdcIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICBsZXQgc3RhcnQg
PSBAdG9JbnRlZ2VyKGJlZ2luKTtcbiIgXAogICAgIiAgICBsZXQgZmluaXNoO1xuIiBcCiAgICAi
ICAgIGlmIChlbmQgIT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAgIGZpbmlzaCA9IEB0
b0ludGVnZXIoZW5kKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGxldCBjb25zdHJ1Y3RvciA9
IEB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKHRoaXMpO1xuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgcmV0dXJuIEB0eXBlZEFycmF5U3ViYXJyYXlDcmVhdGUuQGNhbGwodGhpcywgc3RhcnQs
IGZpbmlzaCwgY29uc3RydWN0b3IpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNv
bnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5UHJvdG90eXBlUmVkdWNlQ29kZUNvbnN0cnVjdEFi
aWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50
IHNfdHlwZWRBcnJheVByb3RvdHlwZVJlZHVjZUNvZGVMZW5ndGggPSA2Njg7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX3R5cGVkQXJyYXlQcm90b3R5cGVSZWR1Y2VDb2RlSW50cmluc2lj
ID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5UHJvdG90eXBlUmVk
dWNlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwKICAg
ICIgICAgLy9cbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAog
ICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiVHlwZWRBcnJheS5wcm90b3R5cGUucmVkdWNl
IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAg
IHZhciBhcmd1bWVudENvdW50ID0gQGFyZ3VtZW50Q291bnQoKTtcbiIgXAogICAgIiAgICBpZiAo
bGVuZ3RoID09PSAwICYmIGFyZ3VtZW50Q291bnQgPCAyKVxuIiBcCiAgICAiICAgICAgICBAdGhy
b3dUeXBlRXJyb3IoXCJUeXBlZEFycmF5LnByb3RvdHlwZS5yZWR1Y2Ugb2YgZW1wdHkgYXJyYXkg
d2l0aCBubyBpbml0aWFsIHZhbHVlXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGFj
Y3VtdWxhdG9yLCBrID0gMDtcbiIgXAogICAgIiAgICBpZiAoYXJndW1lbnRDb3VudCA+IDEpXG4i
IFwKICAgICIgICAgICAgIGFjY3VtdWxhdG9yID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiICAg
IGVsc2VcbiIgXAogICAgIiAgICAgICAgYWNjdW11bGF0b3IgPSB0aGlzW2srK107XG4iIFwKICAg
ICJcbiIgXAogICAgIiAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKVxuIiBcCiAgICAiICAgICAg
ICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrLkBjYWxsKEB1bmRlZmluZWQsIGFjY3VtdWxhdG9yLCB0
aGlzW2tdLCBrLCB0aGlzKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIHJldHVybiBhY2N1bXVs
YXRvcjtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNf
dHlwZWRBcnJheVByb3RvdHlwZVJlZHVjZVJpZ2h0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6
OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJh
eVByb3RvdHlwZVJlZHVjZVJpZ2h0Q29kZUxlbmd0aCA9IDY4MzsKc3RhdGljIGNvbnN0IEpTQzo6
SW50cmluc2ljIHNfdHlwZWRBcnJheVByb3RvdHlwZVJlZHVjZVJpZ2h0Q29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZVJlZHVj
ZVJpZ2h0Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgICAgLy9cbiIgXAogICAgIiAgICBcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIlxuIiBc
CiAgICAiICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTtcbiIgXAogICAg
IlxuIiBcCiAgICAiICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIg
XAogICAgIiAgICAgICAgQHRocm93VHlwZUVycm9yKFwiVHlwZWRBcnJheS5wcm90b3R5cGUucmVk
dWNlUmlnaHQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiXG4iIFwK
ICAgICIgICAgdmFyIGFyZ3VtZW50Q291bnQgPSBAYXJndW1lbnRDb3VudCgpO1xuIiBcCiAgICAi
ICAgIGlmIChsZW5ndGggPT09IDAgJiYgYXJndW1lbnRDb3VudCA8IDIpXG4iIFwKICAgICIgICAg
ICAgIEB0aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0IG9m
IGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKTtcbiIgXAogICAgIlxuIiBcCiAg
ICAiICAgIHZhciBhY2N1bXVsYXRvciwgayA9IGxlbmd0aCAtIDE7XG4iIFwKICAgICIgICAgaWYg
KGFyZ3VtZW50Q291bnQgPiAxKVxuIiBcCiAgICAiICAgICAgICBhY2N1bXVsYXRvciA9IEBhcmd1
bWVudCgxKTtcbiIgXAogICAgIiAgICBlbHNlXG4iIFwKICAgICIgICAgICAgIGFjY3VtdWxhdG9y
ID0gdGhpc1trLS1dO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgZm9yICg7IGsgPj0gMDsgay0t
KVxuIiBcCiAgICAiICAgICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrLkBjYWxsKEB1bmRlZmlu
ZWQsIGFjY3VtdWxhdG9yLCB0aGlzW2tdLCBrLCB0aGlzKTtcbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpD
b25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheVByb3RvdHlwZU1hcENvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X3R5cGVkQXJyYXlQcm90b3R5cGVNYXBDb2RlTGVuZ3RoID0gOTUzOwpzdGF0aWMgY29uc3QgSlND
OjpJbnRyaW5zaWMgc190eXBlZEFycmF5UHJvdG90eXBlTWFwQ29kZUludHJpbnNpYyA9IEpTQzo6
Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZU1hcENvZGUgPQog
ICAgIihmdW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiICAgIC8vXG4i
IFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIg
bGVuZ3RoID0gQHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7XG4iIFwKICAgICJcbiIgXAogICAgIiAg
ICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgICAgICAg
IEB0aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJyYXkucHJvdG90eXBlLm1hcCBjYWxsYmFjayBtdXN0
IGJlIGEgZnVuY3Rpb25cIik7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2YXIgdGhpc0FyZyA9
IEBhcmd1bWVudCgxKTtcbiIgXAogICAgIlxuIiBcCiAgICAiICAgIC8vXG4iIFwKICAgICIgICAg
dmFyIGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiIgXAogICAgIiAgICB2YXIgcmVz
dWx0O1xuIiBcCiAgICAiICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gQHVuZGVmaW5lZClcbiIgXAog
ICAgIiAgICAgICAgcmVzdWx0ID0gbmV3IChAdHlwZWRBcnJheUdldE9yaWdpbmFsQ29uc3RydWN0
b3IodGhpcykpKGxlbmd0aCk7XG4iIFwKICAgICIgICAgZWxzZSB7XG4iIFwKICAgICIgICAgICAg
IHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5Ac3BlY2llc1N5bWJvbDtcbiIg
XAogICAgIiAgICAgICAgaWYgKHNwZWNpZXNDb25zdHJ1Y3RvciA9PT0gbnVsbCB8fCBzcGVjaWVz
Q29uc3RydWN0b3IgPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgICAgICAgICAgICByZXN1bHQg
PSBuZXcgKEB0eXBlZEFycmF5R2V0T3JpZ2luYWxDb25zdHJ1Y3Rvcih0aGlzKSkobGVuZ3RoKTtc
biIgXAogICAgIiAgICAgICAgZWxzZSB7XG4iIFwKICAgICIgICAgICAgICAgICByZXN1bHQgPSBu
ZXcgc3BlY2llc0NvbnN0cnVjdG9yKGxlbmd0aCk7XG4iIFwKICAgICIgICAgICAgICAgICAvL1xu
IiBcCiAgICAiICAgICAgICAgICAgQHR5cGVkQXJyYXlMZW5ndGgocmVzdWx0KTtcbiIgXAogICAg
IiAgICAgICAgfVxuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAiICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiIgXAogICAgIiAgICAgICAgdmFyIG1hcHBl
ZFZhbHVlID0gY2FsbGJhY2suQGNhbGwodGhpc0FyZywgdGhpc1tpXSwgaSwgdGhpcyk7XG4iIFwK
ICAgICIgICAgICAgIHJlc3VsdFtpXSA9IG1hcHBlZFZhbHVlO1xuIiBcCiAgICAiICAgIH1cbiIg
XAogICAgIiAgICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6
OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5UHJvdG90eXBlRmlsdGVyQ29kZUNvbnN0cnVj
dEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3Qg
aW50IHNfdHlwZWRBcnJheVByb3RvdHlwZUZpbHRlckNvZGVMZW5ndGggPSAxMDk5OwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5UHJvdG90eXBlRmlsdGVyQ29kZUludHJp
bnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlw
ZUZpbHRlckNvZGUgPQogICAgIihmdW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBc
CiAgICAiICAgIFwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIGxl
bmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAg
aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICAgICAgICBA
dGhyb3dUeXBlRXJyb3IoXCJUeXBlZEFycmF5LnByb3RvdHlwZS5maWx0ZXIgY2FsbGJhY2sgbXVz
dCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgdmFyIHRoaXNBcmcg
PSBAYXJndW1lbnQoMSk7XG4iIFwKICAgICIgICAgdmFyIGtlcHQgPSBbXTtcbiIgXAogICAgIlxu
IiBcCiAgICAiICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiIgXAogICAg
IiAgICAgICAgdmFyIHZhbHVlID0gdGhpc1tpXTtcbiIgXAogICAgIiAgICAgICAgaWYgKGNhbGxi
YWNrLkBjYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCB0aGlzKSlcbiIgXAogICAgIiAgICAgICAgICAg
IGtlcHQuQHB1c2godmFsdWUpO1xuIiBcCiAgICAiICAgIH1cbiIgXAogICAgIlxuIiBcCiAgICAi
ICAgIHZhciBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4iIFwKICAgICIgICAgdmFy
IHJlc3VsdDtcbiIgXAogICAgIiAgICB2YXIgcmVzdWx0TGVuZ3RoID0ga2VwdC5sZW5ndGg7XG4i
IFwKICAgICIgICAgaWYgKGNvbnN0cnVjdG9yID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiICAg
ICAgICByZXN1bHQgPSBuZXcgKEB0eXBlZEFycmF5R2V0T3JpZ2luYWxDb25zdHJ1Y3Rvcih0aGlz
KSkocmVzdWx0TGVuZ3RoKTtcbiIgXAogICAgIiAgICBlbHNlIHtcbiIgXAogICAgIiAgICAgICAg
dmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLkBzcGVjaWVzU3ltYm9sO1xuIiBc
CiAgICAiICAgICAgICBpZiAoc3BlY2llc0NvbnN0cnVjdG9yID09PSBudWxsIHx8IHNwZWNpZXND
b25zdHJ1Y3RvciA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAgIiAgICAgICAgICAgIHJlc3VsdCA9
IG5ldyAoQHR5cGVkQXJyYXlHZXRPcmlnaW5hbENvbnN0cnVjdG9yKHRoaXMpKShyZXN1bHRMZW5n
dGgpO1xuIiBcCiAgICAiICAgICAgICBlbHNlIHtcbiIgXAogICAgIiAgICAgICAgICAgIHJlc3Vs
dCA9IG5ldyBzcGVjaWVzQ29uc3RydWN0b3IocmVzdWx0TGVuZ3RoKTtcbiIgXAogICAgIiAgICAg
ICAgICAgIC8vXG4iIFwKICAgICIgICAgICAgICAgICBAdHlwZWRBcnJheUxlbmd0aChyZXN1bHQp
O1xuIiBcCiAgICAiICAgICAgICB9XG4iIFwKICAgICIgICAgfVxuIiBcCiAgICAiXG4iIFwKICAg
ICIgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXB0Lmxlbmd0aDsgaSsrKVxuIiBcCiAgICAiICAg
ICAgICByZXN1bHRbaV0gPSBrZXB0W2ldO1xuIiBcCiAgICAiXG4iIFwKICAgICIgICAgcmV0dXJu
IHJlc3VsdDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
IHNfdHlwZWRBcnJheVByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlw
ZWRBcnJheVByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZUxlbmd0aCA9IDI3MTsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29k
ZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVBy
b3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7
XG4iIFwKICAgICIgICAgXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJcbiIgXAogICAgIiAgICB2
YXIgbGVuZ3RoID0gQHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7XG4iIFwKICAgICJcbiIgXAogICAg
IiAgICBpZiAobGVuZ3RoID09IDApXG4iIFwKICAgICIgICAgICAgIHJldHVybiBcIlwiO1xuIiBc
CiAgICAiXG4iIFwKICAgICIgICAgdmFyIHN0cmluZyA9IHRoaXNbMF0udG9Mb2NhbGVTdHJpbmco
KTtcbiIgXAogICAgIiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKVxuIiBcCiAg
ICAiICAgICAgICBzdHJpbmcgKz0gXCIsXCIgKyB0aGlzW2ldLnRvTG9jYWxlU3RyaW5nKCk7XG4i
IFwKICAgICJcbiIgXAogICAgIiAgICByZXR1cm4gc3RyaW5nO1xuIiBcCiAgICAifSlcbiIgXAo7
CgoKI2RlZmluZSBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFt
ZSwgb3ZlcnJpZGRlbk5hbWUsIGFyZ3VtZW50Q291bnQpIFwKSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGUqIGNvZGVOYW1lIyNHZW5lcmF0b3IoSlNDOjpWTSYgdm0pIFwKe1wKICAgIHJldHVybiB2bS5i
dWlsdGluRXhlY3V0YWJsZXMoKS0+Y29kZU5hbWUjI0V4ZWN1dGFibGUoKS0+bGluayh2bSwgdm0u
YnVpbHRpbkV4ZWN1dGFibGVzKCktPmNvZGVOYW1lIyNTb3VyY2UoKSwgc3RkOjpudWxsb3B0LCBz
XyMjY29kZU5hbWUjI0ludHJpbnNpYyk7IH0KSlNDX0ZPUkVBQ0hfQlVJTFRJTl9DT0RFKERFRklO
RV9CVUlMVElOX0dFTkVSQVRPUikKI3VuZGVmIERFRklORV9CVUlMVElOX0dFTkVSQVRPUgoKCn0g
Ly8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>332352</attachid>
            <date>2018-01-25 21:26:57 -0800</date>
            <delta_ts>2018-01-25 21:26:57 -0800</delta_ts>
            <desc>[AFTER] JSCBuiltins.cpp</desc>
            <filename>FINAL-JSCBuiltins.cpp</filename>
            <type>text/x-csrc</type>
            <size>191899</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICogQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE3IC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICogQ29weXJpZ2h0IChjKSAyMDE1IEFuZHkgVmFuV2Fnb25l
ciA8dGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tPi4KICogQ29weXJpZ2h0IChjKSAyMDE1IEpvcmRh
biBIYXJiYW5kLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBDb3B5cmlnaHQgKGMpIDIwMTUsIDIw
MTYgLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBDb3B5cmlnaHQgKGMp
IDIwMTUsIDIwMTYgLTIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4K
ICogQ29weXJpZ2h0IChjKSAyMDE1LCAyMDE2LCAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCiAqIENvcHlyaWdodCAoYykgMjAxNiBDYWl0bGluIFBvdHRlciA8Y2Fp
dHBAaWdhbGlhLmNvbT4uCiAqIENvcHlyaWdodCAoYykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CiAqIENvcHlyaWdodCAoYykgMjAxNiwgMjAxNyAtMjAxNyBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgogKiBDb3B5cmlnaHQgKGMpIDIwMTYs
IDIwMTcgT2xla3NhbmRyIFNrYWNoa292IDxnc2thY2hrb3ZAZ21haWwuY29tPi4KICogQ29weXJp
Z2h0IChjKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+LgogKiAKICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogCiAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCiAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CiAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCiAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCiAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKiAKICovCgovLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBm
aWxlcyBmb3IKLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKCiNpbmNsdWRlICJjb25maWcuaCIKI2lu
Y2x1ZGUgIkpTQ0J1aWx0aW5zLmgiCgojaW5jbHVkZSAiQnVpbHRpbkV4ZWN1dGFibGVzLmgiCiNp
bmNsdWRlICJIZWFwSW5saW5lcy5oIgojaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKI2lu
Y2x1ZGUgIkludHJpbnNpYy5oIgojaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgojaW5jbHVkZSAi
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCIKI2luY2x1ZGUgIlZNLmgiCgpuYW1lc3BhY2Ug
SlNDIHsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5Q29uc3RydWN0b3JPZkNv
ZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3Q7CmNvbnN0IGludCBzX2FycmF5Q29uc3RydWN0b3JPZkNvZGVMZW5ndGggPSAyNTY7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5Q29uc3RydWN0b3JPZkNvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5Q29uc3RydWN0b3JPZkNvZGUg
PQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7
XG4iIFwKICAgICJ2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiIgXAogICAgInZhciBh
cnJheSA9IEBpc0NvbnN0cnVjdG9yKHRoaXMpID8gbmV3IHRoaXMobGVuZ3RoKSA6IEBuZXdBcnJh
eVdpdGhTaXplKGxlbmd0aCk7XG4iIFwKICAgICJmb3IgKHZhciBrID0gMDsgayA8IGxlbmd0aDsg
KytrKVxuIiBcCiAgICAiIEBwdXRCeVZhbERpcmVjdChhcnJheSwgaywgYXJndW1lbnRzW2tdKTtc
biIgXAogICAgImFycmF5Lmxlbmd0aCA9IGxlbmd0aDtcbiIgXAogICAgInJldHVybiBhcnJheTtc
biIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlD
b25zdHJ1Y3RvckZyb21Db2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJheUNvbnN0cnVjdG9yRnJvbUNvZGVM
ZW5ndGggPSAxNTIwOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheUNvbnN0cnVj
dG9yRnJvbUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2Fy
cmF5Q29uc3RydWN0b3JGcm9tQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChpdGVtcyApXG4iIFwKICAg
ICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciB0aGlzT2JqID0gdGhp
cztcbiIgXAogICAgInZhciBtYXBGbiA9IEBhcmd1bWVudCgxKTtcbiIgXAogICAgInZhciB0aGlz
QXJnO1xuIiBcCiAgICAiaWYgKG1hcEZuICE9PSBAdW5kZWZpbmVkKSB7XG4iIFwKICAgICIgaWYg
KHR5cGVvZiBtYXBGbiAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiICBAdGhyb3dUeXBlRXJy
b3IoXCJBcnJheS5mcm9tIHJlcXVpcmVzIHRoYXQgdGhlIHNlY29uZCBhcmd1bWVudCwgd2hlbiBw
cm92aWRlZCwgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgIiB0aGlzQXJnID0gQGFyZ3VtZW50
KDIpO1xuIiBcCiAgICAifVxuIiBcCiAgICAidmFyIGFycmF5TGlrZSA9IEB0b09iamVjdChpdGVt
cywgXCJBcnJheS5mcm9tIHJlcXVpcmVzIGFuIGFycmF5LWxpa2Ugb2JqZWN0IC0gbm90IG51bGwg
b3IgdW5kZWZpbmVkXCIpO1xuIiBcCiAgICAidmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlbXMuQGl0
ZXJhdG9yU3ltYm9sO1xuIiBcCiAgICAiaWYgKGl0ZXJhdG9yTWV0aG9kICE9IG51bGwpIHtcbiIg
XAogICAgIiBpZiAodHlwZW9mIGl0ZXJhdG9yTWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwK
ICAgICIgIEB0aHJvd1R5cGVFcnJvcihcIkFycmF5LmZyb20gcmVxdWlyZXMgdGhhdCB0aGUgcHJv
cGVydHkgb2YgdGhlIGZpcnN0IGFyZ3VtZW50LCBpdGVtc1tTeW1ib2wuaXRlcmF0b3JdLCB3aGVu
IGV4aXN0cywgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgIiB2YXIgcmVzdWx0ID0gQGlzQ29u
c3RydWN0b3IodGhpc09iaikgPyBuZXcgdGhpc09iaigpIDogW107XG4iIFwKICAgICIgdmFyIGsg
PSAwO1xuIiBcCiAgICAiIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yTWV0aG9kLkBjYWxsKGl0ZW1z
KTtcbiIgXAogICAgIiB2YXIgd3JhcHBlciA9IHt9XG4iIFwKICAgICIgd3JhcHBlci5AaXRlcmF0
b3JTeW1ib2wgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGl0ZXJhdG9yOyB9O1xuIiBcCiAgICAiIGZv
ciAodmFyIHZhbHVlIG9mIHdyYXBwZXIpIHtcbiIgXAogICAgIiAgaWYgKG1hcEZuKVxuIiBcCiAg
ICAiICAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwgaywgdGhpc0FyZyA9PT0gQHVuZGVmaW5lZCA/
IG1hcEZuKHZhbHVlLCBrKSA6IG1hcEZuLkBjYWxsKHRoaXNBcmcsIHZhbHVlLCBrKSk7XG4iIFwK
ICAgICIgIGVsc2VcbiIgXAogICAgIiAgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIGssIHZhbHVl
KTtcbiIgXAogICAgIiAgayArPSAxO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIiByZXN1bHQubGVu
Z3RoID0gaztcbiIgXAogICAgIiByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAifVxuIiBcCiAgICAi
dmFyIGFycmF5TGlrZUxlbmd0aCA9IEB0b0xlbmd0aChhcnJheUxpa2UubGVuZ3RoKTtcbiIgXAog
ICAgInZhciByZXN1bHQgPSBAaXNDb25zdHJ1Y3Rvcih0aGlzT2JqKSA/IG5ldyB0aGlzT2JqKGFy
cmF5TGlrZUxlbmd0aCkgOiBAbmV3QXJyYXlXaXRoU2l6ZShhcnJheUxpa2VMZW5ndGgpO1xuIiBc
CiAgICAidmFyIGsgPSAwO1xuIiBcCiAgICAid2hpbGUgKGsgPCBhcnJheUxpa2VMZW5ndGgpIHtc
biIgXAogICAgIiB2YXIgdmFsdWUgPSBhcnJheUxpa2Vba107XG4iIFwKICAgICIgaWYgKG1hcEZu
KVxuIiBcCiAgICAiICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBrLCB0aGlzQXJnID09PSBAdW5k
ZWZpbmVkID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFsdWUsIGsp
KTtcbiIgXAogICAgIiBlbHNlXG4iIFwKICAgICIgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIGss
IHZhbHVlKTtcbiIgXAogICAgIiBrICs9IDE7XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXN1bHQu
bGVuZ3RoID0gYXJyYXlMaWtlTGVuZ3RoO1xuIiBcCiAgICAicmV0dXJuIHJlc3VsdDtcbiIgXAog
ICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlDb25zdHJ1
Y3RvcklzQXJyYXlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJheUNvbnN0cnVjdG9ySXNBcnJheUNvZGVM
ZW5ndGggPSAxNzE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5Q29uc3RydWN0
b3JJc0FycmF5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNf
YXJyYXlDb25zdHJ1Y3RvcklzQXJyYXlDb2RlID0KICAgICIoZnVuY3Rpb24gKGFycmF5KVxuIiBc
CiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoQGlzSlNBcnJh
eShhcnJheSkgfHwgQGlzRGVyaXZlZEFycmF5KGFycmF5KSlcbiIgXAogICAgIiByZXR1cm4gdHJ1
ZTtcbiIgXAogICAgImlmICghQGlzUHJveHlPYmplY3QoYXJyYXkpKVxuIiBcCiAgICAiIHJldHVy
biBmYWxzZTtcbiIgXAogICAgInJldHVybiBAaXNBcnJheVNsb3coYXJyYXkpO1xuIiBcCiAgICAi
fSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJheUl0ZXJhdG9yUHJv
dG90eXBlTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0Q29k
ZUxlbmd0aCA9IDMzNTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlJdGVyYXRv
clByb3RvdHlwZU5leHRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hh
ciogc19hcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGUgPQogICAgIihmdW5jdGlvbiAoKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAodGhpcyA9
PSBudWxsKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIiVBcnJheUl0ZXJhdG9yUHJvdG90
eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwi
KTtcbiIgXAogICAgImxldCBuZXh0ID0gdGhpcy5AYXJyYXlJdGVyYXRvck5leHQ7XG4iIFwKICAg
ICJpZiAobmV4dCA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCIl
QXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBhbiBB
cnJheSBJdGVyYXRvciBpbnN0YW5jZVwiKTtcbiIgXAogICAgInJldHVybiBuZXh0LkBjYWxsKHRo
aXMpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19h
cnJheUl0ZXJhdG9yUHJvdG90eXBlQXJyYXlJdGVyYXRvclZhbHVlTmV4dENvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX2FycmF5SXRlcmF0b3JQcm90b3R5cGVBcnJheUl0ZXJhdG9yVmFsdWVOZXh0Q29kZUxlbmd0
aCA9IDM4ODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlJdGVyYXRvclByb3Rv
dHlwZUFycmF5SXRlcmF0b3JWYWx1ZU5leHRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc19hcnJheUl0ZXJhdG9yUHJvdG90eXBlQXJyYXlJdGVyYXRvclZhbHVl
TmV4dENvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgZG9uZSA9IHRydWU7XG4iIFwKICAgICJ2YXIgdmFsdWU7
XG4iIFwKICAgICJ2YXIgYXJyYXkgPSB0aGlzLkBpdGVyYXRlZE9iamVjdDtcbiIgXAogICAgImlm
ICghdGhpcy5AYXJyYXlJdGVyYXRvcklzRG9uZSkge1xuIiBcCiAgICAiIHZhciBpbmRleCA9IHRo
aXMuQGFycmF5SXRlcmF0b3JOZXh0SW5kZXg7XG4iIFwKICAgICIgdmFyIGxlbmd0aCA9IGFycmF5
Lmxlbmd0aCA+Pj4gMDtcbiIgXAogICAgIiBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4iIFwKICAg
ICIgIHRoaXMuQGFycmF5SXRlcmF0b3JJc0RvbmUgPSB0cnVlO1xuIiBcCiAgICAiIH0gZWxzZSB7
XG4iIFwKICAgICIgIHRoaXMuQGFycmF5SXRlcmF0b3JOZXh0SW5kZXggPSBpbmRleCArIDE7XG4i
IFwKICAgICIgIGRvbmUgPSBmYWxzZTtcbiIgXAogICAgIiAgdmFsdWUgPSBhcnJheVtpbmRleF07
XG4iIFwKICAgICIgfVxuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJuIHsgZG9uZSwgdmFsdWUg
fTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJy
YXlJdGVyYXRvclByb3RvdHlwZUFycmF5SXRlcmF0b3JLZXlOZXh0Q29kZUNvbnN0cnVjdEFiaWxp
dHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNf
YXJyYXlJdGVyYXRvclByb3RvdHlwZUFycmF5SXRlcmF0b3JLZXlOZXh0Q29kZUxlbmd0aCA9IDM4
MTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlJdGVyYXRvclByb3RvdHlwZUFy
cmF5SXRlcmF0b3JLZXlOZXh0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0
IGNoYXIqIHNfYXJyYXlJdGVyYXRvclByb3RvdHlwZUFycmF5SXRlcmF0b3JLZXlOZXh0Q29kZSA9
CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgInZhciBkb25lID0gdHJ1ZTtcbiIgXAogICAgInZhciB2YWx1ZTtcbiIgXAogICAg
InZhciBhcnJheSA9IHRoaXMuQGl0ZXJhdGVkT2JqZWN0O1xuIiBcCiAgICAiaWYgKCF0aGlzLkBh
cnJheUl0ZXJhdG9ySXNEb25lKSB7XG4iIFwKICAgICIgdmFyIGluZGV4ID0gdGhpcy5AYXJyYXlJ
dGVyYXRvck5leHRJbmRleDtcbiIgXAogICAgIiB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoID4+
PiAwO1xuIiBcCiAgICAiIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcbiIgXAogICAgIiAgdGhpcy5A
YXJyYXlJdGVyYXRvcklzRG9uZSA9IHRydWU7XG4iIFwKICAgICIgfSBlbHNlIHtcbiIgXAogICAg
IiAgdGhpcy5AYXJyYXlJdGVyYXRvck5leHRJbmRleCA9IGluZGV4ICsgMTtcbiIgXAogICAgIiAg
ZG9uZSA9IGZhbHNlO1xuIiBcCiAgICAiICB2YWx1ZSA9IGluZGV4O1xuIiBcCiAgICAiIH1cbiIg
XAogICAgIn1cbiIgXAogICAgInJldHVybiB7IGRvbmUsIHZhbHVlIH07XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5SXRlcmF0b3JQcm90b3R5
cGVBcnJheUl0ZXJhdG9yS2V5VmFsdWVOZXh0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJyYXlJdGVyYXRv
clByb3RvdHlwZUFycmF5SXRlcmF0b3JLZXlWYWx1ZU5leHRDb2RlTGVuZ3RoID0gMzk5OwpzdGF0
aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheUl0ZXJhdG9yUHJvdG90eXBlQXJyYXlJdGVy
YXRvcktleVZhbHVlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX2FycmF5SXRlcmF0b3JQcm90b3R5cGVBcnJheUl0ZXJhdG9yS2V5VmFsdWVOZXh0Q29k
ZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3Rc
IjtcbiIgXAogICAgInZhciBkb25lID0gdHJ1ZTtcbiIgXAogICAgInZhciB2YWx1ZTtcbiIgXAog
ICAgInZhciBhcnJheSA9IHRoaXMuQGl0ZXJhdGVkT2JqZWN0O1xuIiBcCiAgICAiaWYgKCF0aGlz
LkBhcnJheUl0ZXJhdG9ySXNEb25lKSB7XG4iIFwKICAgICIgdmFyIGluZGV4ID0gdGhpcy5AYXJy
YXlJdGVyYXRvck5leHRJbmRleDtcbiIgXAogICAgIiB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3Ro
ID4+PiAwO1xuIiBcCiAgICAiIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcbiIgXAogICAgIiAgdGhp
cy5AYXJyYXlJdGVyYXRvcklzRG9uZSA9IHRydWU7XG4iIFwKICAgICIgfSBlbHNlIHtcbiIgXAog
ICAgIiAgdGhpcy5AYXJyYXlJdGVyYXRvck5leHRJbmRleCA9IGluZGV4ICsgMTtcbiIgXAogICAg
IiAgZG9uZSA9IGZhbHNlO1xuIiBcCiAgICAiICB2YWx1ZSA9IFsgaW5kZXgsIGFycmF5W2luZGV4
XSBdO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIn1cbiIgXAogICAgInJldHVybiB7IGRvbmUsIHZh
bHVlIH07XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X2FycmF5UHJvdG90eXBlQ3JlYXRlQXJyYXlJdGVyYXRvckNvbnN0cnVjdG9yQ29kZUNvbnN0cnVj
dEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbkNvbnN0cnVjdDsKY29uc3QgaW50
IHNfYXJyYXlQcm90b3R5cGVDcmVhdGVBcnJheUl0ZXJhdG9yQ29uc3RydWN0b3JDb2RlTGVuZ3Ro
ID0gMjU2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheVByb3RvdHlwZUNyZWF0
ZUFycmF5SXRlcmF0b3JDb25zdHJ1Y3RvckNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2lj
Owpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90eXBlQ3JlYXRlQXJyYXlJdGVyYXRvckNvbnN0cnVj
dG9yQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChpdGVyYXRlZE9iamVjdCwga2luZCwgaXRlcmF0aW9u
RnVuY3Rpb24pXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAg
InRoaXMuQGl0ZXJhdGVkT2JqZWN0ID0gaXRlcmF0ZWRPYmplY3Q7XG4iIFwKICAgICJ0aGlzLkBh
cnJheUl0ZXJhdG9yS2luZCA9IGtpbmQ7XG4iIFwKICAgICJ0aGlzLkBhcnJheUl0ZXJhdG9yTmV4
dEluZGV4ID0gMDtcbiIgXAogICAgInRoaXMuQGFycmF5SXRlcmF0b3JOZXh0ID0gaXRlcmF0aW9u
RnVuY3Rpb247XG4iIFwKICAgICJ0aGlzLkBhcnJheUl0ZXJhdG9ySXNEb25lID0gZmFsc2U7XG4i
IFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJv
dG90eXBlVmFsdWVzQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVWYWx1ZXNDb2RlTGVu
Z3RoID0gMTg4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheVByb3RvdHlwZVZh
bHVlc0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5
UHJvdG90eXBlVmFsdWVzQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiBuZXcgQGNyZWF0ZUFycmF5SXRl
cmF0b3IoQHRvT2JqZWN0KHRoaXMsIFwiQXJyYXkucHJvdG90eXBlLnZhbHVlcyByZXF1aXJlcyB0
aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIiksIFwidmFsdWVcIiwgQGFycmF5
SXRlcmF0b3JWYWx1ZU5leHQpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0
cnVjdEFiaWxpdHkgc19hcnJheVByb3RvdHlwZUtleXNDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJheVBy
b3RvdHlwZUtleXNDb2RlTGVuZ3RoID0gMTgyOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMg
c19hcnJheVByb3RvdHlwZUtleXNDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29u
c3QgY2hhciogc19hcnJheVByb3RvdHlwZUtleXNDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIg
XAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAicmV0dXJuIG5ldyBA
Y3JlYXRlQXJyYXlJdGVyYXRvcihAdG9PYmplY3QodGhpcywgXCJBcnJheS5wcm90b3R5cGUua2V5
cyByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIiksIFwia2V5
XCIsIEBhcnJheUl0ZXJhdG9yS2V5TmV4dCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlRW50cmllc0NvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX2FycmF5UHJvdG90eXBlRW50cmllc0NvZGVMZW5ndGggPSAxOTY7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX2FycmF5UHJvdG90eXBlRW50cmllc0NvZGVJbnRyaW5zaWMgPSBKU0M6
Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90eXBlRW50cmllc0NvZGUgPQog
ICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICJyZXR1cm4gbmV3IEBjcmVhdGVBcnJheUl0ZXJhdG9yKEB0b09iamVjdCh0aGlzLCBc
IkFycmF5LnByb3RvdHlwZS5lbnRyaWVzIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxs
IG9yIHVuZGVmaW5lZFwiKSwgXCJrZXkrdmFsdWVcIiwgQGFycmF5SXRlcmF0b3JLZXlWYWx1ZU5l
eHQpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19h
cnJheVByb3RvdHlwZVJlZHVjZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBlUmVkdWNl
Q29kZUxlbmd0aCA9IDgxOTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90
b3R5cGVSZWR1Y2VDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciog
c19hcnJheVByb3RvdHlwZVJlZHVjZUNvZGUgPQogICAgIihmdW5jdGlvbiAoY2FsbGJhY2sgKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgYXJyYXkg
PSBAdG9PYmplY3QodGhpcywgXCJBcnJheS5wcm90b3R5cGUucmVkdWNlIHJlcXVpcmVzIHRoYXQg
fHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgInZhciBsZW5ndGgg
PSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTtcbiIgXAogICAgImlmICh0eXBlb2YgY2FsbGJhY2sg
IT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJBcnJheS5wcm90
b3R5cGUucmVkdWNlIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgInZh
ciBhcmd1bWVudENvdW50ID0gQGFyZ3VtZW50Q291bnQoKTtcbiIgXAogICAgImlmIChsZW5ndGgg
PT09IDAgJiYgYXJndW1lbnRDb3VudCA8IDIpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwi
cmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKTtcbiIgXAogICAg
InZhciBhY2N1bXVsYXRvciwgayA9IDA7XG4iIFwKICAgICJpZiAoYXJndW1lbnRDb3VudCA+IDEp
XG4iIFwKICAgICIgYWNjdW11bGF0b3IgPSBAYXJndW1lbnQoMSk7XG4iIFwKICAgICJlbHNlIHtc
biIgXAogICAgIiB3aGlsZSAoayA8IGxlbmd0aCAmJiAhKGsgaW4gYXJyYXkpKVxuIiBcCiAgICAi
ICBrICs9IDE7XG4iIFwKICAgICIgaWYgKGsgPj0gbGVuZ3RoKVxuIiBcCiAgICAiICBAdGhyb3dU
eXBlRXJyb3IoXCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlXCIp
O1xuIiBcCiAgICAiIGFjY3VtdWxhdG9yID0gYXJyYXlbaysrXTtcbiIgXAogICAgIn1cbiIgXAog
ICAgIndoaWxlIChrIDwgbGVuZ3RoKSB7XG4iIFwKICAgICIgaWYgKGsgaW4gYXJyYXkpXG4iIFwK
ICAgICIgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2suQGNhbGwoQHVuZGVmaW5lZCwgYWNjdW11bGF0
b3IsIGFycmF5W2tdLCBrLCBhcnJheSk7XG4iIFwKICAgICIgayArPSAxO1xuIiBcCiAgICAifVxu
IiBcCiAgICAicmV0dXJuIGFjY3VtdWxhdG9yO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJheVByb3RvdHlwZVJlZHVjZVJpZ2h0Q29kZUNvbnN0
cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29u
c3QgaW50IHNfYXJyYXlQcm90b3R5cGVSZWR1Y2VSaWdodENvZGVMZW5ndGggPSA4MzQ7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5UHJvdG90eXBlUmVkdWNlUmlnaHRDb2RlSW50
cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hcnJheVByb3RvdHlwZVJl
ZHVjZVJpZ2h0Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4i
IFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBhcnJheSA9IEB0b09iamVjdCh0
aGlzLCBcIkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCByZXF1aXJlcyB0aGF0IHx0aGlzfCBu
b3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJ2YXIgbGVuZ3RoID0gQHRvTGVu
Z3RoKGFycmF5Lmxlbmd0aCk7XG4iIFwKICAgICJpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1
bmN0aW9uXCIpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiQXJyYXkucHJvdG90eXBlLnJl
ZHVjZVJpZ2h0IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgInZhciBh
cmd1bWVudENvdW50ID0gQGFyZ3VtZW50Q291bnQoKTtcbiIgXAogICAgImlmIChsZW5ndGggPT09
IDAgJiYgYXJndW1lbnRDb3VudCA8IDIpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwicmVk
dWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlXCIpO1xuIiBcCiAg
ICAidmFyIGFjY3VtdWxhdG9yLCBrID0gbGVuZ3RoIC0gMTtcbiIgXAogICAgImlmIChhcmd1bWVu
dENvdW50ID4gMSlcbiIgXAogICAgIiBhY2N1bXVsYXRvciA9IEBhcmd1bWVudCgxKTtcbiIgXAog
ICAgImVsc2Uge1xuIiBcCiAgICAiIHdoaWxlIChrID49IDAgJiYgIShrIGluIGFycmF5KSlcbiIg
XAogICAgIiAgayAtPSAxO1xuIiBcCiAgICAiIGlmIChrIDwgMClcbiIgXAogICAgIiAgQHRocm93
VHlwZUVycm9yKFwicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZh
bHVlXCIpO1xuIiBcCiAgICAiIGFjY3VtdWxhdG9yID0gYXJyYXlbay0tXTtcbiIgXAogICAgIn1c
biIgXAogICAgIndoaWxlIChrID49IDApIHtcbiIgXAogICAgIiBpZiAoayBpbiBhcnJheSlcbiIg
XAogICAgIiAgYWNjdW11bGF0b3IgPSBjYWxsYmFjay5AY2FsbChAdW5kZWZpbmVkLCBhY2N1bXVs
YXRvciwgYXJyYXlba10sIGssIGFycmF5KTtcbiIgXAogICAgIiBrIC09IDE7XG4iIFwKICAgICJ9
XG4iIFwKICAgICJyZXR1cm4gYWNjdW11bGF0b3I7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0
IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlRXZlcnlDb2RlQ29uc3RydWN0
QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBp
bnQgc19hcnJheVByb3RvdHlwZUV2ZXJ5Q29kZUxlbmd0aCA9IDQ2MzsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVFdmVyeUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90eXBlRXZlcnlDb2RlID0KICAgICIo
ZnVuY3Rpb24gKGNhbGxiYWNrIClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwi
O1xuIiBcCiAgICAidmFyIGFycmF5ID0gQHRvT2JqZWN0KHRoaXMsIFwiQXJyYXkucHJvdG90eXBl
LmV2ZXJ5IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtc
biIgXAogICAgInZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTtcbiIgXAogICAg
ImlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiBAdGhyb3dU
eXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUuZXZlcnkgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0
aW9uXCIpO1xuIiBcCiAgICAidmFyIHRoaXNBcmcgPSBAYXJndW1lbnQoMSk7XG4iIFwKICAgICJm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4iIFwKICAgICIgaWYgKCEoaSBpbiBh
cnJheSkpXG4iIFwKICAgICIgIGNvbnRpbnVlO1xuIiBcCiAgICAiIGlmICghY2FsbGJhY2suQGNh
bGwodGhpc0FyZywgYXJyYXlbaV0sIGksIGFycmF5KSlcbiIgXAogICAgIiAgcmV0dXJuIGZhbHNl
O1xuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJuIHRydWU7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlRm9yRWFjaENvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBlRm9yRWFjaENvZGVMZW5ndGggPSA0MTk7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FycmF5UHJvdG90eXBlRm9yRWFjaENvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90eXBlRm9yRWFj
aENvZGUgPQogICAgIihmdW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAi
XCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgYXJyYXkgPSBAdG9PYmplY3QodGhpcywgXCJB
cnJheS5wcm90b3R5cGUuZm9yRWFjaCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBv
ciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJ2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxl
bmd0aCk7XG4iIFwKICAgICJpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpXG4i
IFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiQXJyYXkucHJvdG90eXBlLmZvckVhY2ggY2FsbGJh
Y2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAidmFyIHRoaXNBcmcgPSBAYXJndW1l
bnQoMSk7XG4iIFwKICAgICJmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4iIFwK
ICAgICIgaWYgKGkgaW4gYXJyYXkpXG4iIFwKICAgICIgIGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcs
IGFycmF5W2ldLCBpLCBhcnJheSk7XG4iIFwKICAgICJ9XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlRmlsdGVyQ29kZUNvbnN0
cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29u
c3QgaW50IHNfYXJyYXlQcm90b3R5cGVGaWx0ZXJDb2RlTGVuZ3RoID0gMTAwMDsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVGaWx0ZXJDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hcnJheVByb3RvdHlwZUZpbHRlckNvZGUg
PQogICAgIihmdW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgYXJyYXkgPSBAdG9PYmplY3QodGhpcywgXCJBcnJheS5w
cm90b3R5cGUuZmlsdGVyIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVm
aW5lZFwiKTtcbiIgXAogICAgInZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTtc
biIgXAogICAgImlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAg
IiBAdGhyb3dUeXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUuZmlsdGVyIGNhbGxiYWNrIG11c3Qg
YmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgInZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xu
IiBcCiAgICAidmFyIHJlc3VsdDtcbiIgXAogICAgInZhciBjb25zdHJ1Y3RvcjtcbiIgXAogICAg
ImlmIChAaXNBcnJheShhcnJheSkpIHtcbiIgXAogICAgIiBjb25zdHJ1Y3RvciA9IGFycmF5LmNv
bnN0cnVjdG9yO1xuIiBcCiAgICAiIGlmIChAaXNBcnJheUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9y
KSAmJiBAQXJyYXkgIT09IGNvbnN0cnVjdG9yKVxuIiBcCiAgICAiICBjb25zdHJ1Y3RvciA9IEB1
bmRlZmluZWQ7XG4iIFwKICAgICIgaWYgKEBpc09iamVjdChjb25zdHJ1Y3RvcikpIHtcbiIgXAog
ICAgIiAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5Ac3BlY2llc1N5bWJvbDtcbiIgXAogICAg
IiAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsKVxuIiBcCiAgICAiICAgY29uc3RydWN0b3IgPSBA
dW5kZWZpbmVkO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIn1cbiIgXAogICAgImlmIChjb25zdHJ1
Y3RvciA9PT0gQEFycmF5IHx8IGNvbnN0cnVjdG9yID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAi
IHJlc3VsdCA9IEBuZXdBcnJheVdpdGhTaXplKDApO1xuIiBcCiAgICAiZWxzZVxuIiBcCiAgICAi
IHJlc3VsdCA9IG5ldyBjb25zdHJ1Y3RvcigwKTtcbiIgXAogICAgInZhciBuZXh0SW5kZXggPSAw
O1xuIiBcCiAgICAiZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuIiBcCiAgICAi
IGlmICghKGkgaW4gYXJyYXkpKVxuIiBcCiAgICAiICBjb250aW51ZTtcbiIgXAogICAgIiB2YXIg
Y3VycmVudCA9IGFycmF5W2ldXG4iIFwKICAgICIgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcs
IGN1cnJlbnQsIGksIGFycmF5KSkge1xuIiBcCiAgICAiICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0
LCBuZXh0SW5kZXgsIGN1cnJlbnQpO1xuIiBcCiAgICAiICArK25leHRJbmRleDtcbiIgXAogICAg
IiB9XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJheVByb3RvdHlwZU1hcENvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBlTWFwQ29kZUxlbmd0aCA9IDk1MTsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVNYXBDb2RlSW50cmluc2ljID0gSlND
OjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hcnJheVByb3RvdHlwZU1hcENvZGUgPQogICAg
IihmdW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0
XCI7XG4iIFwKICAgICJ2YXIgYXJyYXkgPSBAdG9PYmplY3QodGhpcywgXCJBcnJheS5wcm90b3R5
cGUubWFwIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtc
biIgXAogICAgInZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTtcbiIgXAogICAg
ImlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiBAdGhyb3dU
eXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUubWFwIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlv
blwiKTtcbiIgXAogICAgInZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAidmFy
IHJlc3VsdDtcbiIgXAogICAgInZhciBjb25zdHJ1Y3RvcjtcbiIgXAogICAgImlmIChAaXNBcnJh
eShhcnJheSkpIHtcbiIgXAogICAgIiBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yO1xu
IiBcCiAgICAiIGlmIChAaXNBcnJheUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSAmJiBAQXJyYXkg
IT09IGNvbnN0cnVjdG9yKVxuIiBcCiAgICAiICBjb25zdHJ1Y3RvciA9IEB1bmRlZmluZWQ7XG4i
IFwKICAgICIgaWYgKEBpc09iamVjdChjb25zdHJ1Y3RvcikpIHtcbiIgXAogICAgIiAgY29uc3Ry
dWN0b3IgPSBjb25zdHJ1Y3Rvci5Ac3BlY2llc1N5bWJvbDtcbiIgXAogICAgIiAgaWYgKGNvbnN0
cnVjdG9yID09PSBudWxsKVxuIiBcCiAgICAiICAgY29uc3RydWN0b3IgPSBAdW5kZWZpbmVkO1xu
IiBcCiAgICAiIH1cbiIgXAogICAgIn1cbiIgXAogICAgImlmIChjb25zdHJ1Y3RvciA9PT0gQEFy
cmF5IHx8IGNvbnN0cnVjdG9yID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiIHJlc3VsdCA9IEBu
ZXdBcnJheVdpdGhTaXplKGxlbmd0aCk7XG4iIFwKICAgICJlbHNlXG4iIFwKICAgICIgcmVzdWx0
ID0gbmV3IGNvbnN0cnVjdG9yKGxlbmd0aCk7XG4iIFwKICAgICJmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4iIFwKICAgICIgaWYgKCEoaSBpbiBhcnJheSkpXG4iIFwKICAgICIg
IGNvbnRpbnVlO1xuIiBcCiAgICAiIHZhciBtYXBwZWRWYWx1ZSA9IGNhbGxiYWNrLkBjYWxsKHRo
aXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSk7XG4iIFwKICAgICIgQHB1dEJ5VmFsRGlyZWN0KHJl
c3VsdCwgaSwgbWFwcGVkVmFsdWUpO1xuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJuIHJlc3Vs
dDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJy
YXlQcm90b3R5cGVTb21lQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxp
dHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXJyYXlQcm90b3R5cGVTb21lQ29kZUxl
bmd0aCA9IDQ2MDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJyYXlQcm90b3R5cGVT
b21lQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQ
cm90b3R5cGVTb21lQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7
XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBhcnJheSA9IEB0b09iamVj
dCh0aGlzLCBcIkFycmF5LnByb3RvdHlwZS5zb21lIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBi
ZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgInZhciBsZW5ndGggPSBAdG9MZW5ndGgo
YXJyYXkubGVuZ3RoKTtcbiIgXAogICAgImlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rp
b25cIilcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJBcnJheS5wcm90b3R5cGUuc29tZSBj
YWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4iIFwKICAgICJ2YXIgdGhpc0FyZyA9IEBh
cmd1bWVudCgxKTtcbiIgXAogICAgImZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtc
biIgXAogICAgIiBpZiAoIShpIGluIGFycmF5KSlcbiIgXAogICAgIiAgY29udGludWU7XG4iIFwK
ICAgICIgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSkpXG4i
IFwKICAgICIgIHJldHVybiB0cnVlO1xuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJuIGZhbHNl
O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hcnJh
eVByb3RvdHlwZUZpbGxDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hcnJheVByb3RvdHlwZUZpbGxDb2RlTGVu
Z3RoID0gNzAxOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheVByb3RvdHlwZUZp
bGxDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hcnJheVBy
b3RvdHlwZUZpbGxDb2RlID0KICAgICIoZnVuY3Rpb24gKHZhbHVlIClcbiIgXAogICAgIntcbiIg
XAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAidmFyIGFycmF5ID0gQHRvT2JqZWN0KHRo
aXMsIFwiQXJyYXkucHJvdG90eXBlLmZpbGwgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51
bGwgb3IgdW5kZWZpbmVkXCIpO1xuIiBcCiAgICAidmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJh
eS5sZW5ndGgpO1xuIiBcCiAgICAidmFyIHJlbGF0aXZlU3RhcnQgPSBAdG9JbnRlZ2VyKEBhcmd1
bWVudCgxKSk7XG4iIFwKICAgICJ2YXIgayA9IDA7XG4iIFwKICAgICJpZiAocmVsYXRpdmVTdGFy
dCA8IDApIHtcbiIgXAogICAgIiBrID0gbGVuZ3RoICsgcmVsYXRpdmVTdGFydDtcbiIgXAogICAg
IiBpZiAoayA8IDApXG4iIFwKICAgICIgIGsgPSAwO1xuIiBcCiAgICAifSBlbHNlIHtcbiIgXAog
ICAgIiBrID0gcmVsYXRpdmVTdGFydDtcbiIgXAogICAgIiBpZiAoayA+IGxlbmd0aClcbiIgXAog
ICAgIiAgayA9IGxlbmd0aDtcbiIgXAogICAgIn1cbiIgXAogICAgInZhciByZWxhdGl2ZUVuZCA9
IGxlbmd0aDtcbiIgXAogICAgInZhciBlbmQgPSBAYXJndW1lbnQoMik7XG4iIFwKICAgICJpZiAo
ZW5kICE9PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiIHJlbGF0aXZlRW5kID0gQHRvSW50ZWdlcihl
bmQpO1xuIiBcCiAgICAidmFyIGZpbmFsID0gMDtcbiIgXAogICAgImlmIChyZWxhdGl2ZUVuZCA8
IDApIHtcbiIgXAogICAgIiBmaW5hbCA9IGxlbmd0aCArIHJlbGF0aXZlRW5kO1xuIiBcCiAgICAi
IGlmIChmaW5hbCA8IDApXG4iIFwKICAgICIgIGZpbmFsID0gMDtcbiIgXAogICAgIn0gZWxzZSB7
XG4iIFwKICAgICIgZmluYWwgPSByZWxhdGl2ZUVuZDtcbiIgXAogICAgIiBpZiAoZmluYWwgPiBs
ZW5ndGgpXG4iIFwKICAgICIgIGZpbmFsID0gbGVuZ3RoO1xuIiBcCiAgICAifVxuIiBcCiAgICAi
Zm9yICg7IGsgPCBmaW5hbDsgaysrKVxuIiBcCiAgICAiIGFycmF5W2tdID0gdmFsdWU7XG4iIFwK
ICAgICJyZXR1cm4gYXJyYXk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eSBzX2FycmF5UHJvdG90eXBlRmluZENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlND
OjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5UHJv
dG90eXBlRmluZENvZGVMZW5ndGggPSA0NTc7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X2FycmF5UHJvdG90eXBlRmluZENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX2FycmF5UHJvdG90eXBlRmluZENvZGUgPQogICAgIihmdW5jdGlvbiAoY2FsbGJh
Y2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIg
YXJyYXkgPSBAdG9PYmplY3QodGhpcywgXCJBcnJheS5wcm90b3R5cGUuZmluZCByZXF1aXJlcyB0
aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJ2YXIgbGVu
Z3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7XG4iIFwKICAgICJpZiAodHlwZW9mIGNhbGxi
YWNrICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiQXJyYXku
cHJvdG90eXBlLmZpbmQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAi
dmFyIHRoaXNBcmcgPSBAYXJndW1lbnQoMSk7XG4iIFwKICAgICJmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7XG4iIFwKICAgICIgdmFyIGtWYWx1ZSA9IGFycmF5W2ldO1xuIiBcCiAg
ICAiIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBrVmFsdWUsIGksIGFycmF5KSlcbiIgXAog
ICAgIiAgcmV0dXJuIGtWYWx1ZTtcbiIgXAogICAgIn1cbiIgXAogICAgInJldHVybiBAdW5kZWZp
bmVkO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19h
cnJheVByb3RvdHlwZUZpbmRJbmRleENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBlRmlu
ZEluZGV4Q29kZUxlbmd0aCA9IDQzMjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXJy
YXlQcm90b3R5cGVGaW5kSW5kZXhDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29u
c3QgY2hhciogc19hcnJheVByb3RvdHlwZUZpbmRJbmRleENvZGUgPQogICAgIihmdW5jdGlvbiAo
Y2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAg
ICJ2YXIgYXJyYXkgPSBAdG9PYmplY3QodGhpcywgXCJBcnJheS5wcm90b3R5cGUuZmluZEluZGV4
IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAog
ICAgInZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTtcbiIgXAogICAgImlmICh0
eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJy
b3IoXCJBcnJheS5wcm90b3R5cGUuZmluZEluZGV4IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlv
blwiKTtcbiIgXAogICAgInZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiZm9y
ICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuIiBcCiAgICAiIGlmIChjYWxsYmFjay5A
Y2FsbCh0aGlzQXJnLCBhcnJheVtpXSwgaSwgYXJyYXkpKVxuIiBcCiAgICAiICByZXR1cm4gaTtc
biIgXAogICAgIn1cbiIgXAogICAgInJldHVybiAtMTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29u
c3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlQcm90b3R5cGVJbmNsdWRlc0NvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX2FycmF5UHJvdG90eXBlSW5jbHVkZXNDb2RlTGVuZ3RoID0gNjYyOwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheVByb3RvdHlwZUluY2x1ZGVzQ29kZUludHJpbnNp
YyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQcm90b3R5cGVJbmNsdWRl
c0NvZGUgPQogICAgIihmdW5jdGlvbiAoc2VhcmNoRWxlbWVudCApXG4iIFwKICAgICJ7XG4iIFwK
ICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBhcnJheSA9IEB0b09iamVjdCh0aGlz
LCBcIkFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUg
bnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJ2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFy
cmF5Lmxlbmd0aCk7XG4iIFwKICAgICJpZiAobGVuZ3RoID09PSAwKVxuIiBcCiAgICAiIHJldHVy
biBmYWxzZTtcbiIgXAogICAgInZhciBmcm9tSW5kZXggPSAwO1xuIiBcCiAgICAidmFyIGZyb20g
PSBAYXJndW1lbnQoMSk7XG4iIFwKICAgICJpZiAoZnJvbSAhPT0gQHVuZGVmaW5lZClcbiIgXAog
ICAgIiBmcm9tSW5kZXggPSBAdG9JbnRlZ2VyKGZyb20pO1xuIiBcCiAgICAidmFyIGluZGV4O1xu
IiBcCiAgICAiaWYgKGZyb21JbmRleCA+PSAwKVxuIiBcCiAgICAiIGluZGV4ID0gZnJvbUluZGV4
O1xuIiBcCiAgICAiZWxzZVxuIiBcCiAgICAiIGluZGV4ID0gbGVuZ3RoICsgZnJvbUluZGV4O1xu
IiBcCiAgICAiaWYgKGluZGV4IDwgMClcbiIgXAogICAgIiBpbmRleCA9IDA7XG4iIFwKICAgICJ2
YXIgY3VycmVudEVsZW1lbnQ7XG4iIFwKICAgICJmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5k
ZXgpIHtcbiIgXAogICAgIiBjdXJyZW50RWxlbWVudCA9IGFycmF5W2luZGV4XTtcbiIgXAogICAg
IiBpZiAoc2VhcmNoRWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnQgfHwgKHNlYXJjaEVsZW1lbnQg
IT09IHNlYXJjaEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQgIT09IGN1cnJlbnRFbGVtZW50KSlc
biIgXAogICAgIiAgcmV0dXJuIHRydWU7XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1cm4gZmFs
c2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2Fy
cmF5UHJvdG90eXBlU29ydENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBlU29ydENvZGVM
ZW5ndGggPSA0NjcxOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJheVByb3RvdHlw
ZVNvcnRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hcnJh
eVByb3RvdHlwZVNvcnRDb2RlID0KICAgICIoZnVuY3Rpb24gKGNvbXBhcmF0b3IpXG4iIFwKICAg
ICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImZ1bmN0aW9uIG1pbihhLCBi
KVxuIiBcCiAgICAie1xuIiBcCiAgICAiIHJldHVybiBhIDwgYiA/IGEgOiBiO1xuIiBcCiAgICAi
fVxuIiBcCiAgICAiZnVuY3Rpb24gc3RyaW5nQ29tcGFyYXRvcihhLCBiKVxuIiBcCiAgICAie1xu
IiBcCiAgICAiIHZhciBhU3RyaW5nID0gYS5zdHJpbmc7XG4iIFwKICAgICIgdmFyIGJTdHJpbmcg
PSBiLnN0cmluZztcbiIgXAogICAgIiB2YXIgYUxlbmd0aCA9IGFTdHJpbmcubGVuZ3RoO1xuIiBc
CiAgICAiIHZhciBiTGVuZ3RoID0gYlN0cmluZy5sZW5ndGg7XG4iIFwKICAgICIgdmFyIGxlbmd0
aCA9IG1pbihhTGVuZ3RoLCBiTGVuZ3RoKTtcbiIgXAogICAgIiBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7XG4iIFwKICAgICIgIHZhciBhQ2hhckNvZGUgPSBhU3RyaW5nLkBjaGFy
Q29kZUF0KGkpO1xuIiBcCiAgICAiICB2YXIgYkNoYXJDb2RlID0gYlN0cmluZy5AY2hhckNvZGVB
dChpKTtcbiIgXAogICAgIiAgaWYgKGFDaGFyQ29kZSA9PSBiQ2hhckNvZGUpXG4iIFwKICAgICIg
ICBjb250aW51ZTtcbiIgXAogICAgIiAgcmV0dXJuIGFDaGFyQ29kZSAtIGJDaGFyQ29kZTtcbiIg
XAogICAgIiB9XG4iIFwKICAgICIgcmV0dXJuIGFMZW5ndGggLSBiTGVuZ3RoO1xuIiBcCiAgICAi
fVxuIiBcCiAgICAiZnVuY3Rpb24gY29tcGFjdFNwYXJzZShhcnJheSwgZHN0LCBzcmMsIGxlbmd0
aClcbiIgXAogICAgIntcbiIgXAogICAgIiB2YXIgdmFsdWVzID0gWyBdO1xuIiBcCiAgICAiIHZh
ciBzZWVuID0geyB9O1xuIiBcCiAgICAiIHZhciB2YWx1ZUNvdW50ID0gMDtcbiIgXAogICAgIiB2
YXIgdW5kZWZpbmVkQ291bnQgPSAwO1xuIiBcCiAgICAiIGZvciAodmFyIGkgPSBkc3Q7IGkgPCBz
cmM7ICsraSlcbiIgXAogICAgIiAgZGVsZXRlIGFycmF5W2ldO1xuIiBcCiAgICAiIGZvciAodmFy
IG9iamVjdCA9IGFycmF5OyBvYmplY3Q7IG9iamVjdCA9IEBPYmplY3QuQGdldFByb3RvdHlwZU9m
KG9iamVjdCkpIHtcbiIgXAogICAgIiAgdmFyIHByb3BlcnR5TmFtZXMgPSBAT2JqZWN0LkBnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4iIFwKICAgICIgIGZvciAodmFyIGkgPSAwOyBpIDwg
cHJvcGVydHlOYW1lcy5sZW5ndGg7ICsraSkge1xuIiBcCiAgICAiICAgdmFyIGluZGV4ID0gcHJv
cGVydHlOYW1lc1tpXTtcbiIgXAogICAgIiAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuIiBcCiAg
ICAiICAgIGlmIChzZWVuW2luZGV4XSlcbiIgXAogICAgIiAgICAgY29udGludWU7XG4iIFwKICAg
ICIgICAgc2VlbltpbmRleF0gPSAxO1xuIiBcCiAgICAiICAgIHZhciB2YWx1ZSA9IGFycmF5W2lu
ZGV4XTtcbiIgXAogICAgIiAgICBkZWxldGUgYXJyYXlbaW5kZXhdO1xuIiBcCiAgICAiICAgIGlm
ICh2YWx1ZSA9PT0gQHVuZGVmaW5lZCkge1xuIiBcCiAgICAiICAgICArK3VuZGVmaW5lZENvdW50
O1xuIiBcCiAgICAiICAgICBjb250aW51ZTtcbiIgXAogICAgIiAgICB9XG4iIFwKICAgICIgICAg
YXJyYXlbdmFsdWVDb3VudCsrXSA9IHZhbHVlO1xuIiBcCiAgICAiICAgfVxuIiBcCiAgICAiICB9
XG4iIFwKICAgICIgfVxuIiBcCiAgICAiIGZvciAodmFyIGkgPSB2YWx1ZUNvdW50OyBpIDwgdmFs
dWVDb3VudCArIHVuZGVmaW5lZENvdW50OyArK2kpXG4iIFwKICAgICIgIGFycmF5W2ldID0gQHVu
ZGVmaW5lZDtcbiIgXAogICAgIiByZXR1cm4gdmFsdWVDb3VudDtcbiIgXAogICAgIn1cbiIgXAog
ICAgImZ1bmN0aW9uIGNvbXBhY3RTbG93KGFycmF5LCBsZW5ndGgpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgdmFyIGhvbGVDb3VudCA9IDA7XG4iIFwKICAgICIgZm9yICh2YXIgZHN0ID0gMCwgc3Jj
ID0gMDsgc3JjIDwgbGVuZ3RoOyArK3NyYykge1xuIiBcCiAgICAiICBpZiAoIShzcmMgaW4gYXJy
YXkpKSB7XG4iIFwKICAgICIgICArK2hvbGVDb3VudDtcbiIgXAogICAgIiAgIGlmIChob2xlQ291
bnQgPCAyNTYpXG4iIFwKICAgICIgICAgY29udGludWU7XG4iIFwKICAgICIgICByZXR1cm4gY29t
cGFjdFNwYXJzZShhcnJheSwgZHN0LCBzcmMsIGxlbmd0aCk7XG4iIFwKICAgICIgIH1cbiIgXAog
ICAgIiAgdmFyIHZhbHVlID0gYXJyYXlbc3JjXTtcbiIgXAogICAgIiAgaWYgKHZhbHVlID09PSBA
dW5kZWZpbmVkKVxuIiBcCiAgICAiICAgY29udGludWU7XG4iIFwKICAgICIgIGFycmF5W2RzdCsr
XSA9IHZhbHVlO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIiB2YXIgdmFsdWVDb3VudCA9IGRzdDtc
biIgXAogICAgIiB2YXIgdW5kZWZpbmVkQ291bnQgPSBsZW5ndGggLSB2YWx1ZUNvdW50IC0gaG9s
ZUNvdW50O1xuIiBcCiAgICAiIGZvciAodmFyIGkgPSB2YWx1ZUNvdW50OyBpIDwgdmFsdWVDb3Vu
dCArIHVuZGVmaW5lZENvdW50OyArK2kpXG4iIFwKICAgICIgIGFycmF5W2ldID0gQHVuZGVmaW5l
ZDtcbiIgXAogICAgIiBmb3IgKHZhciBpID0gdmFsdWVDb3VudCArIHVuZGVmaW5lZENvdW50OyBp
IDwgbGVuZ3RoOyArK2kpXG4iIFwKICAgICIgIGRlbGV0ZSBhcnJheVtpXTtcbiIgXAogICAgIiBy
ZXR1cm4gdmFsdWVDb3VudDtcbiIgXAogICAgIn1cbiIgXAogICAgImZ1bmN0aW9uIGNvbXBhY3Qo
YXJyYXksIGxlbmd0aClcbiIgXAogICAgIntcbiIgXAogICAgIiBmb3IgKHZhciBpID0gMDsgaSA8
IGFycmF5Lmxlbmd0aDsgKytpKSB7XG4iIFwKICAgICIgIGlmIChhcnJheVtpXSA9PT0gQHVuZGVm
aW5lZClcbiIgXAogICAgIiAgIHJldHVybiBjb21wYWN0U2xvdyhhcnJheSwgbGVuZ3RoKTtcbiIg
XAogICAgIiB9XG4iIFwKICAgICIgcmV0dXJuIGxlbmd0aDtcbiIgXAogICAgIn1cbiIgXAogICAg
ImZ1bmN0aW9uIG1lcmdlKGRzdCwgc3JjLCBzcmNJbmRleCwgc3JjRW5kLCB3aWR0aCwgY29tcGFy
YXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIiB2YXIgbGVmdCA9IHNyY0luZGV4O1xuIiBcCiAg
ICAiIHZhciBsZWZ0RW5kID0gbWluKGxlZnQgKyB3aWR0aCwgc3JjRW5kKTtcbiIgXAogICAgIiB2
YXIgcmlnaHQgPSBsZWZ0RW5kO1xuIiBcCiAgICAiIHZhciByaWdodEVuZCA9IG1pbihyaWdodCAr
IHdpZHRoLCBzcmNFbmQpO1xuIiBcCiAgICAiIGZvciAodmFyIGRzdEluZGV4ID0gbGVmdDsgZHN0
SW5kZXggPCByaWdodEVuZDsgKytkc3RJbmRleCkge1xuIiBcCiAgICAiICBpZiAocmlnaHQgPCBy
aWdodEVuZCkge1xuIiBcCiAgICAiICAgaWYgKGxlZnQgPj0gbGVmdEVuZCkge1xuIiBcCiAgICAi
ICAgIGRzdFtkc3RJbmRleF0gPSBzcmNbcmlnaHQrK107XG4iIFwKICAgICIgICAgY29udGludWU7
XG4iIFwKICAgICIgICB9XG4iIFwKICAgICIgICBsZXQgY29tcGFyaXNvblJlc3VsdCA9IGNvbXBh
cmF0b3Ioc3JjW3JpZ2h0XSwgc3JjW2xlZnRdKTtcbiIgXAogICAgIiAgIGlmICgodHlwZW9mIGNv
bXBhcmlzb25SZXN1bHQgPT09IFwiYm9vbGVhblwiICYmICFjb21wYXJpc29uUmVzdWx0KSB8fCBj
b21wYXJpc29uUmVzdWx0IDwgMCkge1xuIiBcCiAgICAiICAgIGRzdFtkc3RJbmRleF0gPSBzcmNb
cmlnaHQrK107XG4iIFwKICAgICIgICAgY29udGludWU7XG4iIFwKICAgICIgICB9XG4iIFwKICAg
ICIgIH1cbiIgXAogICAgIiAgZHN0W2RzdEluZGV4XSA9IHNyY1tsZWZ0KytdO1xuIiBcCiAgICAi
IH1cbiIgXAogICAgIn1cbiIgXAogICAgImZ1bmN0aW9uIG1lcmdlU29ydChhcnJheSwgdmFsdWVD
b3VudCwgY29tcGFyYXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIiB2YXIgYnVmZmVyID0gWyBd
O1xuIiBcCiAgICAiIGJ1ZmZlci5sZW5ndGggPSB2YWx1ZUNvdW50O1xuIiBcCiAgICAiIHZhciBk
c3QgPSBidWZmZXI7XG4iIFwKICAgICIgdmFyIHNyYyA9IGFycmF5O1xuIiBcCiAgICAiIGZvciAo
dmFyIHdpZHRoID0gMTsgd2lkdGggPCB2YWx1ZUNvdW50OyB3aWR0aCAqPSAyKSB7XG4iIFwKICAg
ICIgIGZvciAodmFyIHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCB2YWx1ZUNvdW50OyBzcmNJbmRl
eCArPSAyICogd2lkdGgpXG4iIFwKICAgICIgICBtZXJnZShkc3QsIHNyYywgc3JjSW5kZXgsIHZh
bHVlQ291bnQsIHdpZHRoLCBjb21wYXJhdG9yKTtcbiIgXAogICAgIiAgdmFyIHRtcCA9IHNyYztc
biIgXAogICAgIiAgc3JjID0gZHN0O1xuIiBcCiAgICAiICBkc3QgPSB0bXA7XG4iIFwKICAgICIg
fVxuIiBcCiAgICAiIGlmIChzcmMgIT0gYXJyYXkpIHtcbiIgXAogICAgIiAgZm9yKHZhciBpID0g
MDsgaSA8IHZhbHVlQ291bnQ7IGkrKylcbiIgXAogICAgIiAgIGFycmF5W2ldID0gc3JjW2ldO1xu
IiBcCiAgICAiIH1cbiIgXAogICAgIn1cbiIgXAogICAgImZ1bmN0aW9uIGJ1Y2tldFNvcnQoYXJy
YXksIGRzdCwgYnVja2V0LCBkZXB0aClcbiIgXAogICAgIntcbiIgXAogICAgIiBpZiAoYnVja2V0
Lmxlbmd0aCA8IDMyIHx8IGRlcHRoID4gMzIpIHtcbiIgXAogICAgIiAgbWVyZ2VTb3J0KGJ1Y2tl
dCwgYnVja2V0Lmxlbmd0aCwgc3RyaW5nQ29tcGFyYXRvcik7XG4iIFwKICAgICIgIGZvciAodmFy
IGkgPSAwOyBpIDwgYnVja2V0Lmxlbmd0aDsgKytpKVxuIiBcCiAgICAiICAgYXJyYXlbZHN0Kytd
ID0gYnVja2V0W2ldLnZhbHVlO1xuIiBcCiAgICAiICByZXR1cm4gZHN0O1xuIiBcCiAgICAiIH1c
biIgXAogICAgIiB2YXIgYnVja2V0cyA9IFsgXTtcbiIgXAogICAgIiBmb3IgKHZhciBpID0gMDsg
aSA8IGJ1Y2tldC5sZW5ndGg7ICsraSkge1xuIiBcCiAgICAiICB2YXIgZW50cnkgPSBidWNrZXRb
aV07XG4iIFwKICAgICIgIHZhciBzdHJpbmcgPSBlbnRyeS5zdHJpbmc7XG4iIFwKICAgICIgIGlm
IChzdHJpbmcubGVuZ3RoID09IGRlcHRoKSB7XG4iIFwKICAgICIgICBhcnJheVtkc3QrK10gPSBl
bnRyeS52YWx1ZTtcbiIgXAogICAgIiAgIGNvbnRpbnVlO1xuIiBcCiAgICAiICB9XG4iIFwKICAg
ICIgIHZhciBjID0gc3RyaW5nLkBjaGFyQ29kZUF0KGRlcHRoKTtcbiIgXAogICAgIiAgaWYgKCFi
dWNrZXRzW2NdKVxuIiBcCiAgICAiICAgYnVja2V0c1tjXSA9IFsgXTtcbiIgXAogICAgIiAgYnVj
a2V0c1tjXVtidWNrZXRzW2NdLmxlbmd0aF0gPSBlbnRyeTtcbiIgXAogICAgIiB9XG4iIFwKICAg
ICIgZm9yICh2YXIgaSA9IDA7IGkgPCBidWNrZXRzLmxlbmd0aDsgKytpKSB7XG4iIFwKICAgICIg
IGlmICghYnVja2V0c1tpXSlcbiIgXAogICAgIiAgIGNvbnRpbnVlO1xuIiBcCiAgICAiICBkc3Qg
PSBidWNrZXRTb3J0KGFycmF5LCBkc3QsIGJ1Y2tldHNbaV0sIGRlcHRoICsgMSk7XG4iIFwKICAg
ICIgfVxuIiBcCiAgICAiIHJldHVybiBkc3Q7XG4iIFwKICAgICJ9XG4iIFwKICAgICJmdW5jdGlv
biBjb21wYXJhdG9yU29ydChhcnJheSwgbGVuZ3RoLCBjb21wYXJhdG9yKVxuIiBcCiAgICAie1xu
IiBcCiAgICAiIHZhciB2YWx1ZUNvdW50ID0gY29tcGFjdChhcnJheSwgbGVuZ3RoKTtcbiIgXAog
ICAgIiBtZXJnZVNvcnQoYXJyYXksIHZhbHVlQ291bnQsIGNvbXBhcmF0b3IpO1xuIiBcCiAgICAi
fVxuIiBcCiAgICAiZnVuY3Rpb24gc3RyaW5nU29ydChhcnJheSwgbGVuZ3RoKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiIHZhciB2YWx1ZUNvdW50ID0gY29tcGFjdChhcnJheSwgbGVuZ3RoKTtcbiIg
XAogICAgIiB2YXIgc3RyaW5ncyA9IEBuZXdBcnJheVdpdGhTaXplKHZhbHVlQ291bnQpO1xuIiBc
CiAgICAiIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVDb3VudDsgKytpKVxuIiBcCiAgICAiICBz
dHJpbmdzW2ldID0geyBzdHJpbmc6IEB0b1N0cmluZyhhcnJheVtpXSksIHZhbHVlOiBhcnJheVtp
XSB9O1xuIiBcCiAgICAiIGJ1Y2tldFNvcnQoYXJyYXksIDAsIHN0cmluZ3MsIDApO1xuIiBcCiAg
ICAifVxuIiBcCiAgICAidmFyIGFycmF5ID0gQHRvT2JqZWN0KHRoaXMsIFwiQXJyYXkucHJvdG90
eXBlLnNvcnQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkXCIp
O1xuIiBcCiAgICAidmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA+Pj4gMDtcbiIgXAogICAgImlm
IChsZW5ndGggPCAyKVxuIiBcCiAgICAiIHJldHVybiBhcnJheTtcbiIgXAogICAgImlmICh0eXBl
b2YgY29tcGFyYXRvciA9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgY29tcGFyYXRvclNvcnQo
YXJyYXksIGxlbmd0aCwgY29tcGFyYXRvcik7XG4iIFwKICAgICJlbHNlIGlmIChjb21wYXJhdG9y
ID09PSBudWxsIHx8IGNvbXBhcmF0b3IgPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgc3RyaW5n
U29ydChhcnJheSwgbGVuZ3RoKTtcbiIgXAogICAgImVsc2VcbiIgXAogICAgIiBAdGhyb3dUeXBl
RXJyb3IoXCJBcnJheS5wcm90b3R5cGUuc29ydCByZXF1aXJlcyB0aGUgY29tcGFyc2lvbiBmdW5j
dGlvbiBiZSBhIGZ1bmN0aW9uIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgInJldHVybiBhcnJh
eTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXJy
YXlQcm90b3R5cGVDb25jYXRTbG93UGF0aENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBl
Q29uY2F0U2xvd1BhdGhDb2RlTGVuZ3RoID0gMTY0MDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmlu
c2ljIHNfYXJyYXlQcm90b3R5cGVDb25jYXRTbG93UGF0aENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FycmF5UHJvdG90eXBlQ29uY2F0U2xvd1BhdGhDb2Rl
ID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwi
O1xuIiBcCiAgICAidmFyIGN1cnJlbnRFbGVtZW50ID0gQHRvT2JqZWN0KHRoaXMsIFwiQXJyYXku
cHJvdG90eXBlLmNvbmNhdCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRl
ZmluZWRcIik7XG4iIFwKICAgICJ2YXIgY29uc3RydWN0b3I7XG4iIFwKICAgICJpZiAoQGlzQXJy
YXkoY3VycmVudEVsZW1lbnQpKSB7XG4iIFwKICAgICIgY29uc3RydWN0b3IgPSBjdXJyZW50RWxl
bWVudC5jb25zdHJ1Y3RvcjtcbiIgXAogICAgIiBpZiAoQGlzQXJyYXlDb25zdHJ1Y3Rvcihjb25z
dHJ1Y3RvcikgJiYgQEFycmF5ICE9PSBjb25zdHJ1Y3RvcilcbiIgXAogICAgIiAgY29uc3RydWN0
b3IgPSBAdW5kZWZpbmVkO1xuIiBcCiAgICAiIGVsc2UgaWYgKEBpc09iamVjdChjb25zdHJ1Y3Rv
cikpIHtcbiIgXAogICAgIiAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5Ac3BlY2llc1N5bWJv
bDtcbiIgXAogICAgIiAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsKVxuIiBcCiAgICAiICAgY29u
c3RydWN0b3IgPSBAQXJyYXk7XG4iIFwKICAgICIgfVxuIiBcCiAgICAifVxuIiBcCiAgICAidmFy
IGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiIgXAogICAgInZhciByZXN1bHQ7XG4iIFwK
ICAgICJpZiAoY29uc3RydWN0b3IgPT09IEBBcnJheSB8fCBjb25zdHJ1Y3RvciA9PT0gQHVuZGVm
aW5lZClcbiIgXAogICAgIiByZXN1bHQgPSBAbmV3QXJyYXlXaXRoU2l6ZSgwKTtcbiIgXAogICAg
ImVsc2VcbiIgXAogICAgIiByZXN1bHQgPSBuZXcgY29uc3RydWN0b3IoMCk7XG4iIFwKICAgICJ2
YXIgcmVzdWx0SXNBcnJheSA9IEBpc0pTQXJyYXkocmVzdWx0KTtcbiIgXAogICAgInZhciByZXN1
bHRJbmRleCA9IDA7XG4iIFwKICAgICJ2YXIgYXJnSW5kZXggPSAwO1xuIiBcCiAgICAiZG8ge1xu
IiBcCiAgICAiIGxldCBzcHJlYWRhYmxlID0gQGlzT2JqZWN0KGN1cnJlbnRFbGVtZW50KSAmJiBj
dXJyZW50RWxlbWVudC5AaXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sO1xuIiBcCiAgICAiIGlmICgo
c3ByZWFkYWJsZSA9PT0gQHVuZGVmaW5lZCAmJiBAaXNBcnJheShjdXJyZW50RWxlbWVudCkpIHx8
IHNwcmVhZGFibGUpIHtcbiIgXAogICAgIiAgbGV0IGxlbmd0aCA9IEB0b0xlbmd0aChjdXJyZW50
RWxlbWVudC5sZW5ndGgpO1xuIiBcCiAgICAiICBpZiAobGVuZ3RoICsgcmVzdWx0SW5kZXggPiBA
TUFYX0FSUkFZX0lOREVYKVxuIiBcCiAgICAiICAgQHRocm93UmFuZ2VFcnJvcihcIkxlbmd0aCBl
eGNlZWRlZCB0aGUgbWF4aW11bSBhcnJheSBsZW5ndGhcIik7XG4iIFwKICAgICIgIGlmIChyZXN1
bHRJc0FycmF5ICYmIEBpc0pTQXJyYXkoY3VycmVudEVsZW1lbnQpKSB7XG4iIFwKICAgICIgICBA
YXBwZW5kTWVtY3B5KHJlc3VsdCwgY3VycmVudEVsZW1lbnQsIHJlc3VsdEluZGV4KTtcbiIgXAog
ICAgIiAgIHJlc3VsdEluZGV4ICs9IGxlbmd0aDtcbiIgXAogICAgIiAgfSBlbHNlIHtcbiIgXAog
ICAgIiAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiIgXAogICAgIiAgICBp
ZiAoaSBpbiBjdXJyZW50RWxlbWVudClcbiIgXAogICAgIiAgICAgQHB1dEJ5VmFsRGlyZWN0KHJl
c3VsdCwgcmVzdWx0SW5kZXgsIGN1cnJlbnRFbGVtZW50W2ldKTtcbiIgXAogICAgIiAgICByZXN1
bHRJbmRleCsrO1xuIiBcCiAgICAiICAgfVxuIiBcCiAgICAiICB9XG4iIFwKICAgICIgfSBlbHNl
IHtcbiIgXAogICAgIiAgaWYgKHJlc3VsdEluZGV4ID49IEBNQVhfQVJSQVlfSU5ERVgpXG4iIFwK
ICAgICIgICBAdGhyb3dSYW5nZUVycm9yKFwiTGVuZ3RoIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFy
cmF5IGxlbmd0aFwiKTtcbiIgXAogICAgIiAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwgcmVzdWx0
SW5kZXgrKywgY3VycmVudEVsZW1lbnQpO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIiBjdXJyZW50
RWxlbWVudCA9IGFyZ3VtZW50c1thcmdJbmRleF07XG4iIFwKICAgICJ9IHdoaWxlIChhcmdJbmRl
eCsrIDwgYXJnQ291bnQpO1xuIiBcCiAgICAicmVzdWx0Lmxlbmd0aCA9IHJlc3VsdEluZGV4O1xu
IiBcCiAgICAicmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpD
b25zdHJ1Y3RBYmlsaXR5IHNfYXJyYXlQcm90b3R5cGVDb25jYXRDb2RlQ29uc3RydWN0QWJpbGl0
eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19h
cnJheVByb3RvdHlwZUNvbmNhdENvZGVMZW5ndGggPSAzNTI7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX2FycmF5UHJvdG90eXBlQ29uY2F0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRy
aW5zaWM7CmNvbnN0IGNoYXIqIHNfYXJyYXlQcm90b3R5cGVDb25jYXRDb2RlID0KICAgICIoZnVu
Y3Rpb24gKGZpcnN0KVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICJpZiAoQGFyZ3VtZW50Q291bnQoKSA9PT0gMVxuIiBcCiAgICAiICYmIEBpc0pTQXJyYXko
dGhpcylcbiIgXAogICAgIiAmJiB0aGlzLkBpc0NvbmNhdFNwcmVhZGFibGVTeW1ib2wgPT09IEB1
bmRlZmluZWRcbiIgXAogICAgIiAmJiAoIUBpc09iamVjdChmaXJzdCkgfHwgZmlyc3QuQGlzQ29u
Y2F0U3ByZWFkYWJsZVN5bWJvbCA9PT0gQHVuZGVmaW5lZCkpIHtcbiIgXAogICAgIiBsZXQgcmVz
dWx0ID0gQGNvbmNhdE1lbWNweSh0aGlzLCBmaXJzdCk7XG4iIFwKICAgICIgaWYgKHJlc3VsdCAh
PT0gbnVsbClcbiIgXAogICAgIiAgcmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn1cbiIgXAogICAg
InJldHVybiBAdGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKEBjb25jYXRTbG93UGF0aCwgdGhpcyk7
XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FycmF5
UHJvdG90eXBlQ29weVdpdGhpbkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FycmF5UHJvdG90eXBlQ29weVdp
dGhpbkNvZGVMZW5ndGggPSAxMzg2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hcnJh
eVByb3RvdHlwZUNvcHlXaXRoaW5Db2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29u
c3QgY2hhciogc19hcnJheVByb3RvdHlwZUNvcHlXaXRoaW5Db2RlID0KICAgICIoZnVuY3Rpb24g
KHRhcmdldCwgc3RhcnQgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICJmdW5jdGlvbiBtYXhXaXRoUG9zaXRpdmVzKGEsIGIpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICIgcmV0dXJuIChhIDwgYikgPyBiIDogYTtcbiIgXAogICAgIn1cbiIgXAogICAgImZ1bmN0
aW9uIG1pbldpdGhNYXliZU5lZ2F0aXZlWmVyb0FuZFBvc2l0aXZlKG1heWJlTmVnYXRpdmVaZXJv
LCBwb3NpdGl2ZSlcbiIgXAogICAgIntcbiIgXAogICAgIiByZXR1cm4gKG1heWJlTmVnYXRpdmVa
ZXJvIDwgcG9zaXRpdmUpID8gbWF5YmVOZWdhdGl2ZVplcm8gOiBwb3NpdGl2ZTtcbiIgXAogICAg
In1cbiIgXAogICAgInZhciBhcnJheSA9IEB0b09iamVjdCh0aGlzLCBcIkFycmF5LnByb3RvdHlw
ZS5jb3B5V2l0aGluIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5l
ZFwiKTtcbiIgXAogICAgInZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTtcbiIg
XAogICAgInZhciByZWxhdGl2ZVRhcmdldCA9IEB0b0ludGVnZXIodGFyZ2V0KTtcbiIgXAogICAg
InZhciB0byA9IChyZWxhdGl2ZVRhcmdldCA8IDApID8gbWF4V2l0aFBvc2l0aXZlcyhsZW5ndGgg
KyByZWxhdGl2ZVRhcmdldCwgMCkgOiBtaW5XaXRoTWF5YmVOZWdhdGl2ZVplcm9BbmRQb3NpdGl2
ZShyZWxhdGl2ZVRhcmdldCwgbGVuZ3RoKTtcbiIgXAogICAgInZhciByZWxhdGl2ZVN0YXJ0ID0g
QHRvSW50ZWdlcihzdGFydCk7XG4iIFwKICAgICJ2YXIgZnJvbSA9IChyZWxhdGl2ZVN0YXJ0IDwg
MCkgPyBtYXhXaXRoUG9zaXRpdmVzKGxlbmd0aCArIHJlbGF0aXZlU3RhcnQsIDApIDogbWluV2l0
aE1heWJlTmVnYXRpdmVaZXJvQW5kUG9zaXRpdmUocmVsYXRpdmVTdGFydCwgbGVuZ3RoKTtcbiIg
XAogICAgInZhciByZWxhdGl2ZUVuZDtcbiIgXAogICAgInZhciBlbmQgPSBAYXJndW1lbnQoMik7
XG4iIFwKICAgICJpZiAoZW5kID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiIHJlbGF0aXZlRW5k
ID0gbGVuZ3RoO1xuIiBcCiAgICAiZWxzZVxuIiBcCiAgICAiIHJlbGF0aXZlRW5kID0gQHRvSW50
ZWdlcihlbmQpO1xuIiBcCiAgICAidmFyIGZpbmFsVmFsdWUgPSAocmVsYXRpdmVFbmQgPCAwKSA/
IG1heFdpdGhQb3NpdGl2ZXMobGVuZ3RoICsgcmVsYXRpdmVFbmQsIDApIDogbWluV2l0aE1heWJl
TmVnYXRpdmVaZXJvQW5kUG9zaXRpdmUocmVsYXRpdmVFbmQsIGxlbmd0aCk7XG4iIFwKICAgICJ2
YXIgY291bnQgPSBtaW5XaXRoTWF5YmVOZWdhdGl2ZVplcm9BbmRQb3NpdGl2ZShmaW5hbFZhbHVl
IC0gZnJvbSwgbGVuZ3RoIC0gdG8pO1xuIiBcCiAgICAidmFyIGRpcmVjdGlvbiA9IDE7XG4iIFwK
ICAgICJpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4iIFwKICAgICIgZGly
ZWN0aW9uID0gLTE7XG4iIFwKICAgICIgZnJvbSA9IGZyb20gKyBjb3VudCAtIDE7XG4iIFwKICAg
ICIgdG8gPSB0byArIGNvdW50IC0gMTtcbiIgXAogICAgIn1cbiIgXAogICAgImZvciAodmFyIGkg
PSAwOyBpIDwgY291bnQ7ICsraSwgZnJvbSArPSBkaXJlY3Rpb24sIHRvICs9IGRpcmVjdGlvbikg
e1xuIiBcCiAgICAiIGlmIChmcm9tIGluIGFycmF5KVxuIiBcCiAgICAiICBhcnJheVt0b10gPSBh
cnJheVtmcm9tXTtcbiIgXAogICAgIiBlbHNlXG4iIFwKICAgICIgIGRlbGV0ZSBhcnJheVt0b107
XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1cm4gYXJyYXk7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3Rv
dHlwZU5leHRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19hc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVO
ZXh0Q29kZUxlbmd0aCA9IDg3NDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNG
cm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmlu
c2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZU5leHRDb2Rl
ID0KICAgICIoZnVuY3Rpb24gKHZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3Ry
aWN0XCI7XG4iIFwKICAgICJjb25zdCBwcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2Fw
YWJpbGl0eShAUHJvbWlzZSk7XG4iIFwKICAgICJpZiAoIUBpc09iamVjdCh0aGlzKSB8fCAhQGlz
T2JqZWN0KHRoaXMuQHN5bmNJdGVyYXRvcikpIHtcbiIgXAogICAgIiBwcm9taXNlQ2FwYWJpbGl0
eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIG5ldyBAVHlwZUVycm9yKCdJdGVyYXRvciBpcyBu
b3QgYW4gb2JqZWN0LicpKTtcbiIgXAogICAgIiByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHBy
b21pc2U7XG4iIFwKICAgICJ9XG4iIFwKICAgICJjb25zdCBzeW5jSXRlcmF0b3IgPSB0aGlzLkBz
eW5jSXRlcmF0b3I7XG4iIFwKICAgICJ0cnkge1xuIiBcCiAgICAiIGNvbnN0IHsgZG9uZTogbmV4
dERvbmUsIHZhbHVlOiBuZXh0VmFsdWUgfSA9IHRoaXMuQG5leHRNZXRob2QuQGNhbGwoc3luY0l0
ZXJhdG9yLCB2YWx1ZSk7XG4iIFwKICAgICIgY29uc3QgdmFsdWVXcmFwcGVyQ2FwYWJpbGl0eSA9
IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShAUHJvbWlzZSk7XG4iIFwKICAgICIgdmFsdWVXcmFwcGVy
Q2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCBuZXh0VmFsdWUpO1xuIiBcCiAg
ICAiIHZhbHVlV3JhcHBlckNhcGFiaWxpdHkuQHByb21pc2UuQHRoZW4oXG4iIFwKICAgICIgIGZ1
bmN0aW9uIChyZXN1bHQpIHsgcHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwoQHVuZGVm
aW5lZCwgeyBkb25lOiAhIW5leHREb25lLCB2YWx1ZTogcmVzdWx0IH0pOyB9LFxuIiBcCiAgICAi
ICBmdW5jdGlvbiAoZXJyb3IpIHsgcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5k
ZWZpbmVkLCBlcnJvcik7IH0pO1xuIiBcCiAgICAifSBjYXRjaChlKSB7XG4iIFwKICAgICIgcHJv
bWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBlKTtcbiIgXAogICAgIn1c
biIgXAogICAgInJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTtcbiIgXAogICAgIn0p
XG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNGcm9tU3luY0l0ZXJh
dG9yUHJvdG90eXBlUmV0dXJuQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFi
aWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXN5bmNGcm9tU3luY0l0ZXJhdG9y
UHJvdG90eXBlUmV0dXJuQ29kZUxlbmd0aCA9IDE0MDE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJp
bnNpYyBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZVJldHVybkNvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclBy
b3RvdHlwZVJldHVybkNvZGUgPQogICAgIihmdW5jdGlvbiAodmFsdWUpXG4iIFwKICAgICJ7XG4i
IFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImNvbnN0IHByb21pc2VDYXBhYmlsaXR5
ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBQcm9taXNlKTtcbiIgXAogICAgImlmICghQGlzT2Jq
ZWN0KHRoaXMpIHx8ICFAaXNPYmplY3QodGhpcy5Ac3luY0l0ZXJhdG9yKSkge1xuIiBcCiAgICAi
IHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgbmV3IEBUeXBlRXJy
b3IoJ0l0ZXJhdG9yIGlzIG5vdCBhbiBvYmplY3QuJykpO1xuIiBcCiAgICAiIHJldHVybiBwcm9t
aXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTtcbiIgXAogICAgIn1cbiIgXAogICAgImNvbnN0IHN5bmNJ
dGVyYXRvciA9IHRoaXMuQHN5bmNJdGVyYXRvcjtcbiIgXAogICAgImxldCByZXR1cm5NZXRob2Q7
XG4iIFwKICAgICJ0cnkge1xuIiBcCiAgICAiIHJldHVybk1ldGhvZCA9IHN5bmNJdGVyYXRvci5y
ZXR1cm47XG4iIFwKICAgICJ9IGNhdGNoIChlKSB7XG4iIFwKICAgICIgcHJvbWlzZUNhcGFiaWxp
dHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBlKTtcbiIgXAogICAgIiByZXR1cm4gcHJvbWlz
ZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9XG4iIFwKICAgICJpZiAocmV0dXJuTWV0
aG9kID09PSBAdW5kZWZpbmVkKSB7XG4iIFwKICAgICIgcHJvbWlzZUNhcGFiaWxpdHkuQHJlc29s
dmUuQGNhbGwoQHVuZGVmaW5lZCwgeyB2YWx1ZSwgZG9uZTogdHJ1ZSB9KTtcbiIgXAogICAgIiBy
ZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9XG4iIFwKICAgICJ0
cnkge1xuIiBcCiAgICAiIGNvbnN0IHJldHVyblJlc3VsdCA9IHJldHVybk1ldGhvZC5AY2FsbChz
eW5jSXRlcmF0b3IsIHZhbHVlKTtcbiIgXAogICAgIiBpZiAoIUBpc09iamVjdChyZXR1cm5SZXN1
bHQpKSB7XG4iIFwKICAgICIgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwoQHVuZGVm
aW5lZCwgbmV3IEBUeXBlRXJyb3IoJ0l0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFu
IG9iamVjdC4nKSk7XG4iIFwKICAgICIgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlz
ZTtcbiIgXAogICAgIiB9XG4iIFwKICAgICIgY29uc3QgeyBkb25lOiByZXN1bHREb25lLCB2YWx1
ZTogcmVzdWx0VmFsdWUgfSA9IHJldHVyblJlc3VsdDtcbiIgXAogICAgIiBjb25zdCB2YWx1ZVdy
YXBwZXJDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBQcm9taXNlKTtcbiIgXAog
ICAgIiB2YWx1ZVdyYXBwZXJDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHJl
c3VsdFZhbHVlKTtcbiIgXAogICAgIiB2YWx1ZVdyYXBwZXJDYXBhYmlsaXR5LkBwcm9taXNlLkB0
aGVuKFxuIiBcCiAgICAiICBmdW5jdGlvbiAocmVzdWx0KSB7IHByb21pc2VDYXBhYmlsaXR5LkBy
ZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHsgZG9uZTogcmVzdWx0RG9uZSwgdmFsdWU6IHJlc3Vs
dCB9KTsgfSxcbiIgXAogICAgIiAgZnVuY3Rpb24gKGVycm9yKSB7IHByb21pc2VDYXBhYmlsaXR5
LkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJyb3IpOyB9KTtcbiIgXAogICAgIn0gY2F0Y2gg
KGUpIHtcbiIgXAogICAgIiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmlu
ZWQsIGUpO1xuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkBw
cm9taXNlO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19hc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVUaHJvd0NvZGVDb25zdHJ1Y3RBYmlsaXR5
ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2Fz
eW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZVRocm93Q29kZUxlbmd0aCA9IDEzOTA7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZVRo
cm93Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXN5bmNG
cm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlVGhyb3dDb2RlID0KICAgICIoZnVuY3Rpb24gKGV4Y2Vw
dGlvbilcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiY29u
c3QgcHJvbWlzZUNhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQFByb21pc2UpO1xu
IiBcCiAgICAiaWYgKCFAaXNPYmplY3QodGhpcykgfHwgIUBpc09iamVjdCh0aGlzLkBzeW5jSXRl
cmF0b3IpKSB7XG4iIFwKICAgICIgcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5k
ZWZpbmVkLCBuZXcgQFR5cGVFcnJvcignSXRlcmF0b3IgaXMgbm90IGFuIG9iamVjdC4nKSk7XG4i
IFwKICAgICIgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAifVxu
IiBcCiAgICAiY29uc3Qgc3luY0l0ZXJhdG9yID0gdGhpcy5Ac3luY0l0ZXJhdG9yO1xuIiBcCiAg
ICAibGV0IHRocm93TWV0aG9kO1xuIiBcCiAgICAidHJ5IHtcbiIgXAogICAgIiB0aHJvd01ldGhv
ZCA9IHN5bmNJdGVyYXRvci50aHJvdztcbiIgXAogICAgIn0gY2F0Y2ggKGUpIHtcbiIgXAogICAg
IiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGUpO1xuIiBcCiAg
ICAiIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTtcbiIgXAogICAgIn1cbiIgXAog
ICAgImlmICh0aHJvd01ldGhvZCA9PT0gQHVuZGVmaW5lZCkge1xuIiBcCiAgICAiIHByb21pc2VD
YXBhYmlsaXR5LkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZXhjZXB0aW9uKTtcbiIgXAogICAg
IiByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9XG4iIFwKICAg
ICJ0cnkge1xuIiBcCiAgICAiIGNvbnN0IHRocm93UmVzdWx0ID0gdGhyb3dNZXRob2QuQGNhbGwo
c3luY0l0ZXJhdG9yLCBleGNlcHRpb24pO1xuIiBcCiAgICAiIFxuIiBcCiAgICAiIGlmICghQGlz
T2JqZWN0KHRocm93UmVzdWx0KSkge1xuIiBcCiAgICAiICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVq
ZWN0LkBjYWxsKEB1bmRlZmluZWQsIG5ldyBAVHlwZUVycm9yKCdJdGVyYXRvciByZXN1bHQgaW50
ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuJykpO1xuIiBcCiAgICAiICByZXR1cm4gcHJvbWlzZUNh
cGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICIgfVxuIiBcCiAgICAiIFxuIiBcCiAgICAiIGNv
bnN0IHsgZG9uZTogdGhyb3dEb25lLCB2YWx1ZTogdGhyb3dWYWx1ZSB9ID0gdGhyb3dSZXN1bHQ7
XG4iIFwKICAgICIgY29uc3QgdmFsdWVXcmFwcGVyQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2Fw
YWJpbGl0eShAUHJvbWlzZSk7XG4iIFwKICAgICIgXG4iIFwKICAgICIgdmFsdWVXcmFwcGVyQ2Fw
YWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB0aHJvd1ZhbHVlKTtcbiIgXAogICAg
IiB2YWx1ZVdyYXBwZXJDYXBhYmlsaXR5LkBwcm9taXNlLkB0aGVuKFxuIiBcCiAgICAiICBmdW5j
dGlvbiAocmVzdWx0KSB7IHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmlu
ZWQsIHsgZG9uZTogdGhyb3dEb25lLCB2YWx1ZTogcmVzdWx0IH0pOyB9LFxuIiBcCiAgICAiICBm
dW5jdGlvbiAoZXJyb3IpIHsgcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZp
bmVkLCBlcnJvcik7IH0pO1xuIiBcCiAgICAifSBjYXRjaCAoZSkge1xuIiBcCiAgICAiIHByb21p
c2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZSk7XG4iIFwKICAgICJ9XG4i
IFwKICAgICJyZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jRnJvbVN5bmNJdGVyYXRv
clByb3RvdHlwZUNyZWF0ZUFzeW5jRnJvbVN5bmNJdGVyYXRvckNvZGVDb25zdHJ1Y3RBYmlsaXR5
ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2Fz
eW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZUNyZWF0ZUFzeW5jRnJvbVN5bmNJdGVyYXRvckNv
ZGVMZW5ndGggPSAyMjA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5jRnJvbVN5
bmNJdGVyYXRvclByb3RvdHlwZUNyZWF0ZUFzeW5jRnJvbVN5bmNJdGVyYXRvckNvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jRnJvbVN5bmNJdGVyYXRv
clByb3RvdHlwZUNyZWF0ZUFzeW5jRnJvbVN5bmNJdGVyYXRvckNvZGUgPQogICAgIihmdW5jdGlv
biAoc3luY0l0ZXJhdG9yLCBuZXh0TWV0aG9kKVxuIiBcCiAgICAie1xuIiBcCiAgICAiaWYgKCFA
aXNPYmplY3Qoc3luY0l0ZXJhdG9yKSlcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoJ09ubHkg
b2JqZWN0cyBjYW4gYmUgd3JhcHBlZCBieSBhc3luYy1mcm9tLXN5bmMgd3JhcHBlcicpO1xuIiBc
CiAgICAicmV0dXJuIG5ldyBAQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29uc3RydWN0b3Ioc3luY0l0
ZXJhdG9yLCBuZXh0TWV0aG9kKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5IHNfYXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlQXN5bmNGcm9tU3lu
Y0l0ZXJhdG9yQ29uc3RydWN0b3JDb25zdHJ1Y3RvckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlND
OjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5Db25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jRnJvbVN5
bmNJdGVyYXRvclByb3RvdHlwZUFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3JDb2RlTGVuZ3RoID0gMTA4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hc3lu
Y0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGVBc3luY0Zyb21TeW5jSXRlcmF0b3JDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIq
IHNfYXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29u
c3RydWN0b3JDb25zdHJ1Y3RvckNvZGUgPQogICAgIihmdW5jdGlvbiAoc3luY0l0ZXJhdG9yLCBu
ZXh0TWV0aG9kKVxuIiBcCiAgICAie1xuIiBcCiAgICAidGhpcy5Ac3luY0l0ZXJhdG9yID0gc3lu
Y0l0ZXJhdG9yO1xuIiBcCiAgICAidGhpcy5AbmV4dE1ldGhvZCA9IG5leHRNZXRob2Q7XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jRnVuY3Rp
b25Qcm90b3R5cGVBc3luY0Z1bmN0aW9uUmVzdW1lQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6
OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXN5bmNGdW5j
dGlvblByb3RvdHlwZUFzeW5jRnVuY3Rpb25SZXN1bWVDb2RlTGVuZ3RoID0gMTI1MTsKc3RhdGlj
IGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNGdW5jdGlvblByb3RvdHlwZUFzeW5jRnVuY3Rp
b25SZXN1bWVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19h
c3luY0Z1bmN0aW9uUHJvdG90eXBlQXN5bmNGdW5jdGlvblJlc3VtZUNvZGUgPQogICAgIihmdW5j
dGlvbiAoZ2VuZXJhdG9yLCBwcm9taXNlQ2FwYWJpbGl0eSwgc2VudFZhbHVlLCByZXN1bWVNb2Rl
KVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJsZXQgc3Rh
dGUgPSBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlO1xuIiBcCiAgICAibGV0IHZhbHVlID0gQHVu
ZGVmaW5lZDtcbiIgXAogICAgImlmIChzdGF0ZSA9PT0gQEdlbmVyYXRvclN0YXRlQ29tcGxldGVk
IHx8IChyZXN1bWVNb2RlICE9PSBAR2VuZXJhdG9yUmVzdW1lTW9kZU5vcm1hbCAmJiByZXN1bWVN
b2RlICE9PSBAR2VuZXJhdG9yUmVzdW1lTW9kZVRocm93KSlcbiIgXAogICAgIiBAdGhyb3dUeXBl
RXJyb3IoXCJBc3luYyBmdW5jdGlvbiBpbGxlZ2FsbHkgcmVzdW1lZFwiKTtcbiIgXAogICAgInRy
eSB7XG4iIFwKICAgICIgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9IEBHZW5lcmF0b3JTdGF0
ZUV4ZWN1dGluZztcbiIgXAogICAgIiB2YWx1ZSA9IGdlbmVyYXRvci5AZ2VuZXJhdG9yTmV4dC5A
Y2FsbChnZW5lcmF0b3IuQGdlbmVyYXRvclRoaXMsIGdlbmVyYXRvciwgc3RhdGUsIHNlbnRWYWx1
ZSwgcmVzdW1lTW9kZSwgZ2VuZXJhdG9yLkBnZW5lcmF0b3JGcmFtZSk7XG4iIFwKICAgICIgaWYg
KGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPT09IEBHZW5lcmF0b3JTdGF0ZUV4ZWN1dGluZykg
e1xuIiBcCiAgICAiICBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID0gQEdlbmVyYXRvclN0YXRl
Q29tcGxldGVkO1xuIiBcCiAgICAiICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSh2YWx1ZSk7
XG4iIFwKICAgICIgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTtcbiIgXAogICAg
IiB9XG4iIFwKICAgICJ9IGNhdGNoIChlcnJvcikge1xuIiBcCiAgICAiIGdlbmVyYXRvci5AZ2Vu
ZXJhdG9yU3RhdGUgPSBAR2VuZXJhdG9yU3RhdGVDb21wbGV0ZWQ7XG4iIFwKICAgICIgcHJvbWlz
ZUNhcGFiaWxpdHkuQHJlamVjdChlcnJvcik7XG4iIFwKICAgICIgcmV0dXJuIHByb21pc2VDYXBh
YmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAifVxuIiBcCiAgICAibGV0IHdyYXBwZWRWYWx1ZSA9
IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShAUHJvbWlzZSk7XG4iIFwKICAgICJ3cmFwcGVkVmFsdWUu
QHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgdmFsdWUpO1xuIiBcCiAgICAid3JhcHBlZFZhbHVl
LkBwcm9taXNlLkB0aGVuKFxuIiBcCiAgICAiIGZ1bmN0aW9uKHZhbHVlKSB7IEBhc3luY0Z1bmN0
aW9uUmVzdW1lKGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIHZhbHVlLCBAR2VuZXJhdG9y
UmVzdW1lTW9kZU5vcm1hbCk7IH0sXG4iIFwKICAgICIgZnVuY3Rpb24oZXJyb3IpIHsgQGFzeW5j
RnVuY3Rpb25SZXN1bWUoZ2VuZXJhdG9yLCBwcm9taXNlQ2FwYWJpbGl0eSwgZXJyb3IsIEBHZW5l
cmF0b3JSZXN1bWVNb2RlVGhyb3cpOyB9KTtcbiIgXAogICAgInJldHVybiBwcm9taXNlQ2FwYWJp
bGl0eS5AcHJvbWlzZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclF1ZXVlSXNFbXB0
eUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25z
dHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JR
dWV1ZUlzRW1wdHlDb2RlTGVuZ3RoID0gOTM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JRdWV1ZUlzRW1wdHlDb2RlSW50
cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hc3luY0dlbmVyYXRvclBy
b3RvdHlwZUFzeW5jR2VuZXJhdG9yUXVldWVJc0VtcHR5Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChn
ZW5lcmF0b3IpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAg
InJldHVybiBnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yUXVldWVMYXN0ID09PSBudWxsO1xuIiBc
CiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hc3luY0dlbmVy
YXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUXVldWVFbnF1ZXVlQ29kZUNvbnN0cnVjdEFiaWxp
dHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNf
YXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclF1ZXVlRW5xdWV1ZUNvZGVMZW5n
dGggPSA1NTE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5jR2VuZXJhdG9yUHJv
dG90eXBlQXN5bmNHZW5lcmF0b3JRdWV1ZUVucXVldWVDb2RlSW50cmluc2ljID0gSlNDOjpOb0lu
dHJpbnNpYzsKY29uc3QgY2hhciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJh
dG9yUXVldWVFbnF1ZXVlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChnZW5lcmF0b3IsIGl0ZW0pXG4i
IFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgIkBhc3NlcnQoaXRl
bS5AYXN5bmNHZW5lcmF0b3JRdWV1ZUl0ZW1OZXh0ID09PSBudWxsICYmIGl0ZW0uQGFzeW5jR2Vu
ZXJhdG9yUXVldWVJdGVtUHJldmlvdXMgPT09IG51bGwpO1xuIiBcCiAgICAiaWYgKGdlbmVyYXRv
ci5AYXN5bmNHZW5lcmF0b3JRdWV1ZUZpcnN0ID09PSBudWxsKSB7XG4iIFwKICAgICIgQGFzc2Vy
dChnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yUXVldWVMYXN0ID09PSBudWxsKTtcbiIgXAogICAg
IiBnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yUXVldWVGaXJzdCA9IGl0ZW07XG4iIFwKICAgICIg
Z2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclF1ZXVlTGFzdCA9IGl0ZW07XG4iIFwKICAgICJ9IGVs
c2Uge1xuIiBcCiAgICAiIGl0ZW0uQGFzeW5jR2VuZXJhdG9yUXVldWVJdGVtUHJldmlvdXMgPSBn
ZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yUXVldWVMYXN0O1xuIiBcCiAgICAiIGdlbmVyYXRvci5A
YXN5bmNHZW5lcmF0b3JRdWV1ZUxhc3QuQGFzeW5jR2VuZXJhdG9yUXVldWVJdGVtTmV4dCA9IGl0
ZW07XG4iIFwKICAgICIgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclF1ZXVlTGFzdCA9IGl0ZW07
XG4iIFwKICAgICJ9XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JRdWV1ZURlcXVldWVD
b2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3Ry
dWN0Owpjb25zdCBpbnQgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUXVl
dWVEZXF1ZXVlQ29kZUxlbmd0aCA9IDM0MTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNf
YXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclF1ZXVlRGVxdWV1ZUNvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jR2VuZXJhdG9yUHJv
dG90eXBlQXN5bmNHZW5lcmF0b3JRdWV1ZURlcXVldWVDb2RlID0KICAgICIoZnVuY3Rpb24gKGdl
bmVyYXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAi
aWYgKGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JRdWV1ZUZpcnN0ID09PSBudWxsKVxuIiBcCiAg
ICAiIHJldHVybiBudWxsO1xuIiBcCiAgICAiY29uc3QgcmVzdWx0ID0gZ2VuZXJhdG9yLkBhc3lu
Y0dlbmVyYXRvclF1ZXVlRmlyc3Q7XG4iIFwKICAgICJnZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9y
UXVldWVGaXJzdCA9IHJlc3VsdC5AYXN5bmNHZW5lcmF0b3JRdWV1ZUl0ZW1OZXh0O1xuIiBcCiAg
ICAiaWYgKGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JRdWV1ZUZpcnN0ID09PSBudWxsKVxuIiBc
CiAgICAiIGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JRdWV1ZUxhc3QgPSBudWxsO1xuIiBcCiAg
ICAicmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvckRlcXVldWVD
b2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3Ry
dWN0Owpjb25zdCBpbnQgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yRGVx
dWV1ZUNvZGVMZW5ndGggPSAyMjk7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5j
R2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JEZXF1ZXVlQ29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3lu
Y0dlbmVyYXRvckRlcXVldWVDb2RlID0KICAgICIoZnVuY3Rpb24gKGdlbmVyYXRvcilcbiIgXAog
ICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiY29uc3QgcXVldWUgPSBn
ZW5lcmF0b3IuQGFzeW5jR2VuZXJhdG9yUXVldWU7XG4iIFwKICAgICJAYXNzZXJ0KCFAYXN5bmNH
ZW5lcmF0b3JRdWV1ZUlzRW1wdHkoZ2VuZXJhdG9yKSwgXCJBc3luYyBnZW5ldGF0b3IncyBRdWV1
ZSBpcyBhbiBlbXB0eSBMaXN0LlwiKTtcbiIgXAogICAgInJldHVybiBAYXN5bmNHZW5lcmF0b3JR
dWV1ZURlcXVldWUoZ2VuZXJhdG9yKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpD
b25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVJc0V4ZWN1dGlvblN0YXRl
Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdDsKY29uc3QgaW50IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVJc0V4ZWN1dGlvblN0YXRl
Q29kZUxlbmd0aCA9IDMwNTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNHZW5l
cmF0b3JQcm90b3R5cGVJc0V4ZWN1dGlvblN0YXRlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRy
aW5zaWM7CmNvbnN0IGNoYXIqIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVJc0V4ZWN1dGlvblN0
YXRlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChnZW5lcmF0b3IpXG4iIFwKICAgICJ7XG4iIFwKICAg
ICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiAoZ2VuZXJhdG9yLkBnZW5lcmF0b3JT
dGF0ZSA+IDAgJiYgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPT09IEBB
c3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb25Ob25lKVxuIiBcCiAgICAiIHx8IGdlbmVyYXRvci5A
Z2VuZXJhdG9yU3RhdGUgPT09IEBBc3luY0dlbmVyYXRvclN0YXRlRXhlY3V0aW5nXG4iIFwKICAg
ICIgfHwgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPT09IEBBc3luY0dl
bmVyYXRvclN1c3BlbmRSZWFzb25Bd2FpdDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlND
OjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVJc1N1c3BlbmRZaWVs
ZFN0YXRlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5v
dENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVJc1N1c3BlbmRZ
aWVsZFN0YXRlQ29kZUxlbmd0aCA9IDIzMDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNf
YXN5bmNHZW5lcmF0b3JQcm90b3R5cGVJc1N1c3BlbmRZaWVsZFN0YXRlQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVJ
c1N1c3BlbmRZaWVsZFN0YXRlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChnZW5lcmF0b3IpXG4iIFwK
ICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiAoZ2VuZXJh
dG9yLkBnZW5lcmF0b3JTdGF0ZSA+IDAgJiYgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3Bl
bmRSZWFzb24gPT09IEBBc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb25ZaWVsZClcbiIgXAogICAg
IiB8fCBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID09PSBAQXN5bmNHZW5lcmF0b3JTdGF0ZVN1
c3BlbmRlZFlpZWxkO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFi
aWxpdHkgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUmVqZWN0Q29kZUNv
bnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsK
Y29uc3QgaW50IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclJlamVjdENv
ZGVMZW5ndGggPSAzMzU7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5jR2VuZXJh
dG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JSZWplY3RDb2RlSW50cmluc2ljID0gSlNDOjpOb0lu
dHJpbnNpYzsKY29uc3QgY2hhciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJh
dG9yUmVqZWN0Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChnZW5lcmF0b3IsIGV4Y2VwdGlvbilcbiIg
XAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiQGFzc2VydCh0eXBl
b2YgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPT09IFwibnVtYmVyXCIs
IFwiR2VuZXJhdG9yIGlzIG5vdCBhbiBBc3luY0dlbmVyYXRvciBpbnN0YW5jZS5cIik7XG4iIFwK
ICAgICJjb25zdCB7IHByb21pc2VDYXBhYmlsaXR5IH0gPSBAYXN5bmNHZW5lcmF0b3JEZXF1ZXVl
KGdlbmVyYXRvcik7XG4iIFwKICAgICJwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1
bmRlZmluZWQsIGV4Y2VwdGlvbik7XG4iIFwKICAgICJyZXR1cm4gQGFzeW5jR2VuZXJhdG9yUmVz
dW1lTmV4dChnZW5lcmF0b3IpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0
cnVjdEFiaWxpdHkgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUmVzb2x2
ZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25z
dHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JS
ZXNvbHZlQ29kZUxlbmd0aCA9IDM1MTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5
bmNHZW5lcmF0b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclJlc29sdmVDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFz
eW5jR2VuZXJhdG9yUmVzb2x2ZUNvZGUgPQogICAgIihmdW5jdGlvbiAoZ2VuZXJhdG9yLCB2YWx1
ZSwgZG9uZSlcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAi
QGFzc2VydCh0eXBlb2YgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPT09
IFwibnVtYmVyXCIsIFwiR2VuZXJhdG9yIGlzIG5vdCBhbiBBc3luY0dlbmVyYXRvciBpbnN0YW5j
ZS5cIik7XG4iIFwKICAgICJjb25zdCB7IHByb21pc2VDYXBhYmlsaXR5IH0gPSBAYXN5bmNHZW5l
cmF0b3JEZXF1ZXVlKGdlbmVyYXRvcik7XG4iIFwKICAgICJwcm9taXNlQ2FwYWJpbGl0eS5AcmVz
b2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB7IGRvbmUsIHZhbHVlOiB2YWx1ZSB9KTtcbiIgXAogICAg
InJldHVybiBAYXN5bmNHZW5lcmF0b3JSZXN1bWVOZXh0KGdlbmVyYXRvcik7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jR2VuZXJhdG9yUHJv
dG90eXBlQXN5bmNHZW5lcmF0b3JZaWVsZENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9y
UHJvdG90eXBlQXN5bmNHZW5lcmF0b3JZaWVsZENvZGVMZW5ndGggPSAzOTA7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JZ
aWVsZENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5j
R2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JZaWVsZENvZGUgPQogICAgIihmdW5jdGlv
biAoZ2VuZXJhdG9yLCB2YWx1ZSwgcmVzdW1lTW9kZSlcbiIgXAogICAgIntcbiIgXAogICAgIlwi
dXNlIHN0cmljdFwiO1xuIiBcCiAgICAiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JZaWVsZEF3YWl0
ZWQocmVzdWx0KVxuIiBcCiAgICAie1xuIiBcCiAgICAiIGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0
b3JTdXNwZW5kUmVhc29uID0gQEFzeW5jR2VuZXJhdG9yU3VzcGVuZFJlYXNvbllpZWxkO1xuIiBc
CiAgICAiIEBhc3luY0dlbmVyYXRvclJlc29sdmUoZ2VuZXJhdG9yLCByZXN1bHQsIGZhbHNlKTtc
biIgXAogICAgIn1cbiIgXAogICAgImdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVh
c29uID0gQEFzeW5jR2VuZXJhdG9yU3VzcGVuZFJlYXNvbkF3YWl0O1xuIiBcCiAgICAiQGF3YWl0
VmFsdWUoZ2VuZXJhdG9yLCB2YWx1ZSwgYXN5bmNHZW5lcmF0b3JZaWVsZEF3YWl0ZWQpO1xuIiBc
CiAgICAicmV0dXJuIEB1bmRlZmluZWQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6
Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXdhaXRWYWx1ZUNvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXdhaXRWYWx1ZUNvZGVMZW5ndGgg
PSAzNTM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5jR2VuZXJhdG9yUHJvdG90
eXBlQXdhaXRWYWx1ZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXdhaXRWYWx1ZUNvZGUgPQogICAgIihmdW5jdGlv
biAoZ2VuZXJhdG9yLCB2YWx1ZSwgb25GdWxsZmlsZWQpXG4iIFwKICAgICJ7XG4iIFwKICAgICJc
InVzZSBzdHJpY3RcIjtcbiIgXAogICAgImNvbnN0IHdyYXBwZWRWYWx1ZSA9IEBuZXdQcm9taXNl
Q2FwYWJpbGl0eShAUHJvbWlzZSk7XG4iIFwKICAgICJjb25zdCBvblJlamVjdGVkID0gZnVuY3Rp
b24gKHJlc3VsdCkgeyBAZG9Bc3luY0dlbmVyYXRvckJvZHlDYWxsKGdlbmVyYXRvciwgcmVzdWx0
LCBAR2VuZXJhdG9yUmVzdW1lTW9kZVRocm93KTsgfTtcbiIgXAogICAgIndyYXBwZWRWYWx1ZS5A
cmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB2YWx1ZSk7XG4iIFwKICAgICJ3cmFwcGVkVmFsdWUu
QHByb21pc2UuQHRoZW4ob25GdWxsZmlsZWQsIG9uUmVqZWN0ZWQpO1xuIiBcCiAgICAicmV0dXJu
IHdyYXBwZWRWYWx1ZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVEb0FzeW5jR2VuZXJhdG9yQm9keUNhbGxD
b2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3Ry
dWN0Owpjb25zdCBpbnQgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZURvQXN5bmNHZW5lcmF0b3JC
b2R5Q2FsbENvZGVMZW5ndGggPSAxMzY4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19h
c3luY0dlbmVyYXRvclByb3RvdHlwZURvQXN5bmNHZW5lcmF0b3JCb2R5Q2FsbENvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jR2VuZXJhdG9yUHJvdG90
eXBlRG9Bc3luY0dlbmVyYXRvckJvZHlDYWxsQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChnZW5lcmF0
b3IsIHJlc3VtZVZhbHVlLCByZXN1bWVNb2RlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICJsZXQgdmFsdWUgPSBAdW5kZWZpbmVkO1xuIiBcCiAgICAibGV0
IHN0YXRlID0gZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZTtcbiIgXAogICAgImdlbmVyYXRvci5A
Z2VuZXJhdG9yU3RhdGUgPSBAQXN5bmNHZW5lcmF0b3JTdGF0ZUV4ZWN1dGluZztcbiIgXAogICAg
ImdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uID0gQEFzeW5jR2VuZXJhdG9y
U3VzcGVuZFJlYXNvbk5vbmU7XG4iIFwKICAgICJ0cnkge1xuIiBcCiAgICAiIHZhbHVlID0gZ2Vu
ZXJhdG9yLkBnZW5lcmF0b3JOZXh0LkBjYWxsKGdlbmVyYXRvci5AZ2VuZXJhdG9yVGhpcywgZ2Vu
ZXJhdG9yLCBzdGF0ZSwgcmVzdW1lVmFsdWUsIHJlc3VtZU1vZGUsIGdlbmVyYXRvci5AZ2VuZXJh
dG9yRnJhbWUpO1xuIiBcCiAgICAiIGlmIChnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID09PSBA
QXN5bmNHZW5lcmF0b3JTdGF0ZUV4ZWN1dGluZylcbiIgXAogICAgIiAgZ2VuZXJhdG9yLkBnZW5l
cmF0b3JTdGF0ZSA9IEBBc3luY0dlbmVyYXRvclN0YXRlQ29tcGxldGVkO1xuIiBcCiAgICAifSBj
YXRjaCAoZXJyb3IpIHtcbiIgXAogICAgIiBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID0gQEFz
eW5jR2VuZXJhdG9yU3RhdGVDb21wbGV0ZWQ7XG4iIFwKICAgICIgZ2VuZXJhdG9yLkBhc3luY0dl
bmVyYXRvclN1c3BlbmRSZWFzb24gPSBAQXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uTm9uZTtc
biIgXAogICAgIiByZXR1cm4gQGFzeW5jR2VuZXJhdG9yUmVqZWN0KGdlbmVyYXRvciwgZXJyb3Ip
O1xuIiBcCiAgICAifVxuIiBcCiAgICAiaWYgKGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JTdXNw
ZW5kUmVhc29uID09PSBAQXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uQXdhaXQpIHtcbiIgXAog
ICAgIiBjb25zdCBvbkZ1bGZpbGxlZCA9IGZ1bmN0aW9uKHJlc3VsdCkgeyBAZG9Bc3luY0dlbmVy
YXRvckJvZHlDYWxsKGdlbmVyYXRvciwgcmVzdWx0LCBAR2VuZXJhdG9yUmVzdW1lTW9kZU5vcm1h
bCk7IH07XG4iIFwKICAgICIgQGF3YWl0VmFsdWUoZ2VuZXJhdG9yLCB2YWx1ZSwgb25GdWxmaWxs
ZWQpO1xuIiBcCiAgICAiIHJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAifVxuIiBcCiAgICAi
aWYgKGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uID09PSBAQXN5bmNHZW5l
cmF0b3JTdXNwZW5kUmVhc29uWWllbGQpXG4iIFwKICAgICIgcmV0dXJuIEBhc3luY0dlbmVyYXRv
cllpZWxkKGdlbmVyYXRvciwgdmFsdWUsIHJlc3VtZU1vZGUpO1xuIiBcCiAgICAiaWYgKGdlbmVy
YXRvci5AZ2VuZXJhdG9yU3RhdGUgPT09IEBBc3luY0dlbmVyYXRvclN0YXRlQ29tcGxldGVkKSB7
XG4iIFwKICAgICIgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb24gPSBAQXN5
bmNHZW5lcmF0b3JTdXNwZW5kUmVhc29uTm9uZTtcbiIgXAogICAgIiByZXR1cm4gQGFzeW5jR2Vu
ZXJhdG9yUmVzb2x2ZShnZW5lcmF0b3IsIHZhbHVlLCB0cnVlKTtcbiIgXAogICAgIn1cbiIgXAog
ICAgInJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNv
bnN0cnVjdEFiaWxpdHkgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yUmVz
dW1lTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5l
cmF0b3JSZXN1bWVOZXh0Q29kZUxlbmd0aCA9IDE4ODA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJp
bnNpYyBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JSZXN1bWVOZXh0Q29k
ZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfYXN5bmNHZW5lcmF0
b3JQcm90b3R5cGVBc3luY0dlbmVyYXRvclJlc3VtZU5leHRDb2RlID0KICAgICIoZnVuY3Rpb24g
KGdlbmVyYXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAg
ICAiQGFzc2VydCh0eXBlb2YgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1c3BlbmRSZWFzb24g
PT09IFwibnVtYmVyXCIsIFwiR2VuZXJhdG9yIGlzIG5vdCBhbiBBc3luY0dlbmVyYXRvciBpbnN0
YW5jZS5cIik7XG4iIFwKICAgICJsZXQgc3RhdGUgPSBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRl
O1xuIiBcCiAgICAiQGFzc2VydChzdGF0ZSAhPT0gQEFzeW5jR2VuZXJhdG9yU3RhdGVFeGVjdXRp
bmcsIFwiQXN5bmMgZ2VuZXJhdG9yIHNob3VsZCBub3QgYmUgaW4gZXhlY3V0aW5nIHN0YXRlXCIp
O1xuIiBcCiAgICAiaWYgKHN0YXRlID09PSBAQXN5bmNHZW5lcmF0b3JTdGF0ZUF3YWl0aW5nUmV0
dXJuKVxuIiBcCiAgICAiIHJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAiaWYgKEBhc3luY0dl
bmVyYXRvclF1ZXVlSXNFbXB0eShnZW5lcmF0b3IpKVxuIiBcCiAgICAiIHJldHVybiBAdW5kZWZp
bmVkO1xuIiBcCiAgICAiY29uc3QgbmV4dCA9IGdlbmVyYXRvci5AYXN5bmNHZW5lcmF0b3JRdWV1
ZUZpcnN0O1xuIiBcCiAgICAiaWYgKG5leHQucmVzdW1lTW9kZSAhPT0gQEdlbmVyYXRvclJlc3Vt
ZU1vZGVOb3JtYWwpIHtcbiIgXAogICAgIiBpZiAoc3RhdGUgPT09IEBBc3luY0dlbmVyYXRvclN0
YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiIgXAogICAgIiAgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0
ZSA9IEBBc3luY0dlbmVyYXRvclN0YXRlQ29tcGxldGVkO1xuIiBcCiAgICAiICBzdGF0ZSA9IEBB
c3luY0dlbmVyYXRvclN0YXRlQ29tcGxldGVkO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIiBpZiAo
c3RhdGUgPT09IEBBc3luY0dlbmVyYXRvclN0YXRlQ29tcGxldGVkKSB7XG4iIFwKICAgICIgIGlm
IChuZXh0LnJlc3VtZU1vZGUgPT09IEBHZW5lcmF0b3JSZXN1bWVNb2RlUmV0dXJuKSB7XG4iIFwK
ICAgICIgICBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID0gQEFzeW5jR2VuZXJhdG9yU3RhdGVB
d2FpdGluZ1JldHVybjtcbiIgXAogICAgIiAgIGNvbnN0IHByb21pc2VDYXBhYmlsaXR5ID0gQG5l
d1Byb21pc2VDYXBhYmlsaXR5KEBQcm9taXNlKTtcbiIgXAogICAgIiAgIHByb21pc2VDYXBhYmls
aXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIG5leHQudmFsdWUpO1xuIiBcCiAgICAiICAg
Y29uc3QgdGhyb3dhd2F5Q2FwYWJpbGl0eVByb21pc2UgPSBwcm9taXNlQ2FwYWJpbGl0eS5AcHJv
bWlzZS5AdGhlbihcbiIgXAogICAgIiAgICBmdW5jdGlvbiAocmVzdWx0KSB7IGdlbmVyYXRvci5A
Z2VuZXJhdG9yU3RhdGUgPSBAQXN5bmNHZW5lcmF0b3JTdGF0ZUNvbXBsZXRlZDsgQGFzeW5jR2Vu
ZXJhdG9yUmVzb2x2ZShnZW5lcmF0b3IsIHJlc3VsdCwgdHJ1ZSk7IH0sXG4iIFwKICAgICIgICAg
ZnVuY3Rpb24gKGVycm9yKSB7IGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPSBAQXN5bmNHZW5l
cmF0b3JTdGF0ZUNvbXBsZXRlZDsgQGFzeW5jR2VuZXJhdG9yUmVqZWN0KGdlbmVyYXRvciwgZXJy
b3IpOyB9KTtcbiIgXAogICAgIiAgIHRocm93YXdheUNhcGFiaWxpdHlQcm9taXNlLkBwcm9taXNl
SXNIYW5kbGVkID0gdHJ1ZTtcbiIgXAogICAgIiAgIHJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAg
ICAiICB9XG4iIFwKICAgICIgIEBhc3NlcnQobmV4dC5yZXN1bWVNb2RlID09PSBAR2VuZXJhdG9y
UmVzdW1lTW9kZVRocm93LCBcIkFzeW5jIGdlbmVyYXRvciBoYXMgd3JvbmcgbW9kZVwiKTtcbiIg
XAogICAgIiAgcmV0dXJuIEBhc3luY0dlbmVyYXRvclJlamVjdChnZW5lcmF0b3IsIG5leHQudmFs
dWUpOztcbiIgXAogICAgIiB9XG4iIFwKICAgICJ9IGVsc2UgaWYgKHN0YXRlID09PSBAQXN5bmNH
ZW5lcmF0b3JTdGF0ZUNvbXBsZXRlZClcbiIgXAogICAgIiByZXR1cm4gQGFzeW5jR2VuZXJhdG9y
UmVzb2x2ZShnZW5lcmF0b3IsIEB1bmRlZmluZWQsIHRydWUpO1xuIiBcCiAgICAiQGFzc2VydChz
dGF0ZSA9PT0gQEFzeW5jR2VuZXJhdG9yU3RhdGVTdXNwZW5kZWRTdGFydCB8fCBAaXNTdXNwZW5k
WWllbGRTdGF0ZShnZW5lcmF0b3IpLCBcIkFzeW5jIGdlbmVyYXRvciBoYXMgd3Jvbmcgc3RhdGVc
Iik7XG4iIFwKICAgICJAZG9Bc3luY0dlbmVyYXRvckJvZHlDYWxsKGdlbmVyYXRvciwgbmV4dC52
YWx1ZSwgbmV4dC5yZXN1bWVNb2RlKTtcbiIgXAogICAgInJldHVybiBAdW5kZWZpbmVkO1xuIiBc
CiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hc3luY0dlbmVy
YXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yRW5xdWV1ZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0g
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5j
R2VuZXJhdG9yUHJvdG90eXBlQXN5bmNHZW5lcmF0b3JFbnF1ZXVlQ29kZUxlbmd0aCA9IDYxNDsK
c3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVBc3lu
Y0dlbmVyYXRvckVucXVldWVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3Qg
Y2hhciogc19hc3luY0dlbmVyYXRvclByb3RvdHlwZUFzeW5jR2VuZXJhdG9yRW5xdWV1ZUNvZGUg
PQogICAgIihmdW5jdGlvbiAoZ2VuZXJhdG9yLCB2YWx1ZSwgcmVzdW1lTW9kZSlcbiIgXAogICAg
IntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiY29uc3QgcHJvbWlzZUNhcGFi
aWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQFByb21pc2UpO1xuIiBcCiAgICAiaWYgKCFA
aXNPYmplY3QoZ2VuZXJhdG9yKSB8fCB0eXBlb2YgZ2VuZXJhdG9yLkBhc3luY0dlbmVyYXRvclN1
c3BlbmRSZWFzb24gIT09ICdudW1iZXInKSB7XG4iIFwKICAgICIgcHJvbWlzZUNhcGFiaWxpdHku
QHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBuZXcgQFR5cGVFcnJvcignfHRoaXN8IHNob3VsZCBi
ZSBhbiBhc3luYyBnZW5lcmF0b3InKSk7XG4iIFwKICAgICIgcmV0dXJuIHByb21pc2VDYXBhYmls
aXR5LkBwcm9taXNlO1xuIiBcCiAgICAifVxuIiBcCiAgICAiQGFzeW5jR2VuZXJhdG9yUXVldWVF
bnF1ZXVlKGdlbmVyYXRvciwge3Jlc3VtZU1vZGUsIHZhbHVlLCBwcm9taXNlQ2FwYWJpbGl0eSwg
QGFzeW5jR2VuZXJhdG9yUXVldWVJdGVtTmV4dDogbnVsbCwgQGFzeW5jR2VuZXJhdG9yUXVldWVJ
dGVtUHJldmlvdXM6IG51bGx9KTtcbiIgXAogICAgImlmICghQGlzRXhlY3V0aW9uU3RhdGUoZ2Vu
ZXJhdG9yKSlcbiIgXAogICAgIiBAYXN5bmNHZW5lcmF0b3JSZXN1bWVOZXh0KGdlbmVyYXRvcik7
XG4iIFwKICAgICJyZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2FzeW5jR2VuZXJhdG9yUHJv
dG90eXBlTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlTmV4dENv
ZGVMZW5ndGggPSAxMDk7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2FzeW5jR2VuZXJh
dG9yUHJvdG90eXBlTmV4dENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlTmV4dENvZGUgPQogICAgIihmdW5jdGlvbiAo
dmFsdWUpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJl
dHVybiBAYXN5bmNHZW5lcmF0b3JFbnF1ZXVlKHRoaXMsIHZhbHVlLCBAR2VuZXJhdG9yUmVzdW1l
TW9kZU5vcm1hbCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlUmV0dXJuQ29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfYXN5
bmNHZW5lcmF0b3JQcm90b3R5cGVSZXR1cm5Db2RlTGVuZ3RoID0gMTA5OwpzdGF0aWMgY29uc3Qg
SlNDOjpJbnRyaW5zaWMgc19hc3luY0dlbmVyYXRvclByb3RvdHlwZVJldHVybkNvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jR2VuZXJhdG9yUHJvdG90
eXBlUmV0dXJuQ29kZSA9CiAgICAiKGZ1bmN0aW9uICh2YWx1ZSlcbiIgXAogICAgIntcbiIgXAog
ICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAicmV0dXJuIEBhc3luY0dlbmVyYXRvckVucXVl
dWUodGhpcywgdmFsdWUsIEBHZW5lcmF0b3JSZXN1bWVNb2RlUmV0dXJuKTtcbiIgXAogICAgIn0p
XG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfYXN5bmNHZW5lcmF0b3JQcm90
b3R5cGVUaHJvd0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBlVGhyb3dD
b2RlTGVuZ3RoID0gMTE2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19hc3luY0dlbmVy
YXRvclByb3RvdHlwZVRocm93Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0
IGNoYXIqIHNfYXN5bmNHZW5lcmF0b3JQcm90b3R5cGVUaHJvd0NvZGUgPQogICAgIihmdW5jdGlv
biAoZXhjZXB0aW9uKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICJyZXR1cm4gQGFzeW5jR2VuZXJhdG9yRW5xdWV1ZSh0aGlzLCBleGNlcHRpb24sIEBHZW5l
cmF0b3JSZXN1bWVNb2RlVGhyb3cpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNv
bnN0cnVjdEFiaWxpdHkgc19hc3luY0l0ZXJhdG9yUHJvdG90eXBlU3ltYm9sQXN5bmNJdGVyYXRv
ckdldHRlckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2FzeW5jSXRlcmF0b3JQcm90b3R5cGVTeW1ib2xBc3lu
Y0l0ZXJhdG9yR2V0dGVyQ29kZUxlbmd0aCA9IDQ1OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5z
aWMgc19hc3luY0l0ZXJhdG9yUHJvdG90eXBlU3ltYm9sQXN5bmNJdGVyYXRvckdldHRlckNvZGVJ
bnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2FzeW5jSXRlcmF0b3JQ
cm90b3R5cGVTeW1ib2xBc3luY0l0ZXJhdG9yR2V0dGVyQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgp
XG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiB0
aGlzO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19k
YXRlUHJvdG90eXBlVG9Mb2NhbGVTdHJpbmdDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19kYXRlUHJvdG90eXBl
VG9Mb2NhbGVTdHJpbmdDb2RlTGVuZ3RoID0gMTAxNjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmlu
c2ljIHNfZGF0ZVByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfZGF0ZVByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZSA9
CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgImZ1bmN0aW9uIHRvRGF0ZVRpbWVPcHRpb25zQW55QWxsKG9wdHMpXG4iIFwKICAg
ICJ7XG4iIFwKICAgICIgdmFyIG9wdGlvbnM7XG4iIFwKICAgICIgaWYgKG9wdHMgPT09IEB1bmRl
ZmluZWQpXG4iIFwKICAgICIgIG9wdGlvbnMgPSBudWxsO1xuIiBcCiAgICAiIGVsc2UgaWYgKG9w
dHMgPT09IG51bGwpXG4iIFwKICAgICIgIEB0aHJvd1R5cGVFcnJvcihcIm51bGwgaXMgbm90IGFu
IG9iamVjdFwiKTtcbiIgXAogICAgIiBlbHNlXG4iIFwKICAgICIgIG9wdGlvbnMgPSBAdG9PYmpl
Y3Qob3B0cyk7XG4iIFwKICAgICIgdmFyIG5lZWRzRGVmYXVsdHMgPSAhb3B0aW9ucyB8fCAoXG4i
IFwKICAgICIgIG9wdGlvbnMud2Vla2RheSA9PT0gQHVuZGVmaW5lZCAmJlxuIiBcCiAgICAiICBv
cHRpb25zLnllYXIgPT09IEB1bmRlZmluZWQgJiZcbiIgXAogICAgIiAgb3B0aW9ucy5tb250aCA9
PT0gQHVuZGVmaW5lZCAmJlxuIiBcCiAgICAiICBvcHRpb25zLmRheSA9PT0gQHVuZGVmaW5lZCAm
JlxuIiBcCiAgICAiICBvcHRpb25zLmhvdXIgPT09IEB1bmRlZmluZWQgJiZcbiIgXAogICAgIiAg
b3B0aW9ucy5taW51dGUgPT09IEB1bmRlZmluZWQgJiZcbiIgXAogICAgIiAgb3B0aW9ucy5zZWNv
bmQgPT09IEB1bmRlZmluZWRcbiIgXAogICAgIiApO1xuIiBcCiAgICAiIGlmIChuZWVkc0RlZmF1
bHRzKSB7XG4iIFwKICAgICIgIG9wdGlvbnMgPSBAT2JqZWN0LkBjcmVhdGUob3B0aW9ucyk7XG4i
IFwKICAgICIgIG9wdGlvbnMueWVhciA9IFwibnVtZXJpY1wiO1xuIiBcCiAgICAiICBvcHRpb25z
Lm1vbnRoID0gXCJudW1lcmljXCI7XG4iIFwKICAgICIgIG9wdGlvbnMuZGF5ID0gXCJudW1lcmlj
XCI7XG4iIFwKICAgICIgIG9wdGlvbnMuaG91ciA9IFwibnVtZXJpY1wiO1xuIiBcCiAgICAiICBv
cHRpb25zLm1pbnV0ZSA9IFwibnVtZXJpY1wiO1xuIiBcCiAgICAiICBvcHRpb25zLnNlY29uZCA9
IFwibnVtZXJpY1wiO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIiByZXR1cm4gb3B0aW9ucztcbiIg
XAogICAgIn1cbiIgXAogICAgInZhciB2YWx1ZSA9IEB0aGlzVGltZVZhbHVlLkBjYWxsKHRoaXMp
O1xuIiBcCiAgICAiaWYgKEBpc05hTih2YWx1ZSkpXG4iIFwKICAgICIgcmV0dXJuIFwiSW52YWxp
ZCBEYXRlXCI7XG4iIFwKICAgICJ2YXIgb3B0aW9ucyA9IHRvRGF0ZVRpbWVPcHRpb25zQW55QWxs
KEBhcmd1bWVudCgxKSk7XG4iIFwKICAgICJ2YXIgbG9jYWxlcyA9IEBhcmd1bWVudCgwKTtcbiIg
XAogICAgInZhciBkYXRlRm9ybWF0ID0gbmV3IEBEYXRlVGltZUZvcm1hdChsb2NhbGVzLCBvcHRp
b25zKTtcbiIgXAogICAgInJldHVybiBkYXRlRm9ybWF0LmZvcm1hdCh2YWx1ZSk7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2RhdGVQcm90b3R5cGVU
b0xvY2FsZURhdGVTdHJpbmdDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19kYXRlUHJvdG90eXBlVG9Mb2NhbGVE
YXRlU3RyaW5nQ29kZUxlbmd0aCA9IDgyOTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNf
ZGF0ZVByb3RvdHlwZVRvTG9jYWxlRGF0ZVN0cmluZ0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50
cmluc2ljOwpjb25zdCBjaGFyKiBzX2RhdGVQcm90b3R5cGVUb0xvY2FsZURhdGVTdHJpbmdDb2Rl
ID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwi
O1xuIiBcCiAgICAiZnVuY3Rpb24gdG9EYXRlVGltZU9wdGlvbnNEYXRlRGF0ZShvcHRzKVxuIiBc
CiAgICAie1xuIiBcCiAgICAiIHZhciBvcHRpb25zO1xuIiBcCiAgICAiIGlmIChvcHRzID09PSBA
dW5kZWZpbmVkKVxuIiBcCiAgICAiICBvcHRpb25zID0gbnVsbDtcbiIgXAogICAgIiBlbHNlIGlm
IChvcHRzID09PSBudWxsKVxuIiBcCiAgICAiICBAdGhyb3dUeXBlRXJyb3IoXCJudWxsIGlzIG5v
dCBhbiBvYmplY3RcIik7XG4iIFwKICAgICIgZWxzZVxuIiBcCiAgICAiICBvcHRpb25zID0gQHRv
T2JqZWN0KG9wdHMpO1xuIiBcCiAgICAiIHZhciBuZWVkc0RlZmF1bHRzID0gIW9wdGlvbnMgfHwg
KFxuIiBcCiAgICAiICBvcHRpb25zLndlZWtkYXkgPT09IEB1bmRlZmluZWQgJiZcbiIgXAogICAg
IiAgb3B0aW9ucy55ZWFyID09PSBAdW5kZWZpbmVkICYmXG4iIFwKICAgICIgIG9wdGlvbnMubW9u
dGggPT09IEB1bmRlZmluZWQgJiZcbiIgXAogICAgIiAgb3B0aW9ucy5kYXkgPT09IEB1bmRlZmlu
ZWRcbiIgXAogICAgIiApO1xuIiBcCiAgICAiIGlmIChuZWVkc0RlZmF1bHRzKSB7XG4iIFwKICAg
ICIgIG9wdGlvbnMgPSBAT2JqZWN0LkBjcmVhdGUob3B0aW9ucyk7XG4iIFwKICAgICIgIG9wdGlv
bnMueWVhciA9IFwibnVtZXJpY1wiO1xuIiBcCiAgICAiICBvcHRpb25zLm1vbnRoID0gXCJudW1l
cmljXCI7XG4iIFwKICAgICIgIG9wdGlvbnMuZGF5ID0gXCJudW1lcmljXCI7XG4iIFwKICAgICIg
fVxuIiBcCiAgICAiIHJldHVybiBvcHRpb25zO1xuIiBcCiAgICAifVxuIiBcCiAgICAidmFyIHZh
bHVlID0gQHRoaXNUaW1lVmFsdWUuQGNhbGwodGhpcyk7XG4iIFwKICAgICJpZiAoQGlzTmFOKHZh
bHVlKSlcbiIgXAogICAgIiByZXR1cm4gXCJJbnZhbGlkIERhdGVcIjtcbiIgXAogICAgInZhciBv
cHRpb25zID0gdG9EYXRlVGltZU9wdGlvbnNEYXRlRGF0ZShAYXJndW1lbnQoMSkpO1xuIiBcCiAg
ICAidmFyIGxvY2FsZXMgPSBAYXJndW1lbnQoMCk7XG4iIFwKICAgICJ2YXIgZGF0ZUZvcm1hdCA9
IG5ldyBARGF0ZVRpbWVGb3JtYXQobG9jYWxlcywgb3B0aW9ucyk7XG4iIFwKICAgICJyZXR1cm4g
ZGF0ZUZvcm1hdC5mb3JtYXQodmFsdWUpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6
OkNvbnN0cnVjdEFiaWxpdHkgc19kYXRlUHJvdG90eXBlVG9Mb2NhbGVUaW1lU3RyaW5nQ29kZUNv
bnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsK
Y29uc3QgaW50IHNfZGF0ZVByb3RvdHlwZVRvTG9jYWxlVGltZVN0cmluZ0NvZGVMZW5ndGggPSA4
MDE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2RhdGVQcm90b3R5cGVUb0xvY2FsZVRp
bWVTdHJpbmdDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19k
YXRlUHJvdG90eXBlVG9Mb2NhbGVUaW1lU3RyaW5nQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4i
IFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImZ1bmN0aW9uIHRv
RGF0ZVRpbWVPcHRpb25zVGltZVRpbWUob3B0cylcbiIgXAogICAgIntcbiIgXAogICAgIiB2YXIg
b3B0aW9ucztcbiIgXAogICAgIiBpZiAob3B0cyA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAgIiAg
b3B0aW9ucyA9IG51bGw7XG4iIFwKICAgICIgZWxzZSBpZiAob3B0cyA9PT0gbnVsbClcbiIgXAog
ICAgIiAgQHRocm93VHlwZUVycm9yKFwibnVsbCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuIiBcCiAg
ICAiIGVsc2VcbiIgXAogICAgIiAgb3B0aW9ucyA9IEB0b09iamVjdChvcHRzKTtcbiIgXAogICAg
IiB2YXIgbmVlZHNEZWZhdWx0cyA9ICFvcHRpb25zIHx8IChcbiIgXAogICAgIiAgb3B0aW9ucy5o
b3VyID09PSBAdW5kZWZpbmVkICYmXG4iIFwKICAgICIgIG9wdGlvbnMubWludXRlID09PSBAdW5k
ZWZpbmVkICYmXG4iIFwKICAgICIgIG9wdGlvbnMuc2Vjb25kID09PSBAdW5kZWZpbmVkXG4iIFwK
ICAgICIgKTtcbiIgXAogICAgIiBpZiAobmVlZHNEZWZhdWx0cykge1xuIiBcCiAgICAiICBvcHRp
b25zID0gQE9iamVjdC5AY3JlYXRlKG9wdGlvbnMpO1xuIiBcCiAgICAiICBvcHRpb25zLmhvdXIg
PSBcIm51bWVyaWNcIjtcbiIgXAogICAgIiAgb3B0aW9ucy5taW51dGUgPSBcIm51bWVyaWNcIjtc
biIgXAogICAgIiAgb3B0aW9ucy5zZWNvbmQgPSBcIm51bWVyaWNcIjtcbiIgXAogICAgIiB9XG4i
IFwKICAgICIgcmV0dXJuIG9wdGlvbnM7XG4iIFwKICAgICJ9XG4iIFwKICAgICJ2YXIgdmFsdWUg
PSBAdGhpc1RpbWVWYWx1ZS5AY2FsbCh0aGlzKTtcbiIgXAogICAgImlmIChAaXNOYU4odmFsdWUp
KVxuIiBcCiAgICAiIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xuIiBcCiAgICAidmFyIG9wdGlv
bnMgPSB0b0RhdGVUaW1lT3B0aW9uc1RpbWVUaW1lKEBhcmd1bWVudCgxKSk7XG4iIFwKICAgICJ2
YXIgbG9jYWxlcyA9IEBhcmd1bWVudCgwKTtcbiIgXAogICAgInZhciBkYXRlRm9ybWF0ID0gbmV3
IEBEYXRlVGltZUZvcm1hdChsb2NhbGVzLCBvcHRpb25zKTtcbiIgXAogICAgInJldHVybiBkYXRl
Rm9ybWF0LmZvcm1hdCh2YWx1ZSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX2Z1bmN0aW9uUHJvdG90eXBlQ2FsbENvZGVDb25zdHJ1Y3RBYmlsaXR5
ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2Z1
bmN0aW9uUHJvdG90eXBlQ2FsbENvZGVMZW5ndGggPSAyMTU7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX2Z1bmN0aW9uUHJvdG90eXBlQ2FsbENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50
cmluc2ljOwpjb25zdCBjaGFyKiBzX2Z1bmN0aW9uUHJvdG90eXBlQ2FsbENvZGUgPQogICAgIihm
dW5jdGlvbiAodGhpc0FyZ3VtZW50KVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0
XCI7XG4iIFwKICAgICJsZXQgYXJndW1lbnRWYWx1ZXMgPSBbXTtcbiIgXAogICAgImZvciAobGV0
IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuIiBcCiAgICAiIEBwdXRCeVZhbERp
cmVjdChhcmd1bWVudFZhbHVlcywgaS0xLCBhcmd1bWVudHNbaV0pO1xuIiBcCiAgICAicmV0dXJu
IHRoaXMuQGFwcGx5KHRoaXNBcmd1bWVudCwgYXJndW1lbnRWYWx1ZXMpO1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19mdW5jdGlvblByb3RvdHlwZUFw
cGx5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENv
bnN0cnVjdDsKY29uc3QgaW50IHNfZnVuY3Rpb25Qcm90b3R5cGVBcHBseUNvZGVMZW5ndGggPSAx
MDQ7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2Z1bmN0aW9uUHJvdG90eXBlQXBwbHlD
b2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19mdW5jdGlvblBy
b3RvdHlwZUFwcGx5Q29kZSA9CiAgICAiKGZ1bmN0aW9uICh0aGlzVmFsdWUsIGFyZ3VtZW50VmFs
dWVzKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJyZXR1
cm4gdGhpcy5AYXBwbHkodGhpc1ZhbHVlLCBhcmd1bWVudFZhbHVlcyk7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2Z1bmN0aW9uUHJvdG90eXBlU3lt
Ym9sSGFzSW5zdGFuY2VDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19mdW5jdGlvblByb3RvdHlwZVN5bWJvbEhh
c0luc3RhbmNlQ29kZUxlbmd0aCA9IDIyNDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNf
ZnVuY3Rpb25Qcm90b3R5cGVTeW1ib2xIYXNJbnN0YW5jZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2Z1bmN0aW9uUHJvdG90eXBlU3ltYm9sSGFzSW5zdGFu
Y2VDb2RlID0KICAgICIoZnVuY3Rpb24gKHZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAodHlwZW9mIHRoaXMgIT09IFwiZnVuY3Rpb25cIilc
biIgXAogICAgIiByZXR1cm4gZmFsc2U7XG4iIFwKICAgICJpZiAoQGlzQm91bmRGdW5jdGlvbih0
aGlzKSlcbiIgXAogICAgIiByZXR1cm4gQGhhc0luc3RhbmNlQm91bmRGdW5jdGlvbih0aGlzLCB2
YWx1ZSk7XG4iIFwKICAgICJsZXQgdGFyZ2V0ID0gdGhpcy5wcm90b3R5cGU7XG4iIFwKICAgICJy
ZXR1cm4gQGluc3RhbmNlT2YodmFsdWUsIHRhcmdldCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2Z1bmN0aW9uUHJvdG90eXBlQmluZENvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX2Z1bmN0aW9uUHJvdG90eXBlQmluZENvZGVMZW5ndGggPSA4MzE7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX2Z1bmN0aW9uUHJvdG90eXBlQmluZENvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2Z1bmN0aW9uUHJvdG90eXBlQmluZENv
ZGUgPQogICAgIihmdW5jdGlvbiAodGhpc1ZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJsZXQgdGFyZ2V0ID0gdGhpcztcbiIgXAogICAgImlmICh0
eXBlb2YgdGFyZ2V0ICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9y
KFwifHRoaXN8IGlzIG5vdCBhIGZ1bmN0aW9uIGluc2lkZSBGdW5jdGlvbi5wcm90b3R5cGUuYmlu
ZFwiKTtcbiIgXAogICAgImxldCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiIg
XAogICAgImxldCBib3VuZEFyZ3MgPSBudWxsO1xuIiBcCiAgICAibGV0IG51bUJvdW5kQXJncyA9
IDA7XG4iIFwKICAgICJpZiAoYXJndW1lbnRDb3VudCA+IDEpIHtcbiIgXAogICAgIiBudW1Cb3Vu
ZEFyZ3MgPSBhcmd1bWVudENvdW50IC0gMTtcbiIgXAogICAgIiBib3VuZEFyZ3MgPSBAbmV3QXJy
YXlXaXRoU2l6ZShudW1Cb3VuZEFyZ3MpO1xuIiBcCiAgICAiIGZvciAobGV0IGkgPSAwOyBpIDwg
bnVtQm91bmRBcmdzOyBpKyspXG4iIFwKICAgICIgIEBwdXRCeVZhbERpcmVjdChib3VuZEFyZ3Ms
IGksIGFyZ3VtZW50c1tpICsgMV0pO1xuIiBcCiAgICAifVxuIiBcCiAgICAibGV0IGxlbmd0aCA9
IDA7XG4iIFwKICAgICJpZiAoQGhhc093bkxlbmd0aFByb3BlcnR5KHRhcmdldCkpIHtcbiIgXAog
ICAgIiBsZXQgbGVuZ3RoVmFsdWUgPSB0YXJnZXQubGVuZ3RoO1xuIiBcCiAgICAiIGlmICh0eXBl
b2YgbGVuZ3RoVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiIgXAogICAgIiAgbGVuZ3RoVmFsdWUg
PSBsZW5ndGhWYWx1ZSB8IDA7XG4iIFwKICAgICIgIGlmIChsZW5ndGhWYWx1ZSA+IG51bUJvdW5k
QXJncylcbiIgXAogICAgIiAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlIC0gbnVtQm91bmRBcmdzO1xu
IiBcCiAgICAiIH1cbiIgXAogICAgIn1cbiIgXAogICAgImxldCBuYW1lID0gdGFyZ2V0Lm5hbWU7
XG4iIFwKICAgICJpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpXG4iIFwKICAgICIgbmFt
ZSA9IFwiXCI7XG4iIFwKICAgICJyZXR1cm4gQG1ha2VCb3VuZEZ1bmN0aW9uKHRhcmdldCwgYXJn
dW1lbnRzWzBdLCBib3VuZEFyZ3MsIGxlbmd0aCwgbmFtZSk7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2dlbmVyYXRvclByb3RvdHlwZUdlbmVyYXRv
clJlc3VtZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2dlbmVyYXRvclByb3RvdHlwZUdlbmVyYXRvclJlc3Vt
ZUNvZGVMZW5ndGggPSA2MDE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2dlbmVyYXRv
clByb3RvdHlwZUdlbmVyYXRvclJlc3VtZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2lj
Owpjb25zdCBjaGFyKiBzX2dlbmVyYXRvclByb3RvdHlwZUdlbmVyYXRvclJlc3VtZUNvZGUgPQog
ICAgIihmdW5jdGlvbiAoZ2VuZXJhdG9yLCBzdGF0ZSwgZ2VuZXJhdG9yVGhpcywgc2VudFZhbHVl
LCB2YWx1ZSwgcmVzdW1lTW9kZSlcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwi
O1xuIiBcCiAgICAidmFyIGRvbmUgPSBzdGF0ZSA9PT0gQEdlbmVyYXRvclN0YXRlQ29tcGxldGVk
O1xuIiBcCiAgICAiaWYgKCFkb25lKSB7XG4iIFwKICAgICIgdHJ5IHtcbiIgXAogICAgIiAgZ2Vu
ZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9IEBHZW5lcmF0b3JTdGF0ZUV4ZWN1dGluZztcbiIgXAog
ICAgIiAgdmFsdWUgPSBnZW5lcmF0b3IuQGdlbmVyYXRvck5leHQuQGNhbGwoZ2VuZXJhdG9yVGhp
cywgZ2VuZXJhdG9yLCBzdGF0ZSwgc2VudFZhbHVlLCByZXN1bWVNb2RlLCBnZW5lcmF0b3IuQGdl
bmVyYXRvckZyYW1lKTtcbiIgXAogICAgIiAgaWYgKGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUg
PT09IEBHZW5lcmF0b3JTdGF0ZUV4ZWN1dGluZykge1xuIiBcCiAgICAiICAgZ2VuZXJhdG9yLkBn
ZW5lcmF0b3JTdGF0ZSA9IEBHZW5lcmF0b3JTdGF0ZUNvbXBsZXRlZDtcbiIgXAogICAgIiAgIGRv
bmUgPSB0cnVlO1xuIiBcCiAgICAiICB9XG4iIFwKICAgICIgfSBjYXRjaCAoZXJyb3IpIHtcbiIg
XAogICAgIiAgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9IEBHZW5lcmF0b3JTdGF0ZUNvbXBs
ZXRlZDtcbiIgXAogICAgIiAgdGhyb3cgZXJyb3I7XG4iIFwKICAgICIgfVxuIiBcCiAgICAifVxu
IiBcCiAgICAicmV0dXJuIHsgZG9uZSwgdmFsdWUgfTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29u
c3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfZ2VuZXJhdG9yUHJvdG90eXBlTmV4dENvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX2dlbmVyYXRvclByb3RvdHlwZU5leHRDb2RlTGVuZ3RoID0gMzQyOwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc19nZW5lcmF0b3JQcm90b3R5cGVOZXh0Q29kZUludHJpbnNp
YyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfZ2VuZXJhdG9yUHJvdG90eXBlTmV4
dENvZGUgPQogICAgIihmdW5jdGlvbiAodmFsdWUpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVz
ZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBzdGF0ZSA9IHRoaXMuQGdlbmVyYXRvclN0YXRlO1xu
IiBcCiAgICAiaWYgKHR5cGVvZiBzdGF0ZSAhPT0gXCJudW1iZXJcIilcbiIgXAogICAgIiBAdGhy
b3dUeXBlRXJyb3IoXCJ8dGhpc3wgc2hvdWxkIGJlIGEgZ2VuZXJhdG9yXCIpO1xuIiBcCiAgICAi
aWYgKHN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVFeGVjdXRpbmcpXG4iIFwKICAgICIgQHRocm93
VHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGV4ZWN1dGluZ1wiKTtcbiIgXAogICAgInJldHVybiBA
Z2VuZXJhdG9yUmVzdW1lKHRoaXMsIHN0YXRlLCB0aGlzLkBnZW5lcmF0b3JUaGlzLCB2YWx1ZSwg
QHVuZGVmaW5lZCwgQEdlbmVyYXRvclJlc3VtZU1vZGVOb3JtYWwpO1xuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19nZW5lcmF0b3JQcm90b3R5cGVSZXR1
cm5Db2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29u
c3RydWN0Owpjb25zdCBpbnQgc19nZW5lcmF0b3JQcm90b3R5cGVSZXR1cm5Db2RlTGVuZ3RoID0g
MzM3OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19nZW5lcmF0b3JQcm90b3R5cGVSZXR1
cm5Db2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19nZW5lcmF0
b3JQcm90b3R5cGVSZXR1cm5Db2RlID0KICAgICIoZnVuY3Rpb24gKHZhbHVlKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgc3RhdGUgPSB0aGlzLkBn
ZW5lcmF0b3JTdGF0ZTtcbiIgXAogICAgImlmICh0eXBlb2Ygc3RhdGUgIT09IFwibnVtYmVyXCIp
XG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwifHRoaXN8IHNob3VsZCBiZSBhIGdlbmVyYXRv
clwiKTtcbiIgXAogICAgImlmIChzdGF0ZSA9PT0gQEdlbmVyYXRvclN0YXRlRXhlY3V0aW5nKVxu
IiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBleGVjdXRpbmdcIik7XG4i
IFwKICAgICJyZXR1cm4gQGdlbmVyYXRvclJlc3VtZSh0aGlzLCBzdGF0ZSwgdGhpcy5AZ2VuZXJh
dG9yVGhpcywgdmFsdWUsIHZhbHVlLCBAR2VuZXJhdG9yUmVzdW1lTW9kZVJldHVybik7XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2dlbmVyYXRvclBy
b3RvdHlwZVRocm93Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2VuZXJhdG9yUHJvdG90eXBlVGhyb3dDb2Rl
TGVuZ3RoID0gNDA3OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19nZW5lcmF0b3JQcm90
b3R5cGVUaHJvd0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBz
X2dlbmVyYXRvclByb3RvdHlwZVRocm93Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChleGNlcHRpb24p
XG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBzdGF0
ZSA9IHRoaXMuQGdlbmVyYXRvclN0YXRlO1xuIiBcCiAgICAiaWYgKHR5cGVvZiBzdGF0ZSAhPT0g
XCJudW1iZXJcIilcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJ8dGhpc3wgc2hvdWxkIGJl
IGEgZ2VuZXJhdG9yXCIpO1xuIiBcCiAgICAiaWYgKHN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVF
eGVjdXRpbmcpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGV4ZWN1
dGluZ1wiKTtcbiIgXAogICAgImlmIChzdGF0ZSA9PT0gQEdlbmVyYXRvclN0YXRlQ29tcGxldGVk
KVxuIiBcCiAgICAiIHRocm93IGV4Y2VwdGlvbjtcbiIgXAogICAgInJldHVybiBAZ2VuZXJhdG9y
UmVzdW1lKHRoaXMsIHN0YXRlLCB0aGlzLkBnZW5lcmF0b3JUaGlzLCBleGNlcHRpb24sIEB1bmRl
ZmluZWQsIEBHZW5lcmF0b3JSZXN1bWVNb2RlVGhyb3cpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19nbG9iYWxPYmplY3RJc0Zpbml0ZUNvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX2dsb2JhbE9iamVjdElzRmluaXRlQ29kZUxlbmd0aCA9IDE4NTsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfZ2xvYmFsT2JqZWN0SXNGaW5pdGVDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19nbG9iYWxPYmplY3RJc0Zpbml0ZUNvZGUg
PQogICAgIihmdW5jdGlvbiAodmFsdWUpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJp
Y3RcIjtcbiIgXAogICAgInZhciBudW1iZXJWYWx1ZSA9IEB0b051bWJlcih2YWx1ZSk7XG4iIFwK
ICAgICJpZiAobnVtYmVyVmFsdWUgIT09IG51bWJlclZhbHVlKVxuIiBcCiAgICAiIHJldHVybiBm
YWxzZTtcbiIgXAogICAgInJldHVybiBudW1iZXJWYWx1ZSAhPT0gQEluZmluaXR5ICYmIG51bWJl
clZhbHVlICE9PSAtQEluZmluaXR5O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNv
bnN0cnVjdEFiaWxpdHkgc19nbG9iYWxPYmplY3RJc05hTkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0g
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2dsb2Jh
bE9iamVjdElzTmFOQ29kZUxlbmd0aCA9IDEwOTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfZ2xvYmFsT2JqZWN0SXNOYU5Db2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29u
c3QgY2hhciogc19nbG9iYWxPYmplY3RJc05hTkNvZGUgPQogICAgIihmdW5jdGlvbiAodmFsdWUp
XG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBudW1i
ZXJWYWx1ZSA9IEB0b051bWJlcih2YWx1ZSk7XG4iIFwKICAgICJyZXR1cm4gbnVtYmVyVmFsdWUg
IT09IG51bWJlclZhbHVlO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVj
dEFiaWxpdHkgc19nbG9iYWxPcGVyYXRpb25zVG9JbnRlZ2VyQ29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xv
YmFsT3BlcmF0aW9uc1RvSW50ZWdlckNvZGVMZW5ndGggPSAxMzc7CnN0YXRpYyBjb25zdCBKU0M6
OkludHJpbnNpYyBzX2dsb2JhbE9wZXJhdGlvbnNUb0ludGVnZXJDb2RlSW50cmluc2ljID0gSlND
OjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19nbG9iYWxPcGVyYXRpb25zVG9JbnRlZ2VyQ29k
ZSA9CiAgICAiKGZ1bmN0aW9uICh0YXJnZXQpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBz
dHJpY3RcIjtcbiIgXAogICAgInZhciBudW1iZXJWYWx1ZSA9ICt0YXJnZXQ7XG4iIFwKICAgICJp
ZiAobnVtYmVyVmFsdWUgIT09IG51bWJlclZhbHVlKVxuIiBcCiAgICAiIHJldHVybiAwO1xuIiBc
CiAgICAicmV0dXJuIEB0cnVuYyhudW1iZXJWYWx1ZSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2dsb2JhbE9wZXJhdGlvbnNUb0xlbmd0aENvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX2dsb2JhbE9wZXJhdGlvbnNUb0xlbmd0aENvZGVMZW5ndGggPSAxNTc7CnN0
YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2dsb2JhbE9wZXJhdGlvbnNUb0xlbmd0aENvZGVJ
bnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2dsb2JhbE9wZXJhdGlv
bnNUb0xlbmd0aENvZGUgPQogICAgIihmdW5jdGlvbiAodGFyZ2V0KVxuIiBcCiAgICAie1xuIiBc
CiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgbGVuZ3RoID0gQHRvSW50ZWdlcih0
YXJnZXQpO1xuIiBcCiAgICAicmV0dXJuICsobGVuZ3RoID4gMCA/IChsZW5ndGggPCBATUFYX1NB
RkVfSU5URUdFUiA/IGxlbmd0aCA6IEBNQVhfU0FGRV9JTlRFR0VSKSA6IDApO1xuIiBcCiAgICAi
fSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19nbG9iYWxPcGVyYXRpb25z
SXNEaWN0aW9uYXJ5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT3BlcmF0aW9uc0lzRGljdGlvbmFy
eUNvZGVMZW5ndGggPSA5MTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfZ2xvYmFsT3Bl
cmF0aW9uc0lzRGljdGlvbmFyeUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX2dsb2JhbE9wZXJhdGlvbnNJc0RpY3Rpb25hcnlDb2RlID0KICAgICIoZnVuY3Rp
b24gKG9iamVjdClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAg
ICAicmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCI7
XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2dsb2Jh
bE9wZXJhdGlvbnNTcGVjaWVzR2V0dGVyQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT3BlcmF0aW9u
c1NwZWNpZXNHZXR0ZXJDb2RlTGVuZ3RoID0gMzE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNp
YyBzX2dsb2JhbE9wZXJhdGlvbnNTcGVjaWVzR2V0dGVyQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfZ2xvYmFsT3BlcmF0aW9uc1NwZWNpZXNHZXR0ZXJDb2Rl
ID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgInJldHVybiB0aGlzO1xu
IiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19nbG9iYWxP
cGVyYXRpb25zU3BlY2llc0NvbnN0cnVjdG9yQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT3BlcmF0
aW9uc1NwZWNpZXNDb25zdHJ1Y3RvckNvZGVMZW5ndGggPSA0NjA7CnN0YXRpYyBjb25zdCBKU0M6
OkludHJpbnNpYyBzX2dsb2JhbE9wZXJhdGlvbnNTcGVjaWVzQ29uc3RydWN0b3JDb2RlSW50cmlu
c2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19nbG9iYWxPcGVyYXRpb25zU3Bl
Y2llc0NvbnN0cnVjdG9yQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChvYmosIGRlZmF1bHRDb25zdHJ1
Y3RvcilcbiIgXAogICAgIntcbiIgXAogICAgInZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1
Y3RvcjtcbiIgXAogICAgImlmIChjb25zdHJ1Y3RvciA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAg
IiByZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuIiBcCiAgICAiaWYgKCFAaXNPYmplY3QoY29u
c3RydWN0b3IpKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcInx0aGlzfC5jb25zdHJ1Y3Rv
ciBpcyBub3QgYW4gT2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgImNvbnN0cnVjdG9y
ID0gY29uc3RydWN0b3IuQHNwZWNpZXNTeW1ib2w7XG4iIFwKICAgICJpZiAoY29uc3RydWN0b3Ig
PT0gbnVsbClcbiIgXAogICAgIiByZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuIiBcCiAgICAi
aWYgKEBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSlcbiIgXAogICAgIiByZXR1cm4gY29uc3Ry
dWN0b3I7XG4iIFwKICAgICJAdGhyb3dUeXBlRXJyb3IoXCJ8dGhpc3wuY29uc3RydWN0b3JbU3lt
Ym9sLnNwZWNpZXNdIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO1xuIiBcCiAgICAifSlcbiIgXAo7
Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19nbG9iYWxPcGVyYXRpb25zQ29weURhdGFQ
cm9wZXJ0aWVzQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNh
bm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT3BlcmF0aW9uc0NvcHlEYXRhUHJvcGVy
dGllc0NvZGVMZW5ndGggPSA1Mzc7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2dsb2Jh
bE9wZXJhdGlvbnNDb3B5RGF0YVByb3BlcnRpZXNDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJp
bnNpYzsKY29uc3QgY2hhciogc19nbG9iYWxPcGVyYXRpb25zQ29weURhdGFQcm9wZXJ0aWVzQ29k
ZSA9CiAgICAiKGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjbHVkZWRTZXQpXG4iIFwKICAg
ICJ7XG4iIFwKICAgICJpZiAoIUBpc09iamVjdCh0YXJnZXQpKVxuIiBcCiAgICAiIEB0aHJvd1R5
cGVFcnJvcihcInRhcmdldCBuZWVkcyB0byBiZSBhbiBvYmplY3RcIik7XG4iIFwKICAgICJpZiAo
c291cmNlID09IG51bGwpIFxuIiBcCiAgICAiIHJldHVybiB0YXJnZXQ7XG4iIFwKICAgICJsZXQg
ZnJvbSA9IEB0b09iamVjdChzb3VyY2UpO1xuIiBcCiAgICAibGV0IGtleXMgPSBAUmVmbGVjdC5A
b3duS2V5cyhmcm9tKTsgXG4iIFwKICAgICJsZXQga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xu
IiBcCiAgICAiZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzTGVuZ3RoOyBpKyspIHtcbiIgXAogICAg
IiBsZXQgbmV4dEtleSA9IGtleXNbaV07XG4iIFwKICAgICIgaWYgKCFleGNsdWRlZFNldC5AaGFz
KG5leHRLZXkpKSB7XG4iIFwKICAgICIgIGlmIChAcHJvcGVydHlJc0VudW1lcmFibGUoZnJvbSwg
bmV4dEtleSkpIHtcbiIgXAogICAgIiAgIGxldCBwcm9wVmFsdWUgPSBmcm9tW25leHRLZXldO1xu
IiBcCiAgICAiICAgQGRlZmluZUVudW1lcmFibGVXcml0YWJsZUNvbmZpZ3VyYWJsZURhdGFQcm9w
ZXJ0eSh0YXJnZXQsIG5leHRLZXksIHByb3BWYWx1ZSk7XG4iIFwKICAgICIgIH1cbiIgXAogICAg
IiB9XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1cm4gdGFyZ2V0O1xuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19nbG9iYWxPcGVyYXRpb25zQ29weURh
dGFQcm9wZXJ0aWVzTm9FeGNsdXNpb25zQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfZ2xvYmFsT3BlcmF0aW9u
c0NvcHlEYXRhUHJvcGVydGllc05vRXhjbHVzaW9uc0NvZGVMZW5ndGggPSA0ODI7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX2dsb2JhbE9wZXJhdGlvbnNDb3B5RGF0YVByb3BlcnRpZXNO
b0V4Y2x1c2lvbnNDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciog
c19nbG9iYWxPcGVyYXRpb25zQ29weURhdGFQcm9wZXJ0aWVzTm9FeGNsdXNpb25zQ29kZSA9CiAg
ICAiKGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSlcbiIgXAogICAgIntcbiIgXAogICAgImlmICgh
QGlzT2JqZWN0KHRhcmdldCkpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwidGFyZ2V0IG5l
ZWRzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiIgXAogICAgImlmIChzb3VyY2UgPT0gbnVsbCkgXG4i
IFwKICAgICIgcmV0dXJuIHRhcmdldDtcbiIgXAogICAgImxldCBmcm9tID0gQHRvT2JqZWN0KHNv
dXJjZSk7XG4iIFwKICAgICJsZXQga2V5cyA9IEBSZWZsZWN0LkBvd25LZXlzKGZyb20pOyBcbiIg
XAogICAgImxldCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4iIFwKICAgICJmb3IgKGxldCBp
ID0gMDsgaSA8IGtleXNMZW5ndGg7IGkrKykge1xuIiBcCiAgICAiIGxldCBuZXh0S2V5ID0ga2V5
c1tpXTtcbiIgXAogICAgIiBpZiAoQHByb3BlcnR5SXNFbnVtZXJhYmxlKGZyb20sIG5leHRLZXkp
KSB7XG4iIFwKICAgICIgIGxldCBwcm9wVmFsdWUgPSBmcm9tW25leHRLZXldO1xuIiBcCiAgICAi
ICBAZGVmaW5lRW51bWVyYWJsZVdyaXRhYmxlQ29uZmlndXJhYmxlRGF0YVByb3BlcnR5KHRhcmdl
dCwgbmV4dEtleSwgcHJvcFZhbHVlKTtcbiIgXAogICAgIiB9XG4iIFwKICAgICJ9XG4iIFwKICAg
ICJyZXR1cm4gdGFyZ2V0O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVj
dEFiaWxpdHkgc19pbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RQcm9taXNlRnVsZmlsbGVk
Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdDsKY29uc3QgaW50IHNfaW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0UHJvbWlzZUZ1
bGZpbGxlZENvZGVMZW5ndGggPSA4NzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfaW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0UHJvbWlzZUZ1bGZpbGxlZENvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2luc3BlY3Rvckluc3RydW1lbnRhdGlv
bk9iamVjdFByb21pc2VGdWxmaWxsZWRDb2RlID0KICAgICIoZnVuY3Rpb24gKHByb21pc2UsIHZh
bHVlLCByZWFjdGlvbnMpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIg
XAogICAgImlmICghdGhpcy5pc0VuYWJsZWQpXG4iIFwKICAgICIgcmV0dXJuO1xuIiBcCiAgICAi
fSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19pbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25PYmplY3RQcm9taXNlUmVqZWN0ZWRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6
Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19pbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3RQcm9taXNlUmVqZWN0ZWRDb2RlTGVuZ3RoID0gODg7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdFBy
b21pc2VSZWplY3RlZENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX2luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdFByb21pc2VSZWplY3RlZENvZGUgPQog
ICAgIihmdW5jdGlvbiAocHJvbWlzZSwgcmVhc29uLCByZWFjdGlvbnMpXG4iIFwKICAgICJ7XG4i
IFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlmICghdGhpcy5pc0VuYWJsZWQpXG4i
IFwKICAgICIgcmV0dXJuO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVj
dEFiaWxpdHkgc19pbnRlcm5hbFByb21pc2VDb25zdHJ1Y3RvckludGVybmFsQWxsQ29kZUNvbnN0
cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29u
c3QgaW50IHNfaW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3JJbnRlcm5hbEFsbENvZGVMZW5ndGgg
PSAxMjEyOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19pbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3RvckludGVybmFsQWxsQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0
IGNoYXIqIHNfaW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3JJbnRlcm5hbEFsbENvZGUgPQogICAg
IihmdW5jdGlvbiAoYXJyYXkpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgInZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShA
SW50ZXJuYWxQcm9taXNlKTtcbiIgXAogICAgInZhciB2YWx1ZXMgPSBbXTtcbiIgXAogICAgInZh
ciBpbmRleCA9IDA7XG4iIFwKICAgICJ2YXIgcmVtYWluaW5nRWxlbWVudHNDb3VudCA9IDA7XG4i
IFwKICAgICJmdW5jdGlvbiBuZXdSZXNvbHZlRWxlbWVudChpbmRleClcbiIgXAogICAgIntcbiIg
XAogICAgIiB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuIiBcCiAgICAiIHJldHVybiBmdW5j
dGlvbiAoYXJndW1lbnQpXG4iIFwKICAgICIge1xuIiBcCiAgICAiICBpZiAoYWxyZWFkeUNhbGxl
ZClcbiIgXAogICAgIiAgIHJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAiICBhbHJlYWR5Q2Fs
bGVkID0gdHJ1ZTtcbiIgXAogICAgIiAgQHB1dEJ5VmFsRGlyZWN0KHZhbHVlcywgaW5kZXgsIGFy
Z3VtZW50KTtcbiIgXAogICAgIiAgLS1yZW1haW5pbmdFbGVtZW50c0NvdW50O1xuIiBcCiAgICAi
ICBpZiAocmVtYWluaW5nRWxlbWVudHNDb3VudCA9PT0gMClcbiIgXAogICAgIiAgIHJldHVybiBw
cm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB2YWx1ZXMpO1xuIiBc
CiAgICAiICByZXR1cm4gQHVuZGVmaW5lZDtcbiIgXAogICAgIiB9XG4iIFwKICAgICJ9XG4iIFwK
ICAgICJ0cnkge1xuIiBcCiAgICAiIGlmIChhcnJheS5sZW5ndGggPT09IDApXG4iIFwKICAgICIg
IHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHZhbHVlcyk7XG4i
IFwKICAgICIgZWxzZSB7XG4iIFwKICAgICIgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0g
YXJyYXkubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkge1xuIiBcCiAgICAiICAgdmFy
IHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuIiBcCiAgICAiICAgQHB1dEJ5VmFsRGlyZWN0KHZhbHVl
cywgaW5kZXgsIEB1bmRlZmluZWQpO1xuIiBcCiAgICAiICAgdmFyIG5leHRQcm9taXNlQ2FwYWJp
bGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKTtcbiIgXAogICAg
IiAgIG5leHRQcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB2YWx1
ZSk7XG4iIFwKICAgICIgICB2YXIgbmV4dFByb21pc2UgPSBuZXh0UHJvbWlzZUNhcGFiaWxpdHku
QHByb21pc2U7XG4iIFwKICAgICIgICB2YXIgcmVzb2x2ZUVsZW1lbnQgPSBuZXdSZXNvbHZlRWxl
bWVudChpbmRleCk7XG4iIFwKICAgICIgICArK3JlbWFpbmluZ0VsZW1lbnRzQ291bnQ7XG4iIFwK
ICAgICIgICBuZXh0UHJvbWlzZS50aGVuKHJlc29sdmVFbGVtZW50LCBwcm9taXNlQ2FwYWJpbGl0
eS5AcmVqZWN0KTtcbiIgXAogICAgIiAgfVxuIiBcCiAgICAiIH1cbiIgXAogICAgIn0gY2F0Y2gg
KGVycm9yKSB7XG4iIFwKICAgICIgcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5k
ZWZpbmVkLCBlcnJvcik7XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1cm4gcHJvbWlzZUNhcGFi
aWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0
QWJpbGl0eSBzX2l0ZXJhdG9ySGVscGVyc1BlcmZvcm1JdGVyYXRpb25Db2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQg
c19pdGVyYXRvckhlbHBlcnNQZXJmb3JtSXRlcmF0aW9uQ29kZUxlbmd0aCA9IDM2NjsKc3RhdGlj
IGNvbnN0IEpTQzo6SW50cmluc2ljIHNfaXRlcmF0b3JIZWxwZXJzUGVyZm9ybUl0ZXJhdGlvbkNv
ZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX2l0ZXJhdG9ySGVs
cGVyc1BlcmZvcm1JdGVyYXRpb25Db2RlID0KICAgICIoZnVuY3Rpb24gKGl0ZXJhYmxlKVxuIiBc
CiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJsZXQgcmVzdWx0ID0g
W107XG4iIFwKICAgICJsZXQgaXRlcmF0b3IgPSBpdGVyYWJsZS5AaXRlcmF0b3JTeW1ib2woKTtc
biIgXAogICAgImxldCBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiIgXAogICAgImxldCBpdGVtO1xu
IiBcCiAgICAibGV0IGluZGV4ID0gMDtcbiIgXAogICAgIndoaWxlICh0cnVlKSB7XG4iIFwKICAg
ICIgaXRlbSA9IG5leHQuQGNhbGwoaXRlcmF0b3IpO1xuIiBcCiAgICAiIGlmICghQGlzT2JqZWN0
KGl0ZW0pKVxuIiBcCiAgICAiICBAdGhyb3dUeXBlRXJyb3IoXCJJdGVyYXRvciByZXN1bHQgaW50
ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3RcIik7XG4iIFwKICAgICIgaWYgKGl0ZW0uZG9uZSlcbiIg
XAogICAgIiAgcmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIiBAcHV0QnlWYWxEaXJlY3QocmVzdWx0
LCBpbmRleCsrLCBpdGVtLnZhbHVlKTtcbiIgXAogICAgIn1cbiIgXAogICAgIn0pXG4iIFwKOwoK
Y29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfaXRlcmF0b3JQcm90b3R5cGVTeW1ib2xJdGVy
YXRvckdldHRlckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX2l0ZXJhdG9yUHJvdG90eXBlU3ltYm9sSXRlcmF0
b3JHZXR0ZXJDb2RlTGVuZ3RoID0gNDU7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2l0
ZXJhdG9yUHJvdG90eXBlU3ltYm9sSXRlcmF0b3JHZXR0ZXJDb2RlSW50cmluc2ljID0gSlNDOjpO
b0ludHJpbnNpYzsKY29uc3QgY2hhciogc19pdGVyYXRvclByb3RvdHlwZVN5bWJvbEl0ZXJhdG9y
R2V0dGVyQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVz
ZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiB0aGlzO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19tYXBJdGVyYXRvclByb3RvdHlwZU1hcEl0ZXJh
dG9yTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTWFwSXRlcmF0b3JO
ZXh0Q29kZUxlbmd0aCA9IDM3OTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbWFwSXRl
cmF0b3JQcm90b3R5cGVNYXBJdGVyYXRvck5leHRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJp
bnNpYzsKY29uc3QgY2hhciogc19tYXBJdGVyYXRvclByb3RvdHlwZU1hcEl0ZXJhdG9yTmV4dENv
ZGUgPQogICAgIihmdW5jdGlvbiAoYnVja2V0LCBraW5kKVxuIiBcCiAgICAie1xuIiBcCiAgICAi
XCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgdmFsdWU7XG4iIFwKICAgICJidWNrZXQgPSBA
bWFwQnVja2V0TmV4dChidWNrZXQpO1xuIiBcCiAgICAidGhpcy5AbWFwQnVja2V0ID0gYnVja2V0
O1xuIiBcCiAgICAidmFyIGRvbmUgPSBidWNrZXQgPT09IEBzZW50aW5lbE1hcEJ1Y2tldDtcbiIg
XAogICAgImlmICghZG9uZSkge1xuIiBcCiAgICAiIHZhciBrZXkgPSBAbWFwQnVja2V0S2V5KGJ1
Y2tldCk7XG4iIFwKICAgICIgdmFsdWUgPSBAbWFwQnVja2V0VmFsdWUoYnVja2V0KTtcbiIgXAog
ICAgIiBpZiAoa2luZCA9PT0gQGl0ZXJhdGlvbktpbmRLZXlWYWx1ZSlcbiIgXAogICAgIiAgdmFs
dWUgPSBbIGtleSwgdmFsdWUgXVxuIiBcCiAgICAiIGVsc2UgaWYgKGtpbmQgPT09IEBpdGVyYXRp
b25LaW5kS2V5KVxuIiBcCiAgICAiICB2YWx1ZSA9IGtleTtcbiIgXAogICAgIn1cbiIgXAogICAg
InJldHVybiB7IGRvbmUsIHZhbHVlIH07XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6
Q29uc3RydWN0QWJpbGl0eSBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVMZW5ndGggPSAzNjc7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21hcEl0ZXJhdG9yUHJvdG90eXBlTmV4
dENvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3Ry
aWN0XCI7XG4iIFwKICAgICJpZiAodGhpcyA9PSBudWxsKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVF
cnJvcihcIiVNYXBJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1aXJlcyB0aGF0IHx0aGlzfCBu
b3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJ2YXIgYnVja2V0ID0gdGhpcy5A
bWFwQnVja2V0O1xuIiBcCiAgICAiaWYgKGJ1Y2tldCA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAg
IiBAdGhyb3dUeXBlRXJyb3IoXCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMg
dGhhdCB8dGhpc3wgYmUgYSBNYXAgSXRlcmF0b3IgaW5zdGFuY2VcIik7XG4iIFwKICAgICJyZXR1
cm4gQG1hcEl0ZXJhdG9yTmV4dC5AY2FsbCh0aGlzLCBidWNrZXQsIHRoaXMuQG1hcEl0ZXJhdG9y
S2luZCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X21hcFByb3RvdHlwZUNyZWF0ZU1hcEl0ZXJhdG9yQ29uc3RydWN0b3JDb2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2FuQ29uc3RydWN0Owpjb25zdCBpbnQgc19t
YXBQcm90b3R5cGVDcmVhdGVNYXBJdGVyYXRvckNvbnN0cnVjdG9yQ29kZUxlbmd0aCA9IDIwNDsK
c3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbWFwUHJvdG90eXBlQ3JlYXRlTWFwSXRlcmF0
b3JDb25zdHJ1Y3RvckNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX21hcFByb3RvdHlwZUNyZWF0ZU1hcEl0ZXJhdG9yQ29uc3RydWN0b3JDb2RlID0KICAgICIo
ZnVuY3Rpb24gKGl0ZXJhdGVkT2JqZWN0LCBraW5kKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJAYXNzZXJ0KEBpc01hcChpdGVyYXRlZE9iamVjdCkpO1xu
IiBcCiAgICAidGhpcy5AaXRlcmF0ZWRPYmplY3QgPSBpdGVyYXRlZE9iamVjdDtcbiIgXAogICAg
InRoaXMuQG1hcEl0ZXJhdG9yS2luZCA9IGtpbmQ7XG4iIFwKICAgICJ0aGlzLkBtYXBCdWNrZXQg
PSBAbWFwQnVja2V0SGVhZChpdGVyYXRlZE9iamVjdCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX21hcFByb3RvdHlwZVZhbHVlc0NvZGVDb25zdHJ1
Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0
IGludCBzX21hcFByb3RvdHlwZVZhbHVlc0NvZGVMZW5ndGggPSAxNzk7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX21hcFByb3RvdHlwZVZhbHVlc0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21hcFByb3RvdHlwZVZhbHVlc0NvZGUgPQogICAgIihm
dW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAg
ICJpZiAoIUBpc01hcCh0aGlzKSlcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJNYXAucHJv
dG90eXBlLnZhbHVlcyByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBNYXBcIik7XG4iIFwKICAgICJy
ZXR1cm4gbmV3IEBjcmVhdGVNYXBJdGVyYXRvcih0aGlzLCBAaXRlcmF0aW9uS2luZFZhbHVlKTtc
biIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbWFwUHJv
dG90eXBlS2V5c0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX21hcFByb3RvdHlwZUtleXNDb2RlTGVuZ3RoID0g
MTc1OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tYXBQcm90b3R5cGVLZXlzQ29kZUlu
dHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbWFwUHJvdG90eXBlS2V5
c0NvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3Ry
aWN0XCI7XG4iIFwKICAgICJpZiAoIUBpc01hcCh0aGlzKSlcbiIgXAogICAgIiBAdGhyb3dUeXBl
RXJyb3IoXCJNYXAucHJvdG90eXBlLmtleXMgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgTWFwXCIp
O1xuIiBcCiAgICAicmV0dXJuIG5ldyBAY3JlYXRlTWFwSXRlcmF0b3IodGhpcywgQGl0ZXJhdGlv
bktpbmRLZXkpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxp
dHkgc19tYXBQcm90b3R5cGVFbnRyaWVzQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfbWFwUHJvdG90eXBlRW50
cmllc0NvZGVMZW5ndGggPSAxODM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX21hcFBy
b3RvdHlwZUVudHJpZXNDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hh
ciogc19tYXBQcm90b3R5cGVFbnRyaWVzQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAg
ICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlmICghQGlzTWFwKHRoaXMp
KVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIk1hcC5wcm90b3R5cGUuZW50cmllcyByZXF1
aXJlcyB0aGF0IHx0aGlzfCBiZSBNYXBcIik7XG4iIFwKICAgICJyZXR1cm4gbmV3IEBjcmVhdGVN
YXBJdGVyYXRvcih0aGlzLCBAaXRlcmF0aW9uS2luZEtleVZhbHVlKTtcbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbWFwUHJvdG90eXBlRm9yRWFjaENv
ZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3Q7CmNvbnN0IGludCBzX21hcFByb3RvdHlwZUZvckVhY2hDb2RlTGVuZ3RoID0gNDcwOwpzdGF0
aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tYXBQcm90b3R5cGVGb3JFYWNoQ29kZUludHJpbnNp
YyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbWFwUHJvdG90eXBlRm9yRWFjaENv
ZGUgPQogICAgIihmdW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoIUBpc01hcCh0aGlzKSlcbiIgXAogICAgIiBAdGhy
b3dUeXBlRXJyb3IoXCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdFwiKTtc
biIgXAogICAgImlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpXG4iIFwKICAgICIg
QHRocm93VHlwZUVycm9yKFwiTWFwLnByb3RvdHlwZS5mb3JFYWNoIGNhbGxiYWNrIG11c3QgYmUg
YSBmdW5jdGlvblwiKTtcbiIgXAogICAgInZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBc
CiAgICAidmFyIGJ1Y2tldCA9IEBtYXBCdWNrZXRIZWFkKHRoaXMpO1xuIiBcCiAgICAiZG8ge1xu
IiBcCiAgICAiIGJ1Y2tldCA9IEBtYXBCdWNrZXROZXh0KGJ1Y2tldCk7XG4iIFwKICAgICIgaWYg
KGJ1Y2tldCA9PT0gQHNlbnRpbmVsTWFwQnVja2V0KVxuIiBcCiAgICAiICBicmVhaztcbiIgXAog
ICAgIiBjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBAbWFwQnVja2V0VmFsdWUoYnVja2V0KSwgQG1h
cEJ1Y2tldEtleShidWNrZXQpLCB0aGlzKTtcbiIgXAogICAgIn0gd2hpbGUgKHRydWUpO1xuIiBc
CiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19tb2R1bGVMb2Fk
ZXJQcm90b3R5cGVTZXRTdGF0ZVRvTWF4Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfbW9kdWxlTG9hZGVyUHJv
dG90eXBlU2V0U3RhdGVUb01heENvZGVMZW5ndGggPSAxMDA7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3RvdHlwZVNldFN0YXRlVG9NYXhDb2RlSW50cmluc2lj
ID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19tb2R1bGVMb2FkZXJQcm90b3R5cGVT
ZXRTdGF0ZVRvTWF4Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChlbnRyeSwgbmV3U3RhdGUpXG4iIFwK
ICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlmIChlbnRyeS5zdGF0
ZSA8IG5ld1N0YXRlKVxuIiBcCiAgICAiIGVudHJ5LnN0YXRlID0gbmV3U3RhdGU7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX21vZHVsZUxvYWRlclBy
b3RvdHlwZU5ld1JlZ2lzdHJ5RW50cnlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19tb2R1bGVMb2FkZXJQcm90
b3R5cGVOZXdSZWdpc3RyeUVudHJ5Q29kZUxlbmd0aCA9IDI4MzsKc3RhdGljIGNvbnN0IEpTQzo6
SW50cmluc2ljIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTmV3UmVnaXN0cnlFbnRyeUNvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVsZUxvYWRlclByb3Rv
dHlwZU5ld1JlZ2lzdHJ5RW50cnlDb2RlID0KICAgICIoZnVuY3Rpb24gKGtleSlcbiIgXAogICAg
IntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAicmV0dXJuIHtcbiIgXAogICAg
IiBrZXk6IGtleSxcbiIgXAogICAgIiBzdGF0ZTogQE1vZHVsZUZldGNoLFxuIiBcCiAgICAiIGZl
dGNoOiBAdW5kZWZpbmVkLFxuIiBcCiAgICAiIGluc3RhbnRpYXRlOiBAdW5kZWZpbmVkLFxuIiBc
CiAgICAiIHNhdGlzZnk6IEB1bmRlZmluZWQsXG4iIFwKICAgICIgZGVwZW5kZW5jaWVzOiBbXSxc
biIgXAogICAgIiBkZXBlbmRlbmNpZXNNYXA6IEB1bmRlZmluZWQsXG4iIFwKICAgICIgbW9kdWxl
OiBAdW5kZWZpbmVkLFxuIiBcCiAgICAiIGxpbmtFcnJvcjogQHVuZGVmaW5lZCxcbiIgXAogICAg
IiBsaW5rU3VjY2VlZGVkOiB0cnVlLFxuIiBcCiAgICAiIGV2YWx1YXRlZDogZmFsc2UsXG4iIFwK
ICAgICJ9O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19tb2R1bGVMb2FkZXJQcm90b3R5cGVFbnN1cmVSZWdpc3RlcmVkQ29kZUNvbnN0cnVjdEFiaWxp
dHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNf
bW9kdWxlTG9hZGVyUHJvdG90eXBlRW5zdXJlUmVnaXN0ZXJlZENvZGVMZW5ndGggPSAxNzY7CnN0
YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3RvdHlwZUVuc3VyZVJl
Z2lzdGVyZWRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19t
b2R1bGVMb2FkZXJQcm90b3R5cGVFbnN1cmVSZWdpc3RlcmVkQ29kZSA9CiAgICAiKGZ1bmN0aW9u
IChrZXkpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZh
ciBlbnRyeSA9IHRoaXMucmVnaXN0cnkuQGdldChrZXkpO1xuIiBcCiAgICAiaWYgKGVudHJ5KVxu
IiBcCiAgICAiIHJldHVybiBlbnRyeTtcbiIgXAogICAgImVudHJ5ID0gQG5ld1JlZ2lzdHJ5RW50
cnkoa2V5KTtcbiIgXAogICAgInRoaXMucmVnaXN0cnkuQHNldChrZXksIGVudHJ5KTtcbiIgXAog
ICAgInJldHVybiBlbnRyeTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlRm9yY2VGdWxmaWxsUHJvbWlzZUNvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlwZUZvcmNlRnVsZmlsbFByb21pc2VDb2Rl
TGVuZ3RoID0gMTMyOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tb2R1bGVMb2FkZXJQ
cm90b3R5cGVGb3JjZUZ1bGZpbGxQcm9taXNlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5z
aWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlRm9yY2VGdWxmaWxsUHJvbWlz
ZUNvZGUgPQogICAgIihmdW5jdGlvbiAocHJvbWlzZSwgdmFsdWUpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlmIChwcm9taXNlLkBwcm9taXNlU3RhdGUg
PT09IEBwcm9taXNlU3RhdGVQZW5kaW5nKVxuIiBcCiAgICAiIEBmdWxmaWxsUHJvbWlzZShwcm9t
aXNlLCB2YWx1ZSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX21vZHVsZUxvYWRlclByb3RvdHlwZUZ1bGZpbGxGZXRjaENvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X21vZHVsZUxvYWRlclByb3RvdHlwZUZ1bGZpbGxGZXRjaENvZGVMZW5ndGggPSAyMTg7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3RvdHlwZUZ1bGZpbGxGZXRj
aENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVsZUxv
YWRlclByb3RvdHlwZUZ1bGZpbGxGZXRjaENvZGUgPQogICAgIihmdW5jdGlvbiAoZW50cnksIHNv
dXJjZSlcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiaWYg
KCFlbnRyeS5mZXRjaClcbiIgXAogICAgIiBlbnRyeS5mZXRjaCA9IEBuZXdQcm9taXNlQ2FwYWJp
bGl0eShASW50ZXJuYWxQcm9taXNlKS5AcHJvbWlzZTtcbiIgXAogICAgInRoaXMuZm9yY2VGdWxm
aWxsUHJvbWlzZShlbnRyeS5mZXRjaCwgc291cmNlKTtcbiIgXAogICAgIkBzZXRTdGF0ZVRvTWF4
KGVudHJ5LCBATW9kdWxlSW5zdGFudGlhdGUpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0RmV0Y2hD
b2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3Ry
dWN0Owpjb25zdCBpbnQgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0RmV0Y2hDb2RlTGVu
Z3RoID0gNTM4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tb2R1bGVMb2FkZXJQcm90
b3R5cGVSZXF1ZXN0RmV0Y2hDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3Qg
Y2hhciogc19tb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0RmV0Y2hDb2RlID0KICAgICIoZnVu
Y3Rpb24gKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKVxuIiBcCiAgICAie1xuIiBcCiAgICAi
XCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoZW50cnkuZmV0Y2gpIHtcbiIgXAogICAgIiB2
YXIgY3VycmVudEF0dGVtcHQgPSBlbnRyeS5mZXRjaDtcbiIgXAogICAgIiBpZiAoZW50cnkuc3Rh
dGUgIT09IEBNb2R1bGVGZXRjaClcbiIgXAogICAgIiAgcmV0dXJuIGN1cnJlbnRBdHRlbXB0O1xu
IiBcCiAgICAiIHJldHVybiBjdXJyZW50QXR0ZW1wdC5jYXRjaCgoZXJyb3IpID0+IHtcbiIgXAog
ICAgIiAgaWYgKGN1cnJlbnRBdHRlbXB0ID09PSBlbnRyeS5mZXRjaClcbiIgXAogICAgIiAgIGVu
dHJ5LmZldGNoID0gQHVuZGVmaW5lZDtcbiIgXAogICAgIiAgcmV0dXJuIHRoaXMucmVxdWVzdEZl
dGNoKGVudHJ5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKTtcbiIgXAogICAgIiB9KTtcbiIgXAogICAg
In1cbiIgXAogICAgInZhciBmZXRjaFByb21pc2UgPSB0aGlzLmZldGNoKGVudHJ5LmtleSwgcGFy
YW1ldGVycywgZmV0Y2hlcikudGhlbigoc291cmNlKSA9PiB7XG4iIFwKICAgICIgQHNldFN0YXRl
VG9NYXgoZW50cnksIEBNb2R1bGVJbnN0YW50aWF0ZSk7XG4iIFwKICAgICIgcmV0dXJuIHNvdXJj
ZTtcbiIgXAogICAgIn0pO1xuIiBcCiAgICAiZW50cnkuZmV0Y2ggPSBmZXRjaFByb21pc2U7XG4i
IFwKICAgICJyZXR1cm4gZmV0Y2hQcm9taXNlO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0SW5zdGFu
dGlhdGVDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0SW5zdGFu
dGlhdGVDb2RlTGVuZ3RoID0gMTAyNzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbW9k
dWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdEluc3RhbnRpYXRlQ29kZUludHJpbnNpYyA9IEpTQzo6
Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdElu
c3RhbnRpYXRlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChlbnRyeSwgcGFyYW1ldGVycywgZmV0Y2hl
cilcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiaWYgKGVu
dHJ5Lmluc3RhbnRpYXRlKVxuIiBcCiAgICAiIHJldHVybiBlbnRyeS5pbnN0YW50aWF0ZTtcbiIg
XAogICAgInZhciBpbnN0YW50aWF0ZVByb21pc2UgPSB0aGlzLnJlcXVlc3RGZXRjaChlbnRyeSwg
cGFyYW1ldGVycywgZmV0Y2hlcikudGhlbigoc291cmNlKSA9PiB7XG4iIFwKICAgICIgaWYgKGVu
dHJ5Lmluc3RhbnRpYXRlKVxuIiBcCiAgICAiICByZXR1cm4gZW50cnk7XG4iIFwKICAgICIgZW50
cnkuaW5zdGFudGlhdGUgPSBpbnN0YW50aWF0ZVByb21pc2U7XG4iIFwKICAgICIgdmFyIGtleSA9
IGVudHJ5LmtleTtcbiIgXAogICAgIiB2YXIgbW9kdWxlUmVjb3JkID0gdGhpcy5wYXJzZU1vZHVs
ZShrZXksIHNvdXJjZSk7XG4iIFwKICAgICIgdmFyIGRlcGVuZGVuY2llc01hcCA9IG1vZHVsZVJl
Y29yZC5kZXBlbmRlbmNpZXNNYXA7XG4iIFwKICAgICIgdmFyIHJlcXVlc3RlZE1vZHVsZXMgPSB0
aGlzLnJlcXVlc3RlZE1vZHVsZXMobW9kdWxlUmVjb3JkKTtcbiIgXAogICAgIiB2YXIgZGVwZW5k
ZW5jaWVzID0gQG5ld0FycmF5V2l0aFNpemUocmVxdWVzdGVkTW9kdWxlcy5sZW5ndGgpO1xuIiBc
CiAgICAiIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXF1ZXN0ZWRNb2R1bGVzLmxlbmd0aDsg
aSA8IGxlbmd0aDsgKytpKSB7XG4iIFwKICAgICIgIHZhciBkZXBOYW1lID0gcmVxdWVzdGVkTW9k
dWxlc1tpXTtcbiIgXAogICAgIiAgdmFyIGRlcEtleSA9IHRoaXMucmVzb2x2ZVN5bmMoZGVwTmFt
ZSwga2V5LCBmZXRjaGVyKTtcbiIgXAogICAgIiAgdmFyIGRlcEVudHJ5ID0gdGhpcy5lbnN1cmVS
ZWdpc3RlcmVkKGRlcEtleSk7XG4iIFwKICAgICIgIEBwdXRCeVZhbERpcmVjdChkZXBlbmRlbmNp
ZXMsIGksIGRlcEVudHJ5KTtcbiIgXAogICAgIiAgZGVwZW5kZW5jaWVzTWFwLkBzZXQoZGVwTmFt
ZSwgZGVwRW50cnkpO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIiBlbnRyeS5kZXBlbmRlbmNpZXMg
PSBkZXBlbmRlbmNpZXM7XG4iIFwKICAgICIgZW50cnkuZGVwZW5kZW5jaWVzTWFwID0gZGVwZW5k
ZW5jaWVzTWFwO1xuIiBcCiAgICAiIGVudHJ5Lm1vZHVsZSA9IG1vZHVsZVJlY29yZDtcbiIgXAog
ICAgIiBAc2V0U3RhdGVUb01heChlbnRyeSwgQE1vZHVsZVNhdGlzZnkpO1xuIiBcCiAgICAiIHJl
dHVybiBlbnRyeTtcbiIgXAogICAgIn0pO1xuIiBcCiAgICAicmV0dXJuIGluc3RhbnRpYXRlUHJv
bWlzZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNf
bW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdFNhdGlzZnlDb2RlQ29uc3RydWN0QWJpbGl0eSA9
IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19tb2R1
bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0U2F0aXNmeUNvZGVMZW5ndGggPSA5MDE7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RTYXRpc2Z5
Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxlTG9h
ZGVyUHJvdG90eXBlUmVxdWVzdFNhdGlzZnlDb2RlID0KICAgICIoZnVuY3Rpb24gKGVudHJ5LCBw
YXJhbWV0ZXJzLCBmZXRjaGVyLCB2aXNpdGVkKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICJpZiAoZW50cnkuc2F0aXNmeSlcbiIgXAogICAgIiByZXR1cm4g
ZW50cnkuc2F0aXNmeTtcbiIgXAogICAgInZpc2l0ZWQuQGFkZChlbnRyeSk7XG4iIFwKICAgICJ2
YXIgc2F0aXNmeVByb21pc2UgPSB0aGlzLnJlcXVlc3RJbnN0YW50aWF0ZShlbnRyeSwgcGFyYW1l
dGVycywgZmV0Y2hlcikudGhlbigoZW50cnkpID0+IHtcbiIgXAogICAgIiBpZiAoZW50cnkuc2F0
aXNmeSlcbiIgXAogICAgIiAgcmV0dXJuIGVudHJ5O1xuIiBcCiAgICAiIHZhciBkZXBMb2FkcyA9
IEBuZXdBcnJheVdpdGhTaXplKGVudHJ5LmRlcGVuZGVuY2llcy5sZW5ndGgpO1xuIiBcCiAgICAi
IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBlbnRyeS5kZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwg
bGVuZ3RoOyArK2kpIHtcbiIgXAogICAgIiAgdmFyIGRlcEVudHJ5ID0gZW50cnkuZGVwZW5kZW5j
aWVzW2ldO1xuIiBcCiAgICAiICB2YXIgcHJvbWlzZTtcbiIgXAogICAgIiAgaWYgKHZpc2l0ZWQu
QGhhcyhkZXBFbnRyeSkpXG4iIFwKICAgICIgICBwcm9taXNlID0gdGhpcy5yZXF1ZXN0SW5zdGFu
dGlhdGUoZGVwRW50cnksIEB1bmRlZmluZWQsIGZldGNoZXIpO1xuIiBcCiAgICAiICBlbHNlIHtc
biIgXAogICAgIiAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RTYXRpc2Z5KGRlcEVudHJ5LCBAdW5k
ZWZpbmVkLCBmZXRjaGVyLCB2aXNpdGVkKTtcbiIgXAogICAgIiAgfVxuIiBcCiAgICAiICBAcHV0
QnlWYWxEaXJlY3QoZGVwTG9hZHMsIGksIHByb21pc2UpO1xuIiBcCiAgICAiIH1cbiIgXAogICAg
IiByZXR1cm4gQEludGVybmFsUHJvbWlzZS5pbnRlcm5hbEFsbChkZXBMb2FkcykudGhlbigoZW50
cmllcykgPT4ge1xuIiBcCiAgICAiICBpZiAoZW50cnkuc2F0aXNmeSlcbiIgXAogICAgIiAgIHJl
dHVybiBlbnRyeTtcbiIgXAogICAgIiAgQHNldFN0YXRlVG9NYXgoZW50cnksIEBNb2R1bGVMaW5r
KTtcbiIgXAogICAgIiAgZW50cnkuc2F0aXNmeSA9IHNhdGlzZnlQcm9taXNlO1xuIiBcCiAgICAi
ICByZXR1cm4gZW50cnk7XG4iIFwKICAgICIgfSk7XG4iIFwKICAgICJ9KTtcbiIgXAogICAgInJl
dHVybiBzYXRpc2Z5UHJvbWlzZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTGlua0NvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X21vZHVsZUxvYWRlclByb3RvdHlwZUxpbmtDb2RlTGVuZ3RoID0gNDg3OwpzdGF0aWMgY29uc3Qg
SlNDOjpJbnRyaW5zaWMgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVMaW5rQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTGlu
a0NvZGUgPQogICAgIihmdW5jdGlvbiAoZW50cnksIGZldGNoZXIpXG4iIFwKICAgICJ7XG4iIFwK
ICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlmICghZW50cnkubGlua1N1Y2NlZWRlZClc
biIgXAogICAgIiB0aHJvdyBlbnRyeS5saW5rRXJyb3I7XG4iIFwKICAgICJpZiAoZW50cnkuc3Rh
dGUgPT09IEBNb2R1bGVSZWFkeSlcbiIgXAogICAgIiByZXR1cm47XG4iIFwKICAgICJAc2V0U3Rh
dGVUb01heChlbnRyeSwgQE1vZHVsZVJlYWR5KTtcbiIgXAogICAgInRyeSB7XG4iIFwKICAgICIg
dmFyIGRlcGVuZGVuY2llcyA9IGVudHJ5LmRlcGVuZGVuY2llcztcbiIgXAogICAgIiBmb3IgKHZh
ciBpID0gMCwgbGVuZ3RoID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKVxu
IiBcCiAgICAiICB0aGlzLmxpbmsoZGVwZW5kZW5jaWVzW2ldLCBmZXRjaGVyKTtcbiIgXAogICAg
IiB0aGlzLm1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihlbnRyeS5tb2R1bGUsIGVudHJ5
LmtleSwgZmV0Y2hlcik7XG4iIFwKICAgICJ9IGNhdGNoIChlcnJvcikge1xuIiBcCiAgICAiIGVu
dHJ5LmxpbmtTdWNjZWVkZWQgPSBmYWxzZTtcbiIgXAogICAgIiBlbnRyeS5saW5rRXJyb3IgPSBl
cnJvcjtcbiIgXAogICAgIiB0aHJvdyBlcnJvcjtcbiIgXAogICAgIn1cbiIgXAogICAgIn0pXG4i
IFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBl
TW9kdWxlRXZhbHVhdGlvbkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlwZU1v
ZHVsZUV2YWx1YXRpb25Db2RlTGVuZ3RoID0gMzAxOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5z
aWMgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVFdmFsdWF0aW9uQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTW9k
dWxlRXZhbHVhdGlvbkNvZGUgPQogICAgIihmdW5jdGlvbiAoZW50cnksIGZldGNoZXIpXG4iIFwK
ICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlmIChlbnRyeS5ldmFs
dWF0ZWQpXG4iIFwKICAgICIgcmV0dXJuO1xuIiBcCiAgICAiZW50cnkuZXZhbHVhdGVkID0gdHJ1
ZTtcbiIgXAogICAgInZhciBkZXBlbmRlbmNpZXMgPSBlbnRyeS5kZXBlbmRlbmNpZXM7XG4iIFwK
ICAgICJmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGxl
bmd0aDsgKytpKVxuIiBcCiAgICAiIHRoaXMubW9kdWxlRXZhbHVhdGlvbihkZXBlbmRlbmNpZXNb
aV0sIGZldGNoZXIpO1xuIiBcCiAgICAidGhpcy5ldmFsdWF0ZShlbnRyeS5rZXksIGVudHJ5Lm1v
ZHVsZSwgZmV0Y2hlcik7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0
QWJpbGl0eSBzX21vZHVsZUxvYWRlclByb3RvdHlwZVByb3ZpZGVGZXRjaENvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX21vZHVsZUxvYWRlclByb3RvdHlwZVByb3ZpZGVGZXRjaENvZGVMZW5ndGggPSAyMDU7CnN0
YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX21vZHVsZUxvYWRlclByb3RvdHlwZVByb3ZpZGVG
ZXRjaENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVs
ZUxvYWRlclByb3RvdHlwZVByb3ZpZGVGZXRjaENvZGUgPQogICAgIihmdW5jdGlvbiAoa2V5LCB2
YWx1ZSlcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAidmFy
IGVudHJ5ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7XG4iIFwKICAgICJpZiAoZW50cnku
c3RhdGUgPiBATW9kdWxlRmV0Y2gpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiUmVxdWVz
dGVkIG1vZHVsZSBpcyBhbHJlYWR5IGZldGNoZWQuXCIpO1xuIiBcCiAgICAidGhpcy5mdWxmaWxs
RmV0Y2goZW50cnksIHZhbHVlKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlTG9hZE1vZHVsZUNvZGVDb25zdHJ1
Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0
IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxvYWRNb2R1bGVDb2RlTGVuZ3RoID0gMjY0Owpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVMb2FkTW9k
dWxlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxl
TG9hZGVyUHJvdG90eXBlTG9hZE1vZHVsZUNvZGUgPQogICAgIihmdW5jdGlvbiAobW9kdWxlTmFt
ZSwgcGFyYW1ldGVycywgZmV0Y2hlcilcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmlj
dFwiO1xuIiBcCiAgICAicmV0dXJuIHRoaXMucmVzb2x2ZShtb2R1bGVOYW1lLCBAdW5kZWZpbmVk
LCBmZXRjaGVyKS50aGVuKChrZXkpID0+IHtcbiIgXAogICAgIiByZXR1cm4gdGhpcy5yZXF1ZXN0
U2F0aXNmeSh0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KSwgcGFyYW1ldGVycywgZmV0Y2hlciwg
bmV3IEBTZXQpO1xuIiBcCiAgICAifSkudGhlbigoZW50cnkpID0+IHtcbiIgXAogICAgIiByZXR1
cm4gZW50cnkua2V5O1xuIiBcCiAgICAifSk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eSBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxpbmtBbmRFdmFsdWF0
ZU1vZHVsZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5u
b3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxpbmtBbmRFdmFs
dWF0ZU1vZHVsZUNvZGVMZW5ndGggPSAyNTE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X21vZHVsZUxvYWRlclByb3RvdHlwZUxpbmtBbmRFdmFsdWF0ZU1vZHVsZUNvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX21vZHVsZUxvYWRlclByb3RvdHlwZUxp
bmtBbmRFdmFsdWF0ZU1vZHVsZUNvZGUgPQogICAgIihmdW5jdGlvbiAoa2V5LCBmZXRjaGVyKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgZW50cnkg
PSB0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KTtcbiIgXAogICAgImlmIChlbnRyeS5zdGF0ZSA8
IEBNb2R1bGVMaW5rKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlJlcXVlc3RlZCBtb2R1
bGUgaXMgbm90IGluc3RhbnRpYXRlZCB5ZXQuXCIpO1xuIiBcCiAgICAidGhpcy5saW5rKGVudHJ5
LCBmZXRjaGVyKTtcbiIgXAogICAgInJldHVybiB0aGlzLm1vZHVsZUV2YWx1YXRpb24oZW50cnks
IGZldGNoZXIpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxp
dHkgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVMb2FkQW5kRXZhbHVhdGVNb2R1bGVDb2RlQ29uc3Ry
dWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25z
dCBpbnQgc19tb2R1bGVMb2FkZXJQcm90b3R5cGVMb2FkQW5kRXZhbHVhdGVNb2R1bGVDb2RlTGVu
Z3RoID0gMTg5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tb2R1bGVMb2FkZXJQcm90
b3R5cGVMb2FkQW5kRXZhbHVhdGVNb2R1bGVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc19tb2R1bGVMb2FkZXJQcm90b3R5cGVMb2FkQW5kRXZhbHVhdGVNb2R1
bGVDb2RlID0KICAgICIoZnVuY3Rpb24gKG1vZHVsZU5hbWUsIHBhcmFtZXRlcnMsIGZldGNoZXIp
XG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiB0
aGlzLmxvYWRNb2R1bGUobW9kdWxlTmFtZSwgcGFyYW1ldGVycywgZmV0Y2hlcikudGhlbigoa2V5
KSA9PiB7XG4iIFwKICAgICIgcmV0dXJuIHRoaXMubGlua0FuZEV2YWx1YXRlTW9kdWxlKGtleSwg
ZmV0Y2hlcik7XG4iIFwKICAgICJ9KTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpD
b25zdHJ1Y3RBYmlsaXR5IHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdEltcG9ydE1vZHVs
ZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25z
dHJ1Y3Q7CmNvbnN0IGludCBzX21vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RJbXBvcnRNb2R1
bGVDb2RlTGVuZ3RoID0gMjY2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19tb2R1bGVM
b2FkZXJQcm90b3R5cGVSZXF1ZXN0SW1wb3J0TW9kdWxlQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfbW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdEltcG9y
dE1vZHVsZUNvZGUgPQogICAgIihmdW5jdGlvbiAoa2V5LCBwYXJhbWV0ZXJzLCBmZXRjaGVyKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJyZXR1cm4gdGhp
cy5yZXF1ZXN0U2F0aXNmeSh0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KSwgcGFyYW1ldGVycywg
ZmV0Y2hlciwgbmV3IEBTZXQpLnRoZW4oKGVudHJ5KSA9PiB7XG4iIFwKICAgICIgdGhpcy5saW5r
QW5kRXZhbHVhdGVNb2R1bGUoZW50cnkua2V5LCBmZXRjaGVyKTtcbiIgXAogICAgIiByZXR1cm4g
dGhpcy5nZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QoZW50cnkubW9kdWxlKTtcbiIgXAogICAgIn0p
O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19udW1i
ZXJDb25zdHJ1Y3RvcklzRmluaXRlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfbnVtYmVyQ29uc3RydWN0b3JJ
c0Zpbml0ZUNvZGVMZW5ndGggPSAxNzE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX251
bWJlckNvbnN0cnVjdG9ySXNGaW5pdGVDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsK
Y29uc3QgY2hhciogc19udW1iZXJDb25zdHJ1Y3RvcklzRmluaXRlQ29kZSA9CiAgICAiKGZ1bmN0
aW9uICh2YWx1ZSlcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAg
ICAiaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIilcbiIgXAogICAgIiByZXR1cm4gZmFs
c2U7XG4iIFwKICAgICJpZiAodmFsdWUgIT09IHZhbHVlKVxuIiBcCiAgICAiIHJldHVybiBmYWxz
ZTtcbiIgXAogICAgInJldHVybiB2YWx1ZSAhPT0gQEluZmluaXR5ICYmIHZhbHVlICE9PSAtQElu
ZmluaXR5O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19udW1iZXJDb25zdHJ1Y3RvcklzTmFOQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfbnVtYmVyQ29uc3RydWN0
b3JJc05hTkNvZGVMZW5ndGggPSA2MTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbnVt
YmVyQ29uc3RydWN0b3JJc05hTkNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX251bWJlckNvbnN0cnVjdG9ySXNOYU5Db2RlID0KICAgICIoZnVuY3Rpb24gKHZh
bHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJyZXR1
cm4gdmFsdWUgIT09IHZhbHVlO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0
cnVjdEFiaWxpdHkgc19udW1iZXJQcm90b3R5cGVUb0xvY2FsZVN0cmluZ0NvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX251bWJlclByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZUxlbmd0aCA9IDE3NzsKc3RhdGlj
IGNvbnN0IEpTQzo6SW50cmluc2ljIHNfbnVtYmVyUHJvdG90eXBlVG9Mb2NhbGVTdHJpbmdDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19udW1iZXJQcm90b3R5
cGVUb0xvY2FsZVN0cmluZ0NvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBc
CiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgbnVtYmVyID0gQHRoaXNOdW1iZXJW
YWx1ZS5AY2FsbCh0aGlzKTtcbiIgXAogICAgInZhciBudW1iZXJGb3JtYXQgPSBuZXcgQE51bWJl
ckZvcm1hdChAYXJndW1lbnQoMCksIEBhcmd1bWVudCgxKSk7XG4iIFwKICAgICJyZXR1cm4gbnVt
YmVyRm9ybWF0LmZvcm1hdChudW1iZXIpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6
OkNvbnN0cnVjdEFiaWxpdHkgc19vYmplY3RDb25zdHJ1Y3RvckVudHJpZXNDb2RlQ29uc3RydWN0
QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBp
bnQgc19vYmplY3RDb25zdHJ1Y3RvckVudHJpZXNDb2RlTGVuZ3RoID0gMzc5OwpzdGF0aWMgY29u
c3QgSlNDOjpJbnRyaW5zaWMgc19vYmplY3RDb25zdHJ1Y3RvckVudHJpZXNDb2RlSW50cmluc2lj
ID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19vYmplY3RDb25zdHJ1Y3RvckVudHJp
ZXNDb2RlID0KICAgICIoZnVuY3Rpb24gKG9iamVjdClcbiIgXAogICAgIntcbiIgXAogICAgIlwi
dXNlIHN0cmljdFwiO1xuIiBcCiAgICAidmFyIG9iaiA9IEB0b09iamVjdChvYmplY3QsIFwiT2Jq
ZWN0LmVudHJpZXMgcmVxdWlyZXMgdGhhdCBpbnB1dCBwYXJhbWV0ZXIgbm90IGJlIG51bGwgb3Ig
dW5kZWZpbmVkXCIpO1xuIiBcCiAgICAidmFyIG5hbWVzID0gQGdldE93blByb3BlcnR5TmFtZXMo
b2JqKTtcbiIgXAogICAgInZhciBwcm9wZXJ0aWVzID0gW107XG4iIFwKICAgICJmb3IgKHZhciBp
ID0gMCwgbGVuZ3RoID0gbmFtZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiIgXAogICAg
IiB2YXIgbmFtZSA9IG5hbWVzW2ldO1xuIiBcCiAgICAiIGlmIChAcHJvcGVydHlJc0VudW1lcmFi
bGUob2JqLCBuYW1lKSlcbiIgXAogICAgIiAgcHJvcGVydGllcy5AcHVzaChbbmFtZSwgb2JqW25h
bWVdXSk7XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1cm4gcHJvcGVydGllcztcbiIgXAogICAg
In0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZUNvbnN0cnVj
dG9yQWxsQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5v
dENvbnN0cnVjdDsKY29uc3QgaW50IHNfcHJvbWlzZUNvbnN0cnVjdG9yQWxsQ29kZUxlbmd0aCA9
IDEwOTU7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VDb25zdHJ1Y3RvckFs
bENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VD
b25zdHJ1Y3RvckFsbENvZGUgPQogICAgIihmdW5jdGlvbiAoaXRlcmFibGUpXG4iIFwKICAgICJ7
XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlmICghQGlzT2JqZWN0KHRoaXMp
KVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcInx0aGlzfCBpcyBub3QgYSBvYmplY3RcIik7
XG4iIFwKICAgICJ2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHko
dGhpcyk7XG4iIFwKICAgICJ2YXIgdmFsdWVzID0gW107XG4iIFwKICAgICJ2YXIgaW5kZXggPSAw
O1xuIiBcCiAgICAidmFyIHJlbWFpbmluZ0VsZW1lbnRzQ291bnQgPSAxO1xuIiBcCiAgICAiZnVu
Y3Rpb24gbmV3UmVzb2x2ZUVsZW1lbnQoaW5kZXgpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgdmFy
IGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiIgXAogICAgIiByZXR1cm4gZnVuY3Rpb24gQHJlc29s
dmUoYXJndW1lbnQpXG4iIFwKICAgICIge1xuIiBcCiAgICAiICBpZiAoYWxyZWFkeUNhbGxlZClc
biIgXAogICAgIiAgIHJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAiICBhbHJlYWR5Q2FsbGVk
ID0gdHJ1ZTtcbiIgXAogICAgIiAgQHB1dEJ5VmFsRGlyZWN0KHZhbHVlcywgaW5kZXgsIGFyZ3Vt
ZW50KTtcbiIgXAogICAgIiAgLS1yZW1haW5pbmdFbGVtZW50c0NvdW50O1xuIiBcCiAgICAiICBp
ZiAocmVtYWluaW5nRWxlbWVudHNDb3VudCA9PT0gMClcbiIgXAogICAgIiAgIHJldHVybiBwcm9t
aXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB2YWx1ZXMpO1xuIiBcCiAg
ICAiICByZXR1cm4gQHVuZGVmaW5lZDtcbiIgXAogICAgIiB9XG4iIFwKICAgICJ9XG4iIFwKICAg
ICJ0cnkge1xuIiBcCiAgICAiIGZvciAodmFyIHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4iIFwKICAg
ICIgIEBwdXRCeVZhbERpcmVjdCh2YWx1ZXMsIGluZGV4LCBAdW5kZWZpbmVkKTtcbiIgXAogICAg
IiAgdmFyIG5leHRQcm9taXNlID0gdGhpcy5yZXNvbHZlKHZhbHVlKTtcbiIgXAogICAgIiAgdmFy
IHJlc29sdmVFbGVtZW50ID0gbmV3UmVzb2x2ZUVsZW1lbnQoaW5kZXgpO1xuIiBcCiAgICAiICAr
K3JlbWFpbmluZ0VsZW1lbnRzQ291bnQ7XG4iIFwKICAgICIgIG5leHRQcm9taXNlLnRoZW4ocmVz
b2x2ZUVsZW1lbnQsIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QpO1xuIiBcCiAgICAiICArK2lu
ZGV4O1xuIiBcCiAgICAiIH1cbiIgXAogICAgIiAtLXJlbWFpbmluZ0VsZW1lbnRzQ291bnQ7XG4i
IFwKICAgICIgaWYgKHJlbWFpbmluZ0VsZW1lbnRzQ291bnQgPT09IDApXG4iIFwKICAgICIgIHBy
b21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHZhbHVlcyk7XG4iIFwK
ICAgICJ9IGNhdGNoIChlcnJvcikge1xuIiBcCiAgICAiIHByb21pc2VDYXBhYmlsaXR5LkByZWpl
Y3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJyb3IpO1xuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJu
IHByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlQ29uc3RydWN0b3JSYWNlQ29kZUNvbnN0cnVj
dEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3Qg
aW50IHNfcHJvbWlzZUNvbnN0cnVjdG9yUmFjZUNvZGVMZW5ndGggPSA0MjM7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VDb25zdHJ1Y3RvclJhY2VDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9taXNlQ29uc3RydWN0b3JSYWNlQ29k
ZSA9CiAgICAiKGZ1bmN0aW9uIChpdGVyYWJsZSlcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNl
IHN0cmljdFwiO1xuIiBcCiAgICAiaWYgKCFAaXNPYmplY3QodGhpcykpXG4iIFwKICAgICIgQHRo
cm93VHlwZUVycm9yKFwifHRoaXN8IGlzIG5vdCBhIG9iamVjdFwiKTtcbiIgXAogICAgInZhciBw
cm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiIgXAogICAg
InRyeSB7XG4iIFwKICAgICIgZm9yICh2YXIgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiIgXAogICAg
IiAgdmFyIG5leHRQcm9taXNlID0gdGhpcy5yZXNvbHZlKHZhbHVlKTtcbiIgXAogICAgIiAgbmV4
dFByb21pc2UudGhlbihwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSwgcHJvbWlzZUNhcGFiaWxp
dHkuQHJlamVjdCk7XG4iIFwKICAgICIgfVxuIiBcCiAgICAifSBjYXRjaCAoZXJyb3IpIHtcbiIg
XAogICAgIiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGVycm9y
KTtcbiIgXAogICAgIn1cbiIgXAogICAgInJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlz
ZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJv
bWlzZUNvbnN0cnVjdG9yUmVqZWN0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfcHJvbWlzZUNvbnN0cnVjdG9y
UmVqZWN0Q29kZUxlbmd0aCA9IDI0NTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfcHJv
bWlzZUNvbnN0cnVjdG9yUmVqZWN0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNv
bnN0IGNoYXIqIHNfcHJvbWlzZUNvbnN0cnVjdG9yUmVqZWN0Q29kZSA9CiAgICAiKGZ1bmN0aW9u
IChyZWFzb24pXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAg
ImlmICghQGlzT2JqZWN0KHRoaXMpKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcInx0aGlz
fCBpcyBub3QgYSBvYmplY3RcIik7XG4iIFwKICAgICJ2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBA
bmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4iIFwKICAgICJwcm9taXNlQ2FwYWJpbGl0eS5A
cmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIHJlYXNvbik7XG4iIFwKICAgICJyZXR1cm4gcHJvbWlz
ZUNhcGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX3Byb21pc2VDb25zdHJ1Y3RvclJlc29sdmVDb2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQg
c19wcm9taXNlQ29uc3RydWN0b3JSZXNvbHZlQ29kZUxlbmd0aCA9IDM2MjsKc3RhdGljIGNvbnN0
IEpTQzo6SW50cmluc2ljIHNfcHJvbWlzZUNvbnN0cnVjdG9yUmVzb2x2ZUNvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VDb25zdHJ1Y3RvclJlc29s
dmVDb2RlID0KICAgICIoZnVuY3Rpb24gKHZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoIUBpc09iamVjdCh0aGlzKSlcbiIgXAogICAgIiBA
dGhyb3dUeXBlRXJyb3IoXCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0XCIpO1xuIiBcCiAgICAiaWYg
KEBpc1Byb21pc2UodmFsdWUpKSB7XG4iIFwKICAgICIgdmFyIHZhbHVlQ29uc3RydWN0b3IgPSB2
YWx1ZS5jb25zdHJ1Y3RvcjtcbiIgXAogICAgIiBpZiAodmFsdWVDb25zdHJ1Y3RvciA9PT0gdGhp
cylcbiIgXAogICAgIiAgcmV0dXJuIHZhbHVlO1xuIiBcCiAgICAifVxuIiBcCiAgICAidmFyIHBy
b21pc2VDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuIiBcCiAgICAi
cHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgdmFsdWUpO1xuIiBc
CiAgICAicmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlO1xuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlT3BlcmF0aW9uc0lzUHJv
bWlzZUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RD
b25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRpb25zSXNQcm9taXNlQ29kZUxlbmd0
aCA9IDkzOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19wcm9taXNlT3BlcmF0aW9uc0lz
UHJvbWlzZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3By
b21pc2VPcGVyYXRpb25zSXNQcm9taXNlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChwcm9taXNlKVxu
IiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJyZXR1cm4gQGlz
T2JqZWN0KHByb21pc2UpICYmICEhcHJvbWlzZS5AcHJvbWlzZVN0YXRlO1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlT3BlcmF0aW9uc05l
d1Byb21pc2VSZWFjdGlvbkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRpb25zTmV3UHJv
bWlzZVJlYWN0aW9uQ29kZUxlbmd0aCA9IDE2MTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfcHJvbWlzZU9wZXJhdGlvbnNOZXdQcm9taXNlUmVhY3Rpb25Db2RlSW50cmluc2ljID0gSlND
OjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9taXNlT3BlcmF0aW9uc05ld1Byb21pc2VS
ZWFjdGlvbkNvZGUgPQogICAgIihmdW5jdGlvbiAoY2FwYWJpbGl0eSwgb25GdWxmaWxsZWQsIG9u
UmVqZWN0ZWQpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAg
InJldHVybiB7XG4iIFwKICAgICIgQGNhcGFiaWxpdGllczogY2FwYWJpbGl0eSxcbiIgXAogICAg
IiBAb25GdWxmaWxsZWQ6IG9uRnVsZmlsbGVkLFxuIiBcCiAgICAiIEBvblJlamVjdGVkOiBvblJl
amVjdGVkLFxuIiBcCiAgICAifTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZU9wZXJhdGlvbnNOZXdQcm9taXNlQ2FwYWJpbGl0eUNvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX3Byb21pc2VPcGVyYXRpb25zTmV3UHJvbWlzZUNhcGFiaWxpdHlDb2RlTGVu
Z3RoID0gODk5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19wcm9taXNlT3BlcmF0aW9u
c05ld1Byb21pc2VDYXBhYmlsaXR5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNv
bnN0IGNoYXIqIHNfcHJvbWlzZU9wZXJhdGlvbnNOZXdQcm9taXNlQ2FwYWJpbGl0eUNvZGUgPQog
ICAgIihmdW5jdGlvbiAoY29uc3RydWN0b3IpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBz
dHJpY3RcIjtcbiIgXAogICAgImlmICghQGlzQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKVxuIiBc
CiAgICAiIEB0aHJvd1R5cGVFcnJvcihcInByb21pc2UgY2FwYWJpbGl0eSByZXF1aXJlcyBhIGNv
bnN0cnVjdG9yIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAidmFyIHByb21pc2VDYXBhYmlsaXR5ID0g
e1xuIiBcCiAgICAiIEBwcm9taXNlOiBAdW5kZWZpbmVkLFxuIiBcCiAgICAiIEByZXNvbHZlOiBA
dW5kZWZpbmVkLFxuIiBcCiAgICAiIEByZWplY3Q6IEB1bmRlZmluZWRcbiIgXAogICAgIn07XG4i
IFwKICAgICJmdW5jdGlvbiBAZXhlY3V0b3IocmVzb2x2ZSwgcmVqZWN0KVxuIiBcCiAgICAie1xu
IiBcCiAgICAiIGlmIChwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSAhPT0gQHVuZGVmaW5lZClc
biIgXAogICAgIiAgQHRocm93VHlwZUVycm9yKFwicmVzb2x2ZSBmdW5jdGlvbiBpcyBhbHJlYWR5
IHNldFwiKTtcbiIgXAogICAgIiBpZiAocHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdCAhPT0gQHVu
ZGVmaW5lZClcbiIgXAogICAgIiAgQHRocm93VHlwZUVycm9yKFwicmVqZWN0IGZ1bmN0aW9uIGlz
IGFscmVhZHkgc2V0XCIpO1xuIiBcCiAgICAiIHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlID0g
cmVzb2x2ZTtcbiIgXAogICAgIiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0ID0gcmVqZWN0O1xu
IiBcCiAgICAifVxuIiBcCiAgICAidmFyIHByb21pc2UgPSBuZXcgY29uc3RydWN0b3IoQGV4ZWN1
dG9yKTtcbiIgXAogICAgImlmICh0eXBlb2YgcHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUgIT09
IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJleGVjdXRvciBkaWQg
bm90IHRha2UgYSByZXNvbHZlIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiaWYgKHR5cGVvZiBwcm9t
aXNlQ2FwYWJpbGl0eS5AcmVqZWN0ICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgQHRocm93
VHlwZUVycm9yKFwiZXhlY3V0b3IgZGlkIG5vdCB0YWtlIGEgcmVqZWN0IGZ1bmN0aW9uXCIpO1xu
IiBcCiAgICAicHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2UgPSBwcm9taXNlO1xuIiBcCiAgICAi
cmV0dXJuIHByb21pc2VDYXBhYmlsaXR5O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6
OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9taXNlT3BlcmF0aW9uc05ld0hhbmRsZWRSZWplY3RlZFBy
b21pc2VDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc19wcm9taXNlT3BlcmF0aW9uc05ld0hhbmRsZWRSZWplY3Rl
ZFByb21pc2VDb2RlTGVuZ3RoID0gMTEyOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19w
cm9taXNlT3BlcmF0aW9uc05ld0hhbmRsZWRSZWplY3RlZFByb21pc2VDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9taXNlT3BlcmF0aW9uc05ld0hhbmRs
ZWRSZWplY3RlZFByb21pc2VDb2RlID0KICAgICIoZnVuY3Rpb24gKGVycm9yKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAibGV0IHByb21pc2UgPSBAUHJvbWlzZS5AcmVqZWN0KGVycm9yKTtcbiIgXAog
ICAgInByb21pc2UuQHByb21pc2VJc0hhbmRsZWQgPSB0cnVlO1xuIiBcCiAgICAicmV0dXJuIHBy
b21pc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X3Byb21pc2VPcGVyYXRpb25zVHJpZ2dlclByb21pc2VSZWFjdGlvbnNDb2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQg
c19wcm9taXNlT3BlcmF0aW9uc1RyaWdnZXJQcm9taXNlUmVhY3Rpb25zQ29kZUxlbmd0aCA9IDIw
MjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfcHJvbWlzZU9wZXJhdGlvbnNUcmlnZ2Vy
UHJvbWlzZVJlYWN0aW9uc0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX3Byb21pc2VPcGVyYXRpb25zVHJpZ2dlclByb21pc2VSZWFjdGlvbnNDb2RlID0KICAg
ICIoZnVuY3Rpb24gKHN0YXRlLCByZWFjdGlvbnMsIGFyZ3VtZW50KVxuIiBcCiAgICAie1xuIiBc
CiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0
aCA9IHJlYWN0aW9ucy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KVxuIiBcCiAgICAi
IEBlbnF1ZXVlSm9iKEBwcm9taXNlUmVhY3Rpb25Kb2IsIFtzdGF0ZSwgcmVhY3Rpb25zW2luZGV4
XSwgYXJndW1lbnRdKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5IHNfcHJvbWlzZU9wZXJhdGlvbnNSZWplY3RQcm9taXNlQ29kZUNvbnN0cnVjdEFiaWxp
dHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNf
cHJvbWlzZU9wZXJhdGlvbnNSZWplY3RQcm9taXNlQ29kZUxlbmd0aCA9IDQ0NjsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfcHJvbWlzZU9wZXJhdGlvbnNSZWplY3RQcm9taXNlQ29kZUlu
dHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlzZU9wZXJhdGlv
bnNSZWplY3RQcm9taXNlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChwcm9taXNlLCByZWFzb24pXG4i
IFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciByZWFjdGlv
bnMgPSBwcm9taXNlLkBwcm9taXNlUmVhY3Rpb25zO1xuIiBcCiAgICAicHJvbWlzZS5AcHJvbWlz
ZVJlc3VsdCA9IHJlYXNvbjtcbiIgXAogICAgInByb21pc2UuQHByb21pc2VSZWFjdGlvbnMgPSBA
dW5kZWZpbmVkO1xuIiBcCiAgICAicHJvbWlzZS5AcHJvbWlzZVN0YXRlID0gQHByb21pc2VTdGF0
ZVJlamVjdGVkO1xuIiBcCiAgICAiQEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5wcm9taXNlUmVq
ZWN0ZWQocHJvbWlzZSwgcmVhc29uLCByZWFjdGlvbnMpO1xuIiBcCiAgICAiaWYgKCFwcm9taXNl
LkBwcm9taXNlSXNIYW5kbGVkKVxuIiBcCiAgICAiIEBob3N0UHJvbWlzZVJlamVjdGlvblRyYWNr
ZXIocHJvbWlzZSwgQHByb21pc2VSZWplY3Rpb25SZWplY3QpO1xuIiBcCiAgICAiQHRyaWdnZXJQ
cm9taXNlUmVhY3Rpb25zKEBwcm9taXNlU3RhdGVSZWplY3RlZCwgcmVhY3Rpb25zLCByZWFzb24p
O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19wcm9t
aXNlT3BlcmF0aW9uc0Z1bGZpbGxQcm9taXNlQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfcHJvbWlzZU9wZXJh
dGlvbnNGdWxmaWxsUHJvbWlzZUNvZGVMZW5ndGggPSAzNDg7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3Byb21pc2VPcGVyYXRpb25zRnVsZmlsbFByb21pc2VDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9taXNlT3BlcmF0aW9uc0Z1bGZpbGxQ
cm9taXNlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChwcm9taXNlLCB2YWx1ZSlcbiIgXAogICAgIntc
biIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAidmFyIHJlYWN0aW9ucyA9IHByb21p
c2UuQHByb21pc2VSZWFjdGlvbnM7XG4iIFwKICAgICJwcm9taXNlLkBwcm9taXNlUmVzdWx0ID0g
dmFsdWU7XG4iIFwKICAgICJwcm9taXNlLkBwcm9taXNlUmVhY3Rpb25zID0gQHVuZGVmaW5lZDtc
biIgXAogICAgInByb21pc2UuQHByb21pc2VTdGF0ZSA9IEBwcm9taXNlU3RhdGVGdWxmaWxsZWQ7
XG4iIFwKICAgICJASW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLnByb21pc2VGdWxmaWxsZWQocHJv
bWlzZSwgdmFsdWUsIHJlYWN0aW9ucyk7XG4iIFwKICAgICJAdHJpZ2dlclByb21pc2VSZWFjdGlv
bnMoQHByb21pc2VTdGF0ZUZ1bGZpbGxlZCwgcmVhY3Rpb25zLCB2YWx1ZSk7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3Byb21pc2VPcGVyYXRpb25z
Q3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25zQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfcHJvbWlzZU9wZXJhdGlv
bnNDcmVhdGVSZXNvbHZpbmdGdW5jdGlvbnNDb2RlTGVuZ3RoID0gODA0OwpzdGF0aWMgY29uc3Qg
SlNDOjpJbnRyaW5zaWMgc19wcm9taXNlT3BlcmF0aW9uc0NyZWF0ZVJlc29sdmluZ0Z1bmN0aW9u
c0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VP
cGVyYXRpb25zQ3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25zQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChw
cm9taXNlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2
YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4iIFwKICAgICJmdW5jdGlvbiBAcmVzb2x2ZShy
ZXNvbHV0aW9uKSB7XG4iIFwKICAgICIgaWYgKGFscmVhZHlSZXNvbHZlZClcbiIgXAogICAgIiAg
cmV0dXJuIEB1bmRlZmluZWQ7XG4iIFwKICAgICIgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiIg
XAogICAgIiBpZiAocmVzb2x1dGlvbiA9PT0gcHJvbWlzZSlcbiIgXAogICAgIiAgcmV0dXJuIEBy
ZWplY3RQcm9taXNlKHByb21pc2UsIG5ldyBAVHlwZUVycm9yKFwiUmVzb2x2ZSBhIHByb21pc2Ug
d2l0aCBpdHNlbGZcIikpO1xuIiBcCiAgICAiIGlmICghQGlzT2JqZWN0KHJlc29sdXRpb24pKVxu
IiBcCiAgICAiICByZXR1cm4gQGZ1bGZpbGxQcm9taXNlKHByb21pc2UsIHJlc29sdXRpb24pO1xu
IiBcCiAgICAiIHZhciB0aGVuO1xuIiBcCiAgICAiIHRyeSB7XG4iIFwKICAgICIgIHRoZW4gPSBy
ZXNvbHV0aW9uLnRoZW47XG4iIFwKICAgICIgfSBjYXRjaCAoZXJyb3IpIHtcbiIgXAogICAgIiAg
cmV0dXJuIEByZWplY3RQcm9taXNlKHByb21pc2UsIGVycm9yKTtcbiIgXAogICAgIiB9XG4iIFwK
ICAgICIgaWYgKHR5cGVvZiB0aGVuICE9PSAnZnVuY3Rpb24nKVxuIiBcCiAgICAiICByZXR1cm4g
QGZ1bGZpbGxQcm9taXNlKHByb21pc2UsIHJlc29sdXRpb24pO1xuIiBcCiAgICAiIEBlbnF1ZXVl
Sm9iKEBwcm9taXNlUmVzb2x2ZVRoZW5hYmxlSm9iLCBbcHJvbWlzZSwgcmVzb2x1dGlvbiwgdGhl
bl0pO1xuIiBcCiAgICAiIHJldHVybiBAdW5kZWZpbmVkO1xuIiBcCiAgICAifVxuIiBcCiAgICAi
ZnVuY3Rpb24gQHJlamVjdChyZWFzb24pIHtcbiIgXAogICAgIiBpZiAoYWxyZWFkeVJlc29sdmVk
KVxuIiBcCiAgICAiICByZXR1cm4gQHVuZGVmaW5lZDtcbiIgXAogICAgIiBhbHJlYWR5UmVzb2x2
ZWQgPSB0cnVlO1xuIiBcCiAgICAiIHJldHVybiBAcmVqZWN0UHJvbWlzZShwcm9taXNlLCByZWFz
b24pO1xuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJuIHsgQHJlc29sdmUsIEByZWplY3QgfTtc
biIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlz
ZU9wZXJhdGlvbnNQcm9taXNlUmVhY3Rpb25Kb2JDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6
Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19wcm9taXNlT3Bl
cmF0aW9uc1Byb21pc2VSZWFjdGlvbkpvYkNvZGVMZW5ndGggPSAzODk7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX3Byb21pc2VPcGVyYXRpb25zUHJvbWlzZVJlYWN0aW9uSm9iQ29kZUlu
dHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlzZU9wZXJhdGlv
bnNQcm9taXNlUmVhY3Rpb25Kb2JDb2RlID0KICAgICIoZnVuY3Rpb24gKHN0YXRlLCByZWFjdGlv
biwgYXJndW1lbnQpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAog
ICAgInZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IHJlYWN0aW9uLkBjYXBhYmlsaXRpZXM7XG4iIFwK
ICAgICJ2YXIgcmVzdWx0O1xuIiBcCiAgICAidmFyIGhhbmRsZXIgPSAoc3RhdGUgPT09IEBwcm9t
aXNlU3RhdGVGdWxmaWxsZWQpID8gcmVhY3Rpb24uQG9uRnVsZmlsbGVkOiByZWFjdGlvbi5Ab25S
ZWplY3RlZDtcbiIgXAogICAgInRyeSB7XG4iIFwKICAgICIgcmVzdWx0ID0gaGFuZGxlcihhcmd1
bWVudCk7XG4iIFwKICAgICJ9IGNhdGNoIChlcnJvcikge1xuIiBcCiAgICAiIHJldHVybiBwcm9t
aXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGVycm9yKTtcbiIgXAogICAg
In1cbiIgXAogICAgInJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5k
ZWZpbmVkLCByZXN1bHQpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVj
dEFiaWxpdHkgc19wcm9taXNlT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlVGhlbmFibGVKb2JDb2Rl
Q29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0
Owpjb25zdCBpbnQgc19wcm9taXNlT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlVGhlbmFibGVKb2JD
b2RlTGVuZ3RoID0gMzA4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19wcm9taXNlT3Bl
cmF0aW9uc1Byb21pc2VSZXNvbHZlVGhlbmFibGVKb2JDb2RlSW50cmluc2ljID0gSlNDOjpOb0lu
dHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9taXNlT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlVGhl
bmFibGVKb2JDb2RlID0KICAgICIoZnVuY3Rpb24gKHByb21pc2VUb1Jlc29sdmUsIHRoZW5hYmxl
LCB0aGVuKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2
YXIgcmVzb2x2aW5nRnVuY3Rpb25zID0gQGNyZWF0ZVJlc29sdmluZ0Z1bmN0aW9ucyhwcm9taXNl
VG9SZXNvbHZlKTtcbiIgXAogICAgInRyeSB7XG4iIFwKICAgICIgcmV0dXJuIHRoZW4uQGNhbGwo
dGhlbmFibGUsIHJlc29sdmluZ0Z1bmN0aW9ucy5AcmVzb2x2ZSwgcmVzb2x2aW5nRnVuY3Rpb25z
LkByZWplY3QpO1xuIiBcCiAgICAifSBjYXRjaCAoZXJyb3IpIHtcbiIgXAogICAgIiByZXR1cm4g
cmVzb2x2aW5nRnVuY3Rpb25zLkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJyb3IpO1xuIiBc
CiAgICAifVxuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkg
c19wcm9taXNlT3BlcmF0aW9uc0luaXRpYWxpemVQcm9taXNlQ29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfcHJv
bWlzZU9wZXJhdGlvbnNJbml0aWFsaXplUHJvbWlzZUNvZGVMZW5ndGggPSA0NzM7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VPcGVyYXRpb25zSW5pdGlhbGl6ZVByb21pc2VD
b2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19wcm9taXNlT3Bl
cmF0aW9uc0luaXRpYWxpemVQcm9taXNlQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChleGVjdXRvcilc
biIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiaWYgKHR5cGVv
ZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJylcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJQ
cm9taXNlIGNvbnN0cnVjdG9yIHRha2VzIGEgZnVuY3Rpb24gYXJndW1lbnRcIik7XG4iIFwKICAg
ICJ0aGlzLkBwcm9taXNlU3RhdGUgPSBAcHJvbWlzZVN0YXRlUGVuZGluZztcbiIgXAogICAgInRo
aXMuQHByb21pc2VSZWFjdGlvbnMgPSBbXTtcbiIgXAogICAgInRoaXMuQHByb21pc2VJc0hhbmRs
ZWQgPSBmYWxzZTtcbiIgXAogICAgInZhciByZXNvbHZpbmdGdW5jdGlvbnMgPSBAY3JlYXRlUmVz
b2x2aW5nRnVuY3Rpb25zKHRoaXMpO1xuIiBcCiAgICAidHJ5IHtcbiIgXAogICAgIiBleGVjdXRv
cihyZXNvbHZpbmdGdW5jdGlvbnMuQHJlc29sdmUsIHJlc29sdmluZ0Z1bmN0aW9ucy5AcmVqZWN0
KTtcbiIgXAogICAgIn0gY2F0Y2ggKGVycm9yKSB7XG4iIFwKICAgICIgcmV0dXJuIHJlc29sdmlu
Z0Z1bmN0aW9ucy5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGVycm9yKTtcbiIgXAogICAgIn1c
biIgXAogICAgInJldHVybiB0aGlzO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNv
bnN0cnVjdEFiaWxpdHkgc19wcm9taXNlUHJvdG90eXBlQ2F0Y2hDb2RlQ29uc3RydWN0QWJpbGl0
eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19w
cm9taXNlUHJvdG90eXBlQ2F0Y2hDb2RlTGVuZ3RoID0gODQ7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3Byb21pc2VQcm90b3R5cGVDYXRjaENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50
cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VQcm90b3R5cGVDYXRjaENvZGUgPQogICAgIihm
dW5jdGlvbiAob25SZWplY3RlZClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwi
O1xuIiBcCiAgICAicmV0dXJuIHRoaXMudGhlbihAdW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZVBy
b3RvdHlwZVRoZW5Db2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19wcm9taXNlUHJvdG90eXBlVGhlbkNvZGVMZW5n
dGggPSA5MzI7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VQcm90b3R5cGVU
aGVuQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlz
ZVByb3RvdHlwZVRoZW5Db2RlID0KICAgICIoZnVuY3Rpb24gKG9uRnVsZmlsbGVkLCBvblJlamVj
dGVkKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAo
IUBpc1Byb21pc2UodGhpcykpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwifHRoaXN8IGlz
IG5vdCBhIG9iamVjdFwiKTtcbiIgXAogICAgInZhciBjb25zdHJ1Y3RvciA9IEBzcGVjaWVzQ29u
c3RydWN0b3IodGhpcywgQFByb21pc2UpO1xuIiBcCiAgICAidmFyIHJlc3VsdENhcGFiaWxpdHkg
PSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoY29uc3RydWN0b3IpO1xuIiBcCiAgICAiaWYgKHR5cGVv
ZiBvbkZ1bGZpbGxlZCAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiIG9uRnVsZmlsbGVkID0g
ZnVuY3Rpb24gKGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudDsgfTtcbiIgXAogICAgImlmICh0
eXBlb2Ygb25SZWplY3RlZCAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiIG9uUmVqZWN0ZWQg
PSBmdW5jdGlvbiAoYXJndW1lbnQpIHsgdGhyb3cgYXJndW1lbnQ7IH07XG4iIFwKICAgICJ2YXIg
cmVhY3Rpb24gPSBAbmV3UHJvbWlzZVJlYWN0aW9uKHJlc3VsdENhcGFiaWxpdHksIG9uRnVsZmls
bGVkLCBvblJlamVjdGVkKTtcbiIgXAogICAgInZhciBzdGF0ZSA9IHRoaXMuQHByb21pc2VTdGF0
ZTtcbiIgXAogICAgImlmIChzdGF0ZSA9PT0gQHByb21pc2VTdGF0ZVBlbmRpbmcpXG4iIFwKICAg
ICIgQHB1dEJ5VmFsRGlyZWN0KHRoaXMuQHByb21pc2VSZWFjdGlvbnMsIHRoaXMuQHByb21pc2VS
ZWFjdGlvbnMubGVuZ3RoLCByZWFjdGlvbik7XG4iIFwKICAgICJlbHNlIHtcbiIgXAogICAgIiBp
ZiAoc3RhdGUgPT09IEBwcm9taXNlU3RhdGVSZWplY3RlZCAmJiAhdGhpcy5AcHJvbWlzZUlzSGFu
ZGxlZClcbiIgXAogICAgIiAgQGhvc3RQcm9taXNlUmVqZWN0aW9uVHJhY2tlcih0aGlzLCBAcHJv
bWlzZVJlamVjdGlvbkhhbmRsZSk7XG4iIFwKICAgICIgQGVucXVldWVKb2IoQHByb21pc2VSZWFj
dGlvbkpvYiwgW3N0YXRlLCByZWFjdGlvbiwgdGhpcy5AcHJvbWlzZVJlc3VsdF0pO1xuIiBcCiAg
ICAifVxuIiBcCiAgICAidGhpcy5AcHJvbWlzZUlzSGFuZGxlZCA9IHRydWU7XG4iIFwKICAgICJy
ZXR1cm4gcmVzdWx0Q2FwYWJpbGl0eS5AcHJvbWlzZTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29u
c3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZVByb3RvdHlwZUZpbmFsbHlDb2RlQ29u
c3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpj
b25zdCBpbnQgc19wcm9taXNlUHJvdG90eXBlRmluYWxseUNvZGVMZW5ndGggPSA1MDE7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Byb21pc2VQcm90b3R5cGVGaW5hbGx5Q29kZUludHJp
bnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlzZVByb3RvdHlwZUZp
bmFsbHlDb2RlID0KICAgICIoZnVuY3Rpb24gKG9uRmluYWxseSlcbiIgXAogICAgIntcbiIgXAog
ICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiaWYgKCFAaXNQcm9taXNlKHRoaXMpKVxuIiBc
CiAgICAiIEB0aHJvd1R5cGVFcnJvcihcInx0aGlzfCBpcyBub3QgYSBQcm9taXNlXCIpO1xuIiBc
CiAgICAiY29uc3QgY29uc3RydWN0b3IgPSBAc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIEBQcm9t
aXNlKTtcbiIgXAogICAgIkBhc3NlcnQoQGlzQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKTtcbiIg
XAogICAgImxldCB0aGVuRmluYWxseTtcbiIgXAogICAgImxldCBjYXRjaEZpbmFsbHk7XG4iIFwK
ICAgICJpZiAodHlwZW9mIG9uRmluYWxseSAhPT0gXCJmdW5jdGlvblwiKSB7XG4iIFwKICAgICIg
dGhlbkZpbmFsbHkgPSBvbkZpbmFsbHk7XG4iIFwKICAgICIgY2F0Y2hGaW5hbGx5ID0gb25GaW5h
bGx5O1xuIiBcCiAgICAifSBlbHNlIHtcbiIgXAogICAgIiB0aGVuRmluYWxseSA9IEBnZXRUaGVu
RmluYWxseShvbkZpbmFsbHksIGNvbnN0cnVjdG9yKTtcbiIgXAogICAgIiBjYXRjaEZpbmFsbHkg
PSBAZ2V0Q2F0Y2hGaW5hbGx5KG9uRmluYWxseSwgY29uc3RydWN0b3IpO1xuIiBcCiAgICAifVxu
IiBcCiAgICAicmV0dXJuIHRoaXMudGhlbih0aGVuRmluYWxseSwgY2F0Y2hGaW5hbGx5KTtcbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcHJvbWlzZVBy
b3RvdHlwZUdldFRoZW5GaW5hbGx5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfcHJvbWlzZVByb3RvdHlwZUdl
dFRoZW5GaW5hbGx5Q29kZUxlbmd0aCA9IDQzNzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfcHJvbWlzZVByb3RvdHlwZUdldFRoZW5GaW5hbGx5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfcHJvbWlzZVByb3RvdHlwZUdldFRoZW5GaW5hbGx5Q29k
ZSA9CiAgICAiKGZ1bmN0aW9uIChvbkZpbmFsbHksIGNvbnN0cnVjdG9yKVxuIiBcCiAgICAie1xu
IiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJyZXR1cm4gZnVuY3Rpb24odmFsdWUp
XG4iIFwKICAgICJ7XG4iIFwKICAgICIgQGFzc2VydCh0eXBlb2Ygb25GaW5hbGx5ID09PSBcImZ1
bmN0aW9uXCIpO1xuIiBcCiAgICAiIGNvbnN0IHJlc3VsdCA9IG9uRmluYWxseSgpO1xuIiBcCiAg
ICAiIEBhc3NlcnQoQGlzQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKTtcbiIgXAogICAgIiBjb25z
dCByZXN1bHRDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KGNvbnN0cnVjdG9yKTtc
biIgXAogICAgIiByZXN1bHRDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHJl
c3VsdCk7XG4iIFwKICAgICIgY29uc3QgcHJvbWlzZSA9IHJlc3VsdENhcGFiaWxpdHkuQHByb21p
c2U7XG4iIFwKICAgICIgY29uc3QgdmFsdWVUaHVuayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZh
bHVlOyB9O1xuIiBcCiAgICAiIHJldHVybiBwcm9taXNlLnRoZW4odmFsdWVUaHVuayk7XG4iIFwK
ICAgICJ9XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X3Byb21pc2VQcm90b3R5cGVHZXRDYXRjaEZpbmFsbHlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19wcm9taXNl
UHJvdG90eXBlR2V0Q2F0Y2hGaW5hbGx5Q29kZUxlbmd0aCA9IDQzMjsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfcHJvbWlzZVByb3RvdHlwZUdldENhdGNoRmluYWxseUNvZGVJbnRyaW5z
aWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3Byb21pc2VQcm90b3R5cGVHZXRD
YXRjaEZpbmFsbHlDb2RlID0KICAgICIoZnVuY3Rpb24gKG9uRmluYWxseSwgY29uc3RydWN0b3Ip
XG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiBm
dW5jdGlvbihyZWFzb24pXG4iIFwKICAgICJ7XG4iIFwKICAgICIgQGFzc2VydCh0eXBlb2Ygb25G
aW5hbGx5ID09PSBcImZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiIGNvbnN0IHJlc3VsdCA9IG9uRmlu
YWxseSgpO1xuIiBcCiAgICAiIEBhc3NlcnQoQGlzQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKTtc
biIgXAogICAgIiBjb25zdCByZXN1bHRDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5
KGNvbnN0cnVjdG9yKTtcbiIgXAogICAgIiByZXN1bHRDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxs
KEB1bmRlZmluZWQsIHJlc3VsdCk7XG4iIFwKICAgICIgY29uc3QgcHJvbWlzZSA9IHJlc3VsdENh
cGFiaWxpdHkuQHByb21pc2U7XG4iIFwKICAgICIgY29uc3QgdGhyb3dlciA9IGZ1bmN0aW9uICgp
IHsgdGhyb3cgcmVhc29uOyB9O1xuIiBcCiAgICAiIHJldHVybiBwcm9taXNlLnRoZW4odGhyb3dl
cik7XG4iIFwKICAgICJ9XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0
QWJpbGl0eSBzX3JlZmxlY3RPYmplY3RBcHBseUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpD
b25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3JlZmxlY3RPYmpl
Y3RBcHBseUNvZGVMZW5ndGggPSAzMzY7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3Jl
ZmxlY3RPYmplY3RBcHBseUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX3JlZmxlY3RPYmplY3RBcHBseUNvZGUgPQogICAgIihmdW5jdGlvbiAodGFyZ2V0LCB0
aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBz
dHJpY3RcIjtcbiIgXAogICAgImlmICh0eXBlb2YgdGFyZ2V0ICE9PSBcImZ1bmN0aW9uXCIpXG4i
IFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiUmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmly
c3QgYXJndW1lbnQgYmUgYSBmdW5jdGlvblwiKTtcbiIgXAogICAgImlmICghQGlzT2JqZWN0KGFy
Z3VtZW50c0xpc3QpKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlJlZmxlY3QuYXBwbHkg
cmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJlIGFuIG9iamVjdFwiKTtcbiIgXAogICAgInJl
dHVybiB0YXJnZXQuQGFwcGx5KHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCk7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3JlZmxlY3RPYmplY3RE
ZWxldGVQcm9wZXJ0eUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3JlZmxlY3RPYmplY3REZWxldGVQcm9wZXJ0
eUNvZGVMZW5ndGggPSAxODE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3JlZmxlY3RP
YmplY3REZWxldGVQcm9wZXJ0eUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX3JlZmxlY3RPYmplY3REZWxldGVQcm9wZXJ0eUNvZGUgPQogICAgIihmdW5jdGlv
biAodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbiIgXAogICAgIntcbiIgXAogICAgImlmICghQGlzT2Jq
ZWN0KHRhcmdldCkpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiUmVmbGVjdC5kZWxldGVQ
cm9wZXJ0eSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0XCIpO1xuIiBc
CiAgICAicmV0dXJuIGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19yZWZsZWN0T2JqZWN0SGFzQ29kZUNv
bnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsK
Y29uc3QgaW50IHNfcmVmbGVjdE9iamVjdEhhc0NvZGVMZW5ndGggPSAxNzk7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX3JlZmxlY3RPYmplY3RIYXNDb2RlSW50cmluc2ljID0gSlNDOjpO
b0ludHJpbnNpYzsKY29uc3QgY2hhciogc19yZWZsZWN0T2JqZWN0SGFzQ29kZSA9CiAgICAiKGZ1
bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5KVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICJpZiAoIUBpc09iamVjdCh0YXJnZXQpKVxuIiBcCiAgICAiIEB0
aHJvd1R5cGVFcnJvcihcIlJlZmxlY3QuaGFzIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBi
ZSBhbiBvYmplY3RcIik7XG4iIFwKICAgICJyZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xu
IiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19yZWdFeHBQ
cm90b3R5cGVBZHZhbmNlU3RyaW5nSW5kZXhDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5
cGVBZHZhbmNlU3RyaW5nSW5kZXhDb2RlTGVuZ3RoID0gMzU1OwpzdGF0aWMgY29uc3QgSlNDOjpJ
bnRyaW5zaWMgc19yZWdFeHBQcm90b3R5cGVBZHZhbmNlU3RyaW5nSW5kZXhDb2RlSW50cmluc2lj
ID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19yZWdFeHBQcm90b3R5cGVBZHZhbmNl
U3RyaW5nSW5kZXhDb2RlID0KICAgICIoZnVuY3Rpb24gKHN0cmluZywgaW5kZXgsIHVuaWNvZGUp
XG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlmICghdW5p
Y29kZSlcbiIgXAogICAgIiByZXR1cm4gaW5kZXggKyAxO1xuIiBcCiAgICAiaWYgKGluZGV4ICsg
MSA+PSBzdHJpbmcubGVuZ3RoKVxuIiBcCiAgICAiIHJldHVybiBpbmRleCArIDE7XG4iIFwKICAg
ICJsZXQgZmlyc3QgPSBzdHJpbmcuQGNoYXJDb2RlQXQoaW5kZXgpO1xuIiBcCiAgICAiaWYgKGZp
cnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGKVxuIiBcCiAgICAiIHJldHVybiBpbmRleCAr
IDE7XG4iIFwKICAgICJsZXQgc2Vjb25kID0gc3RyaW5nLkBjaGFyQ29kZUF0KGluZGV4ICsgMSk7
XG4iIFwKICAgICJpZiAoc2Vjb25kIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRilcbiIgXAog
ICAgIiByZXR1cm4gaW5kZXggKyAxO1xuIiBcCiAgICAicmV0dXJuIGluZGV4ICsgMjtcbiIgXAog
ICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfcmVnRXhwUHJvdG90
eXBlUmVnRXhwRXhlY0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3JlZ0V4cFByb3RvdHlwZVJlZ0V4cEV4ZWND
b2RlTGVuZ3RoID0gMzc5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19yZWdFeHBQcm90
b3R5cGVSZWdFeHBFeGVjQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNo
YXIqIHNfcmVnRXhwUHJvdG90eXBlUmVnRXhwRXhlY0NvZGUgPQogICAgIihmdW5jdGlvbiAocmVn
ZXhwLCBzdHIpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAg
ImxldCBleGVjID0gcmVnZXhwLmV4ZWM7XG4iIFwKICAgICJsZXQgYnVpbHRpbkV4ZWMgPSBAcmVn
RXhwQnVpbHRpbkV4ZWM7XG4iIFwKICAgICJpZiAoZXhlYyAhPT0gYnVpbHRpbkV4ZWMgJiYgdHlw
ZW9mIGV4ZWMgPT09IFwiZnVuY3Rpb25cIikge1xuIiBcCiAgICAiIGxldCByZXN1bHQgPSBleGVj
LkBjYWxsKHJlZ2V4cCwgc3RyKTtcbiIgXAogICAgIiBpZiAocmVzdWx0ICE9PSBudWxsICYmICFA
aXNPYmplY3QocmVzdWx0KSlcbiIgXAogICAgIiAgQHRocm93VHlwZUVycm9yKFwiVGhlIHJlc3Vs
dCBvZiBhIFJlZ0V4cCBleGVjIG11c3QgYmUgbnVsbCBvciBhbiBvYmplY3RcIik7XG4iIFwKICAg
ICIgcmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn1cbiIgXAogICAgInJldHVybiBidWlsdGluRXhl
Yy5AY2FsbChyZWdleHAsIHN0cik7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX3JlZ0V4cFByb3RvdHlwZUhhc09ic2VydmFibGVTaWRlRWZmZWN0c0Zv
clJlZ0V4cE1hdGNoQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6
OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfcmVnRXhwUHJvdG90eXBlSGFzT2JzZXJ2YWJs
ZVNpZGVFZmZlY3RzRm9yUmVnRXhwTWF0Y2hDb2RlTGVuZ3RoID0gMzgyOwpzdGF0aWMgY29uc3Qg
SlNDOjpJbnRyaW5zaWMgc19yZWdFeHBQcm90b3R5cGVIYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNG
b3JSZWdFeHBNYXRjaENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFy
KiBzX3JlZ0V4cFByb3RvdHlwZUhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclJlZ0V4cE1hdGNo
Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChyZWdleHApIHtcbiIgXAogICAgImxldCByZWdleHBFeGVj
ID0gQHRyeUdldEJ5SWQocmVnZXhwLCBcImV4ZWNcIik7XG4iIFwKICAgICJpZiAocmVnZXhwRXhl
YyAhPT0gQHJlZ0V4cEJ1aWx0aW5FeGVjKVxuIiBcCiAgICAiIHJldHVybiB0cnVlO1xuIiBcCiAg
ICAibGV0IHJlZ2V4cEdsb2JhbCA9IEB0cnlHZXRCeUlkKHJlZ2V4cCwgXCJnbG9iYWxcIik7XG4i
IFwKICAgICJpZiAocmVnZXhwR2xvYmFsICE9PSBAcmVnRXhwUHJvdG9HbG9iYWxHZXR0ZXIpXG4i
IFwKICAgICIgcmV0dXJuIHRydWU7XG4iIFwKICAgICJsZXQgcmVnZXhwVW5pY29kZSA9IEB0cnlH
ZXRCeUlkKHJlZ2V4cCwgXCJ1bmljb2RlXCIpO1xuIiBcCiAgICAiaWYgKHJlZ2V4cFVuaWNvZGUg
IT09IEByZWdFeHBQcm90b1VuaWNvZGVHZXR0ZXIpXG4iIFwKICAgICIgcmV0dXJuIHRydWU7XG4i
IFwKICAgICJyZXR1cm4gIUBpc1JlZ0V4cE9iamVjdChyZWdleHApO1xuIiBcCiAgICAifSlcbiIg
XAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19yZWdFeHBQcm90b3R5cGVNYXRjaFNs
b3dDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29u
c3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5cGVNYXRjaFNsb3dDb2RlTGVuZ3RoID0g
NzUxOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19yZWdFeHBQcm90b3R5cGVNYXRjaFNs
b3dDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19yZWdFeHBQ
cm90b3R5cGVNYXRjaFNsb3dDb2RlID0KICAgICIoZnVuY3Rpb24gKHJlZ2V4cCwgc3RyKVxuIiBc
CiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoIXJlZ2V4cC5n
bG9iYWwpXG4iIFwKICAgICIgcmV0dXJuIEByZWdFeHBFeGVjKHJlZ2V4cCwgc3RyKTtcbiIgXAog
ICAgImxldCB1bmljb2RlID0gcmVnZXhwLnVuaWNvZGU7XG4iIFwKICAgICJyZWdleHAubGFzdElu
ZGV4ID0gMDtcbiIgXAogICAgImxldCByZXN1bHRMaXN0ID0gW107XG4iIFwKICAgICJjb25zdCBt
YXhpbXVtUmVhc29uYWJsZU1hdGNoU2l6ZSA9IDEwMDAwMDAwMDtcbiIgXAogICAgIndoaWxlICh0
cnVlKSB7XG4iIFwKICAgICIgbGV0IHJlc3VsdCA9IEByZWdFeHBFeGVjKHJlZ2V4cCwgc3RyKTtc
biIgXAogICAgIiBcbiIgXAogICAgIiBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4iIFwKICAgICIg
IGlmIChyZXN1bHRMaXN0Lmxlbmd0aCA9PT0gMClcbiIgXAogICAgIiAgIHJldHVybiBudWxsO1xu
IiBcCiAgICAiICByZXR1cm4gcmVzdWx0TGlzdDtcbiIgXAogICAgIiB9XG4iIFwKICAgICIgaWYg
KHJlc3VsdExpc3QubGVuZ3RoID4gbWF4aW11bVJlYXNvbmFibGVNYXRjaFNpemUpXG4iIFwKICAg
ICIgIEB0aHJvd091dE9mTWVtb3J5RXJyb3IoKTtcbiIgXAogICAgIiBpZiAoIUBpc09iamVjdChy
ZXN1bHQpKVxuIiBcCiAgICAiICBAdGhyb3dUeXBlRXJyb3IoXCJSZWdFeHAucHJvdG90eXBlLkBA
bWF0Y2ggY2FsbCB0byBSZWdFeHAuZXhlYyBkaWRuJ3QgcmV0dXJuIG51bGwgb3IgYW4gb2JqZWN0
XCIpO1xuIiBcCiAgICAiIGxldCByZXN1bHRTdHJpbmcgPSBAdG9TdHJpbmcocmVzdWx0WzBdKTtc
biIgXAogICAgIiBpZiAoIXJlc3VsdFN0cmluZy5sZW5ndGgpXG4iIFwKICAgICIgIHJlZ2V4cC5s
YXN0SW5kZXggPSBAYWR2YW5jZVN0cmluZ0luZGV4KHN0ciwgcmVnZXhwLmxhc3RJbmRleCwgdW5p
Y29kZSk7XG4iIFwKICAgICIgcmVzdWx0TGlzdC5AcHVzaChyZXN1bHRTdHJpbmcpO1xuIiBcCiAg
ICAifVxuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19y
ZWdFeHBQcm90b3R5cGVNYXRjaENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3JlZ0V4cFByb3RvdHlwZU1hdGNo
Q29kZUxlbmd0aCA9IDI5NDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfcmVnRXhwUHJv
dG90eXBlTWF0Y2hDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciog
c19yZWdFeHBQcm90b3R5cGVNYXRjaENvZGUgPQogICAgIihmdW5jdGlvbiAoc3RyQXJnKVxuIiBc
CiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoIUBpc09iamVj
dCh0aGlzKSlcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJSZWdFeHAucHJvdG90eXBlLkBA
bWF0Y2ggcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYW4gT2JqZWN0XCIpO1xuIiBcCiAgICAibGV0
IHN0ciA9IEB0b1N0cmluZyhzdHJBcmcpO1xuIiBcCiAgICAiaWYgKCFAaGFzT2JzZXJ2YWJsZVNp
ZGVFZmZlY3RzRm9yUmVnRXhwTWF0Y2godGhpcykpXG4iIFwKICAgICIgcmV0dXJuIEByZWdFeHBN
YXRjaEZhc3QuQGNhbGwodGhpcywgc3RyKTtcbiIgXAogICAgInJldHVybiBAbWF0Y2hTbG93KHRo
aXMsIHN0cik7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX3JlZ0V4cFByb3RvdHlwZVJlcGxhY2VDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5
cGVSZXBsYWNlQ29kZUxlbmd0aCA9IDM4MDM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X3JlZ0V4cFByb3RvdHlwZVJlcGxhY2VDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsK
Y29uc3QgY2hhciogc19yZWdFeHBQcm90b3R5cGVSZXBsYWNlQ29kZSA9CiAgICAiKGZ1bmN0aW9u
IChzdHJBcmcsIHJlcGxhY2UpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgImZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9u
LCBjYXB0dXJlcywgcmVwbGFjZW1lbnQpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgXCJ1c2Ugc3Ry
aWN0XCI7XG4iIFwKICAgICIgbGV0IG1hdGNoTGVuZ3RoID0gbWF0Y2hlZC5sZW5ndGg7XG4iIFwK
ICAgICIgbGV0IHN0cmluZ0xlbmd0aCA9IHN0ci5sZW5ndGg7XG4iIFwKICAgICIgbGV0IHRhaWxQ
b3MgPSBwb3NpdGlvbiArIG1hdGNoTGVuZ3RoO1xuIiBcCiAgICAiIGxldCBtID0gY2FwdHVyZXMu
bGVuZ3RoO1xuIiBcCiAgICAiIGxldCByZXBsYWNlbWVudExlbmd0aCA9IHJlcGxhY2VtZW50Lmxl
bmd0aDtcbiIgXAogICAgIiBsZXQgcmVzdWx0ID0gXCJcIjtcbiIgXAogICAgIiBsZXQgbGFzdFN0
YXJ0ID0gMDtcbiIgXAogICAgIiBmb3IgKGxldCBzdGFydCA9IDA7IHN0YXJ0ID0gcmVwbGFjZW1l
bnQuaW5kZXhPZihcIiRcIiwgbGFzdFN0YXJ0KSwgc3RhcnQgIT09IC0xOyBsYXN0U3RhcnQgPSBz
dGFydCkge1xuIiBcCiAgICAiICBpZiAoc3RhcnQgLSBsYXN0U3RhcnQgPiAwKVxuIiBcCiAgICAi
ICAgcmVzdWx0ID0gcmVzdWx0ICsgcmVwbGFjZW1lbnQuc3Vic3RyaW5nKGxhc3RTdGFydCwgc3Rh
cnQpO1xuIiBcCiAgICAiICBzdGFydCsrO1xuIiBcCiAgICAiICBsZXQgY2ggPSByZXBsYWNlbWVu
dC5jaGFyQXQoc3RhcnQpO1xuIiBcCiAgICAiICBpZiAoY2ggPT09IFwiXCIpXG4iIFwKICAgICIg
ICByZXN1bHQgPSByZXN1bHQgKyBcIiRcIjtcbiIgXAogICAgIiAgZWxzZSB7XG4iIFwKICAgICIg
ICBzd2l0Y2ggKGNoKVxuIiBcCiAgICAiICAge1xuIiBcCiAgICAiICAgY2FzZSBcIiRcIjpcbiIg
XAogICAgIiAgICByZXN1bHQgPSByZXN1bHQgKyBcIiRcIjtcbiIgXAogICAgIiAgICBzdGFydCsr
O1xuIiBcCiAgICAiICAgIGJyZWFrO1xuIiBcCiAgICAiICAgY2FzZSBcIiZcIjpcbiIgXAogICAg
IiAgICByZXN1bHQgPSByZXN1bHQgKyBtYXRjaGVkO1xuIiBcCiAgICAiICAgIHN0YXJ0Kys7XG4i
IFwKICAgICIgICAgYnJlYWs7XG4iIFwKICAgICIgICBjYXNlIFwiYFwiOlxuIiBcCiAgICAiICAg
IGlmIChwb3NpdGlvbiA+IDApXG4iIFwKICAgICIgICAgIHJlc3VsdCA9IHJlc3VsdCArIHN0ci5z
dWJzdHJpbmcoMCwgcG9zaXRpb24pO1xuIiBcCiAgICAiICAgIHN0YXJ0Kys7XG4iIFwKICAgICIg
ICAgYnJlYWs7XG4iIFwKICAgICIgICBjYXNlIFwiJ1wiOlxuIiBcCiAgICAiICAgIGlmICh0YWls
UG9zIDwgc3RyaW5nTGVuZ3RoKVxuIiBcCiAgICAiICAgICByZXN1bHQgPSByZXN1bHQgKyBzdHIu
c3Vic3RyaW5nKHRhaWxQb3MpO1xuIiBcCiAgICAiICAgIHN0YXJ0Kys7XG4iIFwKICAgICIgICAg
YnJlYWs7XG4iIFwKICAgICIgICBkZWZhdWx0OlxuIiBcCiAgICAiICAgIGxldCBjaENvZGUgPSBj
aC5jaGFyQ29kZUF0KDApO1xuIiBcCiAgICAiICAgIGlmIChjaENvZGUgPj0gMHgzMCAmJiBjaENv
ZGUgPD0gMHgzOSkge1xuIiBcCiAgICAiICAgICBzdGFydCsrO1xuIiBcCiAgICAiICAgICBsZXQg
biA9IGNoQ29kZSAtIDB4MzA7XG4iIFwKICAgICIgICAgIGlmIChuID4gbSlcbiIgXAogICAgIiAg
ICAgIGJyZWFrO1xuIiBcCiAgICAiICAgICBpZiAoc3RhcnQgPCByZXBsYWNlbWVudExlbmd0aCkg
e1xuIiBcCiAgICAiICAgICAgbGV0IG5leHRDaENvZGUgPSByZXBsYWNlbWVudC5jaGFyQ29kZUF0
KHN0YXJ0KTtcbiIgXAogICAgIiAgICAgIGlmIChuZXh0Q2hDb2RlID49IDB4MzAgJiYgbmV4dENo
Q29kZSA8PSAweDM5KSB7XG4iIFwKICAgICIgICAgICAgbGV0IG5uID0gMTAgKiBuICsgbmV4dENo
Q29kZSAtIDB4MzA7XG4iIFwKICAgICIgICAgICAgaWYgKG5uIDw9IG0pIHtcbiIgXAogICAgIiAg
ICAgICAgbiA9IG5uO1xuIiBcCiAgICAiICAgICAgICBzdGFydCsrO1xuIiBcCiAgICAiICAgICAg
IH1cbiIgXAogICAgIiAgICAgIH1cbiIgXAogICAgIiAgICAgfVxuIiBcCiAgICAiICAgICBpZiAo
biA9PSAwKVxuIiBcCiAgICAiICAgICAgYnJlYWs7XG4iIFwKICAgICIgICAgIGlmIChjYXB0dXJl
c1tuXSAhPSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgY2Fw
dHVyZXNbbl07XG4iIFwKICAgICIgICAgfSBlbHNlXG4iIFwKICAgICIgICAgIHJlc3VsdCA9IHJl
c3VsdCArIFwiJFwiO1xuIiBcCiAgICAiICAgIGJyZWFrO1xuIiBcCiAgICAiICAgfVxuIiBcCiAg
ICAiICB9XG4iIFwKICAgICIgfVxuIiBcCiAgICAiIHJldHVybiByZXN1bHQgKyByZXBsYWNlbWVu
dC5zdWJzdHJpbmcobGFzdFN0YXJ0KTtcbiIgXAogICAgIn1cbiIgXAogICAgImlmICghQGlzT2Jq
ZWN0KHRoaXMpKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlJlZ0V4cC5wcm90b3R5cGUu
QEByZXBsYWNlIHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIGFuIE9iamVjdFwiKTtcbiIgXAogICAg
ImxldCByZWdleHAgPSB0aGlzO1xuIiBcCiAgICAibGV0IHN0ciA9IEB0b1N0cmluZyhzdHJBcmcp
O1xuIiBcCiAgICAibGV0IHN0cmluZ0xlbmd0aCA9IHN0ci5sZW5ndGg7XG4iIFwKICAgICJsZXQg
ZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZSA9PT0gJ2Z1bmN0aW9uJztcbiIgXAog
ICAgImlmICghZnVuY3Rpb25hbFJlcGxhY2UpXG4iIFwKICAgICIgcmVwbGFjZSA9IEB0b1N0cmlu
ZyhyZXBsYWNlKTtcbiIgXAogICAgImxldCBnbG9iYWwgPSByZWdleHAuZ2xvYmFsO1xuIiBcCiAg
ICAibGV0IHVuaWNvZGUgPSBmYWxzZTtcbiIgXAogICAgImlmIChnbG9iYWwpIHtcbiIgXAogICAg
IiB1bmljb2RlID0gcmVnZXhwLnVuaWNvZGU7XG4iIFwKICAgICIgcmVnZXhwLmxhc3RJbmRleCA9
IDA7XG4iIFwKICAgICJ9XG4iIFwKICAgICJsZXQgcmVzdWx0TGlzdCA9IFtdO1xuIiBcCiAgICAi
bGV0IHJlc3VsdDtcbiIgXAogICAgImxldCBkb25lID0gZmFsc2U7XG4iIFwKICAgICJ3aGlsZSAo
IWRvbmUpIHtcbiIgXAogICAgIiByZXN1bHQgPSBAcmVnRXhwRXhlYyhyZWdleHAsIHN0cik7XG4i
IFwKICAgICIgaWYgKHJlc3VsdCA9PT0gbnVsbClcbiIgXAogICAgIiAgZG9uZSA9IHRydWU7XG4i
IFwKICAgICIgZWxzZSB7XG4iIFwKICAgICIgIHJlc3VsdExpc3QuQHB1c2gocmVzdWx0KTtcbiIg
XAogICAgIiAgaWYgKCFnbG9iYWwpXG4iIFwKICAgICIgICBkb25lID0gdHJ1ZTtcbiIgXAogICAg
IiAgZWxzZSB7XG4iIFwKICAgICIgICBsZXQgbWF0Y2hTdHIgPSBAdG9TdHJpbmcocmVzdWx0WzBd
KTtcbiIgXAogICAgIiAgIGlmICghbWF0Y2hTdHIubGVuZ3RoKVxuIiBcCiAgICAiICAgIHJlZ2V4
cC5sYXN0SW5kZXggPSBAYWR2YW5jZVN0cmluZ0luZGV4KHN0ciwgcmVnZXhwLmxhc3RJbmRleCwg
dW5pY29kZSk7XG4iIFwKICAgICIgIH1cbiIgXAogICAgIiB9XG4iIFwKICAgICJ9XG4iIFwKICAg
ICJsZXQgYWNjdW11bGF0ZWRSZXN1bHQgPSBcIlwiO1xuIiBcCiAgICAibGV0IG5leHRTb3VyY2VQ
b3NpdGlvbiA9IDA7XG4iIFwKICAgICJsZXQgbGFzdFBvc2l0aW9uID0gMDtcbiIgXAogICAgImZv
ciAobGV0IGkgPSAwLCByZXN1bHRMaXN0TGVuZ3RoID0gcmVzdWx0TGlzdC5sZW5ndGg7IGkgPCBy
ZXN1bHRMaXN0TGVuZ3RoOyArK2kpIHtcbiIgXAogICAgIiBsZXQgcmVzdWx0ID0gcmVzdWx0TGlz
dFtpXTtcbiIgXAogICAgIiBsZXQgbkNhcHR1cmVzID0gcmVzdWx0Lmxlbmd0aCAtIDE7XG4iIFwK
ICAgICIgaWYgKG5DYXB0dXJlcyA8IDApXG4iIFwKICAgICIgIG5DYXB0dXJlcyA9IDA7XG4iIFwK
ICAgICIgbGV0IG1hdGNoZWQgPSBAdG9TdHJpbmcocmVzdWx0WzBdKTtcbiIgXAogICAgIiBsZXQg
bWF0Y2hMZW5ndGggPSBtYXRjaGVkLmxlbmd0aDtcbiIgXAogICAgIiBsZXQgcG9zaXRpb24gPSBy
ZXN1bHQuaW5kZXg7XG4iIFwKICAgICIgcG9zaXRpb24gPSAocG9zaXRpb24gPiBzdHJpbmdMZW5n
dGgpID8gc3RyaW5nTGVuZ3RoIDogcG9zaXRpb247XG4iIFwKICAgICIgcG9zaXRpb24gPSAocG9z
aXRpb24gPCAwKSA/IDAgOiBwb3NpdGlvbjtcbiIgXAogICAgIiBsZXQgY2FwdHVyZXMgPSBbXTtc
biIgXAogICAgIiBmb3IgKGxldCBuID0gMTsgbiA8PSBuQ2FwdHVyZXM7IG4rKykge1xuIiBcCiAg
ICAiICBsZXQgY2FwTiA9IHJlc3VsdFtuXTtcbiIgXAogICAgIiAgaWYgKGNhcE4gIT09IEB1bmRl
ZmluZWQpXG4iIFwKICAgICIgICBjYXBOID0gQHRvU3RyaW5nKGNhcE4pO1xuIiBcCiAgICAiICBj
YXB0dXJlc1tuXSA9IGNhcE47XG4iIFwKICAgICIgfVxuIiBcCiAgICAiIGxldCByZXBsYWNlbWVu
dDtcbiIgXAogICAgIiBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiIgXAogICAgIiAgbGV0IHJl
cGxhY2VyQXJncyA9IFsgbWF0Y2hlZCBdLmNvbmNhdChjYXB0dXJlcy5zbGljZSgxKSk7XG4iIFwK
ICAgICIgIHJlcGxhY2VyQXJncy5AcHVzaChwb3NpdGlvbik7XG4iIFwKICAgICIgIHJlcGxhY2Vy
QXJncy5AcHVzaChzdHIpO1xuIiBcCiAgICAiICBsZXQgcmVwbFZhbHVlID0gcmVwbGFjZS5AYXBw
bHkoQHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKTtcbiIgXAogICAgIiAgcmVwbGFjZW1lbnQgPSBA
dG9TdHJpbmcocmVwbFZhbHVlKTtcbiIgXAogICAgIiB9IGVsc2VcbiIgXAogICAgIiAgcmVwbGFj
ZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMs
IHJlcGxhY2UpO1xuIiBcCiAgICAiIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24g
JiYgcG9zaXRpb24gPj0gbGFzdFBvc2l0aW9uKSB7XG4iIFwKICAgICIgIGFjY3VtdWxhdGVkUmVz
dWx0ID0gYWNjdW11bGF0ZWRSZXN1bHQgKyBzdHIuc3Vic3RyaW5nKG5leHRTb3VyY2VQb3NpdGlv
biwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4iIFwKICAgICIgIG5leHRTb3VyY2VQb3NpdGlv
biA9IHBvc2l0aW9uICsgbWF0Y2hMZW5ndGg7XG4iIFwKICAgICIgIGxhc3RQb3NpdGlvbiA9IHBv
c2l0aW9uO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIn1cbiIgXAogICAgImlmIChuZXh0U291cmNl
UG9zaXRpb24gPj0gc3RyaW5nTGVuZ3RoKVxuIiBcCiAgICAiIHJldHVybiAgYWNjdW11bGF0ZWRS
ZXN1bHQ7XG4iIFwKICAgICJyZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBzdHIuc3Vic3RyaW5n
KG5leHRTb3VyY2VQb3NpdGlvbik7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX3JlZ0V4cFByb3RvdHlwZVNlYXJjaENvZGVDb25zdHJ1Y3RBYmlsaXR5
ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3Jl
Z0V4cFByb3RvdHlwZVNlYXJjaENvZGVMZW5ndGggPSA1OTA7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3JlZ0V4cFByb3RvdHlwZVNlYXJjaENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50
cmluc2ljOwpjb25zdCBjaGFyKiBzX3JlZ0V4cFByb3RvdHlwZVNlYXJjaENvZGUgPQogICAgIihm
dW5jdGlvbiAoc3RyQXJnKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICJsZXQgcmVnZXhwID0gdGhpcztcbiIgXAogICAgImlmIChAaXNSZWdFeHBPYmplY3Qo
cmVnZXhwKSAmJiBAdHJ5R2V0QnlJZChyZWdleHAsIFwiZXhlY1wiKSA9PT0gQHJlZ0V4cEJ1aWx0
aW5FeGVjKVxuIiBcCiAgICAiIHJldHVybiBAcmVnRXhwU2VhcmNoRmFzdC5AY2FsbChyZWdleHAs
IHN0ckFyZyk7XG4iIFwKICAgICJpZiAoIUBpc09iamVjdCh0aGlzKSlcbiIgXAogICAgIiBAdGhy
b3dUeXBlRXJyb3IoXCJSZWdFeHAucHJvdG90eXBlLkBAc2VhcmNoIHJlcXVpcmVzIHRoYXQgfHRo
aXN8IGJlIGFuIE9iamVjdFwiKTtcbiIgXAogICAgImxldCBzdHIgPSBAdG9TdHJpbmcoc3RyQXJn
KVxuIiBcCiAgICAibGV0IHByZXZpb3VzTGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiIg
XAogICAgImlmIChwcmV2aW91c0xhc3RJbmRleCAhPT0gMClcbiIgXAogICAgIiByZWdleHAubGFz
dEluZGV4ID0gMDtcbiIgXAogICAgImxldCByZXN1bHQgPSBAcmVnRXhwRXhlYyhyZWdleHAsIHN0
cik7XG4iIFwKICAgICJpZiAocmVnZXhwLmxhc3RJbmRleCAhPT0gcHJldmlvdXNMYXN0SW5kZXgp
XG4iIFwKICAgICIgcmVnZXhwLmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuIiBcCiAg
ICAiaWYgKHJlc3VsdCA9PT0gbnVsbClcbiIgXAogICAgIiByZXR1cm4gLTE7XG4iIFwKICAgICJy
ZXR1cm4gcmVzdWx0LmluZGV4O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0
cnVjdEFiaWxpdHkgc19yZWdFeHBQcm90b3R5cGVIYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JS
ZWdFeHBTcGxpdENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3JlZ0V4cFByb3RvdHlwZUhhc09ic2VydmFibGVT
aWRlRWZmZWN0c0ZvclJlZ0V4cFNwbGl0Q29kZUxlbmd0aCA9IDk2MTsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfcmVnRXhwUHJvdG90eXBlSGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9y
UmVnRXhwU3BsaXRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciog
c19yZWdFeHBQcm90b3R5cGVIYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JSZWdFeHBTcGxpdENv
ZGUgPQogICAgIihmdW5jdGlvbiAocmVnZXhwKSB7XG4iIFwKICAgICJsZXQgcmVnZXhwRXhlYyA9
IEB0cnlHZXRCeUlkKHJlZ2V4cCwgXCJleGVjXCIpO1xuIiBcCiAgICAiaWYgKHJlZ2V4cEV4ZWMg
IT09IEByZWdFeHBCdWlsdGluRXhlYylcbiIgXAogICAgIiByZXR1cm4gdHJ1ZTtcbiIgXAogICAg
ImxldCByZWdleHBGbGFncyA9IEB0cnlHZXRCeUlkKHJlZ2V4cCwgXCJmbGFnc1wiKTtcbiIgXAog
ICAgImlmIChyZWdleHBGbGFncyAhPT0gQHJlZ0V4cFByb3RvRmxhZ3NHZXR0ZXIpXG4iIFwKICAg
ICIgcmV0dXJuIHRydWU7XG4iIFwKICAgICJsZXQgcmVnZXhwR2xvYmFsID0gQHRyeUdldEJ5SWQo
cmVnZXhwLCBcImdsb2JhbFwiKTtcbiIgXAogICAgImlmIChyZWdleHBHbG9iYWwgIT09IEByZWdF
eHBQcm90b0dsb2JhbEdldHRlcilcbiIgXAogICAgIiByZXR1cm4gdHJ1ZTtcbiIgXAogICAgImxl
dCByZWdleHBJZ25vcmVDYXNlID0gQHRyeUdldEJ5SWQocmVnZXhwLCBcImlnbm9yZUNhc2VcIik7
XG4iIFwKICAgICJpZiAocmVnZXhwSWdub3JlQ2FzZSAhPT0gQHJlZ0V4cFByb3RvSWdub3JlQ2Fz
ZUdldHRlcilcbiIgXAogICAgIiByZXR1cm4gdHJ1ZTtcbiIgXAogICAgImxldCByZWdleHBNdWx0
aWxpbmUgPSBAdHJ5R2V0QnlJZChyZWdleHAsIFwibXVsdGlsaW5lXCIpO1xuIiBcCiAgICAiaWYg
KHJlZ2V4cE11bHRpbGluZSAhPT0gQHJlZ0V4cFByb3RvTXVsdGlsaW5lR2V0dGVyKVxuIiBcCiAg
ICAiIHJldHVybiB0cnVlO1xuIiBcCiAgICAibGV0IHJlZ2V4cFN0aWNreSA9IEB0cnlHZXRCeUlk
KHJlZ2V4cCwgXCJzdGlja3lcIik7XG4iIFwKICAgICJpZiAocmVnZXhwU3RpY2t5ICE9PSBAcmVn
RXhwUHJvdG9TdGlja3lHZXR0ZXIpXG4iIFwKICAgICIgcmV0dXJuIHRydWU7XG4iIFwKICAgICJs
ZXQgcmVnZXhwVW5pY29kZSA9IEB0cnlHZXRCeUlkKHJlZ2V4cCwgXCJ1bmljb2RlXCIpO1xuIiBc
CiAgICAiaWYgKHJlZ2V4cFVuaWNvZGUgIT09IEByZWdFeHBQcm90b1VuaWNvZGVHZXR0ZXIpXG4i
IFwKICAgICIgcmV0dXJuIHRydWU7XG4iIFwKICAgICJsZXQgcmVnZXhwU291cmNlID0gQHRyeUdl
dEJ5SWQocmVnZXhwLCBcInNvdXJjZVwiKTtcbiIgXAogICAgImlmIChyZWdleHBTb3VyY2UgIT09
IEByZWdFeHBQcm90b1NvdXJjZUdldHRlcilcbiIgXAogICAgIiByZXR1cm4gdHJ1ZTtcbiIgXAog
ICAgInJldHVybiAhQGlzUmVnRXhwT2JqZWN0KHJlZ2V4cCk7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3JlZ0V4cFByb3RvdHlwZVNwbGl0Q29kZUNv
bnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsK
Y29uc3QgaW50IHNfcmVnRXhwUHJvdG90eXBlU3BsaXRDb2RlTGVuZ3RoID0gMjE2NDsKc3RhdGlj
IGNvbnN0IEpTQzo6SW50cmluc2ljIHNfcmVnRXhwUHJvdG90eXBlU3BsaXRDb2RlSW50cmluc2lj
ID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19yZWdFeHBQcm90b3R5cGVTcGxpdENv
ZGUgPQogICAgIihmdW5jdGlvbiAoc3RyaW5nLCBsaW1pdClcbiIgXAogICAgIntcbiIgXAogICAg
IlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiaWYgKCFAaXNPYmplY3QodGhpcykpXG4iIFwKICAg
ICIgQHRocm93VHlwZUVycm9yKFwiUmVnRXhwLnByb3RvdHlwZS5AQHNwbGl0IHJlcXVpcmVzIHRo
YXQgfHRoaXN8IGJlIGFuIE9iamVjdFwiKTtcbiIgXAogICAgImxldCByZWdleHAgPSB0aGlzO1xu
IiBcCiAgICAibGV0IHN0ciA9IEB0b1N0cmluZyhzdHJpbmcpO1xuIiBcCiAgICAibGV0IHNwZWNp
ZXNDb25zdHJ1Y3RvciA9IEBzcGVjaWVzQ29uc3RydWN0b3IocmVnZXhwLCBAUmVnRXhwKTtcbiIg
XAogICAgImlmIChzcGVjaWVzQ29uc3RydWN0b3IgPT09IEBSZWdFeHAgJiYgIUBoYXNPYnNlcnZh
YmxlU2lkZUVmZmVjdHNGb3JSZWdFeHBTcGxpdChyZWdleHApKVxuIiBcCiAgICAiIHJldHVybiBA
cmVnRXhwU3BsaXRGYXN0LkBjYWxsKHJlZ2V4cCwgc3RyLCBsaW1pdCk7XG4iIFwKICAgICJsZXQg
ZmxhZ3MgPSBAdG9TdHJpbmcocmVnZXhwLmZsYWdzKTtcbiIgXAogICAgImxldCB1bmljb2RlTWF0
Y2hpbmcgPSBAc3RyaW5nSW5jbHVkZXNJbnRlcm5hbC5AY2FsbChmbGFncywgXCJ1XCIpO1xuIiBc
CiAgICAibGV0IG5ld0ZsYWdzID0gQHN0cmluZ0luY2x1ZGVzSW50ZXJuYWwuQGNhbGwoZmxhZ3Ms
IFwieVwiKSA/IGZsYWdzIDogZmxhZ3MgKyBcInlcIjtcbiIgXAogICAgImxldCBzcGxpdHRlciA9
IG5ldyBzcGVjaWVzQ29uc3RydWN0b3IocmVnZXhwLCBuZXdGbGFncyk7XG4iIFwKICAgICJpZiAo
IUBoYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JSZWdFeHBTcGxpdChzcGxpdHRlcikpXG4iIFwK
ICAgICIgcmV0dXJuIEByZWdFeHBTcGxpdEZhc3QuQGNhbGwoc3BsaXR0ZXIsIHN0ciwgbGltaXQp
O1xuIiBcCiAgICAibGV0IHJlc3VsdCA9IFtdO1xuIiBcCiAgICAibGltaXQgPSAobGltaXQgPT09
IEB1bmRlZmluZWQpID8gMHhmZmZmZmZmZiA6IGxpbWl0ID4+PiAwO1xuIiBcCiAgICAiaWYgKCFs
aW1pdClcbiIgXAogICAgIiByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAibGV0IHNpemUgPSBzdHIu
bGVuZ3RoO1xuIiBcCiAgICAiaWYgKCFzaXplKSB7XG4iIFwKICAgICIgbGV0IHogPSBAcmVnRXhw
RXhlYyhzcGxpdHRlciwgc3RyKTtcbiIgXAogICAgIiBpZiAoeiAhPSBudWxsKVxuIiBcCiAgICAi
ICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAiIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIDAsIHN0
cik7XG4iIFwKICAgICIgcmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn1cbiIgXAogICAgImxldCBw
b3NpdGlvbiA9IDA7XG4iIFwKICAgICJsZXQgbWF0Y2hQb3NpdGlvbiA9IDA7XG4iIFwKICAgICJ3
aGlsZSAobWF0Y2hQb3NpdGlvbiA8IHNpemUpIHtcbiIgXAogICAgIiBzcGxpdHRlci5sYXN0SW5k
ZXggPSBtYXRjaFBvc2l0aW9uO1xuIiBcCiAgICAiIGxldCBtYXRjaGVzID0gQHJlZ0V4cEV4ZWMo
c3BsaXR0ZXIsIHN0cik7XG4iIFwKICAgICIgaWYgKG1hdGNoZXMgPT09IG51bGwpXG4iIFwKICAg
ICIgIG1hdGNoUG9zaXRpb24gPSBAYWR2YW5jZVN0cmluZ0luZGV4KHN0ciwgbWF0Y2hQb3NpdGlv
biwgdW5pY29kZU1hdGNoaW5nKTtcbiIgXAogICAgIiBlbHNlIHtcbiIgXAogICAgIiAgbGV0IGVu
ZFBvc2l0aW9uID0gQHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCk7XG4iIFwKICAgICIgIGVu
ZFBvc2l0aW9uID0gKGVuZFBvc2l0aW9uIDw9IHNpemUpID8gZW5kUG9zaXRpb24gOiBzaXplO1xu
IiBcCiAgICAiICBpZiAoZW5kUG9zaXRpb24gPT09IHBvc2l0aW9uKVxuIiBcCiAgICAiICAgbWF0
Y2hQb3NpdGlvbiA9IEBhZHZhbmNlU3RyaW5nSW5kZXgoc3RyLCBtYXRjaFBvc2l0aW9uLCB1bmlj
b2RlTWF0Y2hpbmcpO1xuIiBcCiAgICAiICBlbHNlIHtcbiIgXAogICAgIiAgIGxldCBzdWJTdHIg
PSBAc3RyaW5nU3Vic3RySW50ZXJuYWwuQGNhbGwoc3RyLCBwb3NpdGlvbiwgbWF0Y2hQb3NpdGlv
biAtIHBvc2l0aW9uKTtcbiIgXAogICAgIiAgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIHJlc3Vs
dC5sZW5ndGgsIHN1YlN0cik7XG4iIFwKICAgICIgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSBsaW1p
dClcbiIgXAogICAgIiAgICByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAiICAgcG9zaXRpb24gPSBl
bmRQb3NpdGlvbjtcbiIgXAogICAgIiAgIGxldCBudW1iZXJPZkNhcHR1cmVzID0gbWF0Y2hlcy5s
ZW5ndGggPiAxID8gbWF0Y2hlcy5sZW5ndGggLSAxIDogMDtcbiIgXAogICAgIiAgIGxldCBpID0g
MTtcbiIgXAogICAgIiAgIHdoaWxlIChpIDw9IG51bWJlck9mQ2FwdHVyZXMpIHtcbiIgXAogICAg
IiAgICBsZXQgbmV4dENhcHR1cmUgPSBtYXRjaGVzW2ldO1xuIiBcCiAgICAiICAgIEBwdXRCeVZh
bERpcmVjdChyZXN1bHQsIHJlc3VsdC5sZW5ndGgsIG5leHRDYXB0dXJlKTtcbiIgXAogICAgIiAg
ICBpZiAocmVzdWx0Lmxlbmd0aCA9PSBsaW1pdClcbiIgXAogICAgIiAgICAgcmV0dXJuIHJlc3Vs
dDtcbiIgXAogICAgIiAgICBpKys7XG4iIFwKICAgICIgICB9XG4iIFwKICAgICIgICBtYXRjaFBv
c2l0aW9uID0gcG9zaXRpb247XG4iIFwKICAgICIgIH1cbiIgXAogICAgIiB9XG4iIFwKICAgICJ9
XG4iIFwKICAgICJsZXQgcmVtYWluaW5nU3RyID0gQHN0cmluZ1N1YnN0ckludGVybmFsLkBjYWxs
KHN0ciwgcG9zaXRpb24sIHNpemUpO1xuIiBcCiAgICAiQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwg
cmVzdWx0Lmxlbmd0aCwgcmVtYWluaW5nU3RyKTtcbiIgXAogICAgInJldHVybiByZXN1bHQ7XG4i
IFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3JlZ0V4cFBy
b3RvdHlwZVRlc3RDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19yZWdFeHBQcm90b3R5cGVUZXN0Q29kZUxlbmd0
aCA9IDQwMzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfcmVnRXhwUHJvdG90eXBlVGVz
dENvZGVJbnRyaW5zaWMgPSBKU0M6OlJlZ0V4cFRlc3RJbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNf
cmVnRXhwUHJvdG90eXBlVGVzdENvZGUgPQogICAgIihmdW5jdGlvbiAoc3RyQXJnKVxuIiBcCiAg
ICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJsZXQgcmVnZXhwID0gdGhp
cztcbiIgXAogICAgImlmIChAaXNSZWdFeHBPYmplY3QocmVnZXhwKSAmJiBAdHJ5R2V0QnlJZChy
ZWdleHAsIFwiZXhlY1wiKSA9PT0gQHJlZ0V4cEJ1aWx0aW5FeGVjKVxuIiBcCiAgICAiIHJldHVy
biBAcmVnRXhwVGVzdEZhc3QuQGNhbGwocmVnZXhwLCBzdHJBcmcpO1xuIiBcCiAgICAiaWYgKCFA
aXNPYmplY3QocmVnZXhwKSlcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJSZWdFeHAucHJv
dG90eXBlLnRlc3QgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYW4gT2JqZWN0XCIpO1xuIiBcCiAg
ICAibGV0IHN0ciA9IEB0b1N0cmluZyhzdHJBcmcpO1xuIiBcCiAgICAibGV0IG1hdGNoID0gQHJl
Z0V4cEV4ZWMocmVnZXhwLCBzdHIpO1xuIiBcCiAgICAiaWYgKG1hdGNoICE9PSBudWxsKVxuIiBc
CiAgICAiIHJldHVybiB0cnVlO1xuIiBcCiAgICAicmV0dXJuIGZhbHNlO1xuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zZXRJdGVyYXRvclByb3RvdHlw
ZVNldEl0ZXJhdG9yTmV4dENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3NldEl0ZXJhdG9yUHJvdG90eXBlU2V0
SXRlcmF0b3JOZXh0Q29kZUxlbmd0aCA9IDI5MjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfc2V0SXRlcmF0b3JQcm90b3R5cGVTZXRJdGVyYXRvck5leHRDb2RlSW50cmluc2ljID0gSlND
OjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zZXRJdGVyYXRvclByb3RvdHlwZVNldEl0ZXJh
dG9yTmV4dENvZGUgPQogICAgIihmdW5jdGlvbiAoYnVja2V0LCBraW5kKVxuIiBcCiAgICAie1xu
IiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgdmFsdWU7XG4iIFwKICAgICJi
dWNrZXQgPSBAc2V0QnVja2V0TmV4dChidWNrZXQpO1xuIiBcCiAgICAidGhpcy5Ac2V0QnVja2V0
ID0gYnVja2V0O1xuIiBcCiAgICAidmFyIGRvbmUgPSBidWNrZXQgPT09IEBzZW50aW5lbFNldEJ1
Y2tldDtcbiIgXAogICAgImlmICghZG9uZSkge1xuIiBcCiAgICAiIHZhbHVlID0gQHNldEJ1Y2tl
dEtleShidWNrZXQpO1xuIiBcCiAgICAiIGlmIChraW5kID09PSBAaXRlcmF0aW9uS2luZEtleVZh
bHVlKVxuIiBcCiAgICAiICB2YWx1ZSA9IFsgdmFsdWUsIHZhbHVlIF1cbiIgXAogICAgIn1cbiIg
XAogICAgInJldHVybiB7IGRvbmUsIHZhbHVlIH07XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0
IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVMZW5ndGggPSAzNjc7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3NldEl0ZXJhdG9yUHJvdG90eXBlTmV4dENvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3NldEl0ZXJhdG9yUHJvdG90
eXBlTmV4dENvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAodGhpcyA9PSBudWxsKVxuIiBcCiAgICAiIEB0aHJv
d1R5cGVFcnJvcihcIiVTZXRJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1aXJlcyB0aGF0IHx0
aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJ2YXIgYnVja2V0ID0g
dGhpcy5Ac2V0QnVja2V0O1xuIiBcCiAgICAiaWYgKGJ1Y2tldCA9PT0gQHVuZGVmaW5lZClcbiIg
XAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCIlU2V0SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVx
dWlyZXMgdGhhdCB8dGhpc3wgYmUgYSBTZXQgSXRlcmF0b3IgaW5zdGFuY2VcIik7XG4iIFwKICAg
ICJyZXR1cm4gQHNldEl0ZXJhdG9yTmV4dC5AY2FsbCh0aGlzLCBidWNrZXQsIHRoaXMuQHNldEl0
ZXJhdG9yS2luZCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX3NldFByb3RvdHlwZUNyZWF0ZVNldEl0ZXJhdG9yQ29uc3RydWN0b3JDb2RlQ29uc3Ry
dWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2FuQ29uc3RydWN0Owpjb25zdCBp
bnQgc19zZXRQcm90b3R5cGVDcmVhdGVTZXRJdGVyYXRvckNvbnN0cnVjdG9yQ29kZUxlbmd0aCA9
IDIwNDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc2V0UHJvdG90eXBlQ3JlYXRlU2V0
SXRlcmF0b3JDb25zdHJ1Y3RvckNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX3NldFByb3RvdHlwZUNyZWF0ZVNldEl0ZXJhdG9yQ29uc3RydWN0b3JDb2RlID0K
ICAgICIoZnVuY3Rpb24gKGl0ZXJhdGVkT2JqZWN0LCBraW5kKVxuIiBcCiAgICAie1xuIiBcCiAg
ICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJAYXNzZXJ0KEBpc1NldChpdGVyYXRlZE9iamVj
dCkpO1xuIiBcCiAgICAidGhpcy5AaXRlcmF0ZWRPYmplY3QgPSBpdGVyYXRlZE9iamVjdDtcbiIg
XAogICAgInRoaXMuQHNldEl0ZXJhdG9yS2luZCA9IGtpbmQ7XG4iIFwKICAgICJ0aGlzLkBzZXRC
dWNrZXQgPSBAc2V0QnVja2V0SGVhZChpdGVyYXRlZE9iamVjdCk7XG4iIFwKICAgICJ9KVxuIiBc
CjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3NldFByb3RvdHlwZVZhbHVlc0NvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX3NldFByb3RvdHlwZVZhbHVlc0NvZGVMZW5ndGggPSAxNzk7CnN0YXRpYyBj
b25zdCBKU0M6OkludHJpbnNpYyBzX3NldFByb3RvdHlwZVZhbHVlc0NvZGVJbnRyaW5zaWMgPSBK
U0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3NldFByb3RvdHlwZVZhbHVlc0NvZGUgPQog
ICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4i
IFwKICAgICJpZiAoIUBpc1NldCh0aGlzKSlcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJT
ZXQucHJvdG90eXBlLnZhbHVlcyByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBTZXRcIik7XG4iIFwK
ICAgICJyZXR1cm4gbmV3IEBjcmVhdGVTZXRJdGVyYXRvcih0aGlzLCBAaXRlcmF0aW9uS2luZFZh
bHVlKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNf
c2V0UHJvdG90eXBlRW50cmllc0NvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3NldFByb3RvdHlwZUVudHJpZXND
b2RlTGVuZ3RoID0gMTgzOwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19zZXRQcm90b3R5
cGVFbnRyaWVzQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNf
c2V0UHJvdG90eXBlRW50cmllc0NvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xu
IiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoIUBpc1NldCh0aGlzKSlcbiIg
XAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJTZXQucHJvdG90eXBlLmVudHJpZXMgcmVxdWlyZXMg
dGhhdCB8dGhpc3wgYmUgU2V0XCIpO1xuIiBcCiAgICAicmV0dXJuIG5ldyBAY3JlYXRlU2V0SXRl
cmF0b3IodGhpcywgQGl0ZXJhdGlvbktpbmRLZXlWYWx1ZSk7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3NldFByb3RvdHlwZUZvckVhY2hDb2RlQ29u
c3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpj
b25zdCBpbnQgc19zZXRQcm90b3R5cGVGb3JFYWNoQ29kZUxlbmd0aCA9IDQ2NjsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfc2V0UHJvdG90eXBlRm9yRWFjaENvZGVJbnRyaW5zaWMgPSBK
U0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3NldFByb3RvdHlwZUZvckVhY2hDb2RlID0K
ICAgICIoZnVuY3Rpb24gKGNhbGxiYWNrIClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0
cmljdFwiO1xuIiBcCiAgICAiaWYgKCFAaXNTZXQodGhpcykpXG4iIFwKICAgICIgQHRocm93VHlw
ZUVycm9yKFwiU2V0IG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVNldCBvYmplY3RcIik7XG4iIFwK
ICAgICJpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKVxuIiBcCiAgICAiIEB0aHJv
d1R5cGVFcnJvcihcIlNldC5wcm90b3R5cGUuZm9yRWFjaCBjYWxsYmFjayBtdXN0IGJlIGEgZnVu
Y3Rpb25cIik7XG4iIFwKICAgICJ2YXIgdGhpc0FyZyA9IEBhcmd1bWVudCgxKTtcbiIgXAogICAg
InZhciBidWNrZXQgPSBAc2V0QnVja2V0SGVhZCh0aGlzKTtcbiIgXAogICAgImRvIHtcbiIgXAog
ICAgIiBidWNrZXQgPSBAc2V0QnVja2V0TmV4dChidWNrZXQpO1xuIiBcCiAgICAiIGlmIChidWNr
ZXQgPT09IEBzZW50aW5lbFNldEJ1Y2tldClcbiIgXAogICAgIiAgYnJlYWs7XG4iIFwKICAgICIg
dmFyIGtleSA9IEBzZXRCdWNrZXRLZXkoYnVja2V0KTtcbiIgXAogICAgIiBjYWxsYmFjay5AY2Fs
bCh0aGlzQXJnLCBrZXksIGtleSwgdGhpcyk7XG4iIFwKICAgICJ9IHdoaWxlICh0cnVlKTtcbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nQ29u
c3RydWN0b3JSYXdDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdDb25zdHJ1Y3RvclJhd0NvZGVMZW5n
dGggPSA3MzQ7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmluZ0NvbnN0cnVjdG9y
UmF3Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5n
Q29uc3RydWN0b3JSYXdDb2RlID0KICAgICIoZnVuY3Rpb24gKHRlbXBsYXRlKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJ2YXIgY29va2VkU2VnbWVudHMg
PSBAdG9PYmplY3QodGVtcGxhdGUsIFwiU3RyaW5nLnJhdyByZXF1aXJlcyB0ZW1wbGF0ZSBub3Qg
YmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJ2YXIgcmF3U2VnbWVudHMgPSBAdG9P
YmplY3QoY29va2VkU2VnbWVudHMucmF3LCBcIlN0cmluZy5yYXcgcmVxdWlyZXMgdGVtcGxhdGUu
cmF3IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgInZhciBudW1iZXJPZlN1
YnN0aXR1dGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiIgXAogICAgInZhciBzZWdtZW50
Q291bnQgPSBAdG9MZW5ndGgocmF3U2VnbWVudHMubGVuZ3RoKTtcbiIgXAogICAgImlmIChzZWdt
ZW50Q291bnQgPD0gMClcbiIgXAogICAgIiByZXR1cm4gJyc7XG4iIFwKICAgICJ2YXIgc3RyaW5n
RWxlbWVudHMgPSAnJztcbiIgXAogICAgImZvciAodmFyIGkgPSAwOyA7ICsraSkge1xuIiBcCiAg
ICAiIHZhciBzZWdtZW50ID0gQHRvU3RyaW5nKHJhd1NlZ21lbnRzW2ldKTtcbiIgXAogICAgIiBz
dHJpbmdFbGVtZW50cyArPSBzZWdtZW50O1xuIiBcCiAgICAiIGlmICgoaSArIDEpID09PSBzZWdt
ZW50Q291bnQpXG4iIFwKICAgICIgIHJldHVybiBzdHJpbmdFbGVtZW50cztcbiIgXAogICAgIiBp
ZiAoaSA8IG51bWJlck9mU3Vic3RpdHV0aW9ucykge1xuIiBcCiAgICAiICB2YXIgc3Vic3RpdHV0
aW9uSW5kZXhJbkFyZ3VtZW50cyA9IGkgKyAxO1xuIiBcCiAgICAiICB2YXIgbmV4dCA9IEB0b1N0
cmluZyhhcmd1bWVudHNbc3Vic3RpdHV0aW9uSW5kZXhJbkFyZ3VtZW50c10pO1xuIiBcCiAgICAi
ICBzdHJpbmdFbGVtZW50cyArPSBuZXh0O1xuIiBcCiAgICAiIH1cbiIgXAogICAgIn1cbiIgXAog
ICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nSXRlcmF0
b3JQcm90b3R5cGVOZXh0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxp
dHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5nSXRlcmF0b3JQcm90b3R5cGVO
ZXh0Q29kZUxlbmd0aCA9IDk3OTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5n
SXRlcmF0b3JQcm90b3R5cGVOZXh0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNv
bnN0IGNoYXIqIHNfc3RyaW5nSXRlcmF0b3JQcm90b3R5cGVOZXh0Q29kZSA9CiAgICAiKGZ1bmN0
aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgImlm
ICh0aGlzID09IG51bGwpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiJVN0cmluZ0l0ZXJh
dG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVu
ZGVmaW5lZFwiKTtcbiIgXAogICAgInZhciBwb3NpdGlvbiA9IHRoaXMuQHN0cmluZ0l0ZXJhdG9y
TmV4dEluZGV4O1xuIiBcCiAgICAiaWYgKHBvc2l0aW9uID09PSBAdW5kZWZpbmVkKVxuIiBcCiAg
ICAiIEB0aHJvd1R5cGVFcnJvcihcIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1
aXJlcyB0aGF0IHx0aGlzfCBiZSBhIFN0cmluZyBJdGVyYXRvciBpbnN0YW5jZVwiKTtcbiIgXAog
ICAgInZhciBkb25lID0gdHJ1ZTtcbiIgXAogICAgInZhciB2YWx1ZSA9IEB1bmRlZmluZWQ7XG4i
IFwKICAgICJ2YXIgc3RyaW5nID0gdGhpcy5AaXRlcmF0ZWRTdHJpbmc7XG4iIFwKICAgICJpZiAo
c3RyaW5nICE9PSBAdW5kZWZpbmVkKSB7XG4iIFwKICAgICIgdmFyIGxlbmd0aCA9IHN0cmluZy5s
ZW5ndGggPj4+IDA7XG4iIFwKICAgICIgaWYgKHBvc2l0aW9uID49IGxlbmd0aCkge1xuIiBcCiAg
ICAiICB0aGlzLkBpdGVyYXRlZFN0cmluZyA9IEB1bmRlZmluZWQ7XG4iIFwKICAgICIgfSBlbHNl
IHtcbiIgXAogICAgIiAgZG9uZSA9IGZhbHNlO1xuIiBcCiAgICAiICB2YXIgZmlyc3QgPSBzdHJp
bmcuQGNoYXJDb2RlQXQocG9zaXRpb24pO1xuIiBcCiAgICAiICBpZiAoZmlyc3QgPCAweEQ4MDAg
fHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBsZW5ndGgpXG4iIFwKICAgICIg
ICB2YWx1ZSA9IHN0cmluZ1twb3NpdGlvbl07XG4iIFwKICAgICIgIGVsc2Uge1xuIiBcCiAgICAi
ICAgdmFyIHNlY29uZCA9IHN0cmluZy5AY2hhckNvZGVBdChwb3NpdGlvbiArIDEpO1xuIiBcCiAg
ICAiICAgaWYgKHNlY29uZCA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkYpXG4iIFwKICAgICIg
ICAgdmFsdWUgPSBzdHJpbmdbcG9zaXRpb25dO1xuIiBcCiAgICAiICAgZWxzZVxuIiBcCiAgICAi
ICAgIHZhbHVlID0gc3RyaW5nW3Bvc2l0aW9uXSArIHN0cmluZ1twb3NpdGlvbiArIDFdO1xuIiBc
CiAgICAiICB9XG4iIFwKICAgICIgIHRoaXMuQHN0cmluZ0l0ZXJhdG9yTmV4dEluZGV4ID0gcG9z
aXRpb24gKyB2YWx1ZS5sZW5ndGg7XG4iIFwKICAgICIgfVxuIiBcCiAgICAifVxuIiBcCiAgICAi
cmV0dXJuIHtkb25lLCB2YWx1ZX07XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29u
c3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZU1hdGNoQ29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3Ry
aW5nUHJvdG90eXBlTWF0Y2hDb2RlTGVuZ3RoID0gNDA4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19zdHJpbmdQcm90b3R5cGVNYXRjaENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmlu
c2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZU1hdGNoQ29kZSA9CiAgICAiKGZ1bmN0
aW9uIChyZWdleHApXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAog
ICAgImlmICh0aGlzID09IG51bGwpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiU3RyaW5n
LnByb3RvdHlwZS5tYXRjaCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRl
ZmluZWRcIik7XG4iIFwKICAgICJpZiAocmVnZXhwICE9IG51bGwpIHtcbiIgXAogICAgIiB2YXIg
bWF0Y2hlciA9IHJlZ2V4cC5AbWF0Y2hTeW1ib2w7XG4iIFwKICAgICIgaWYgKG1hdGNoZXIgIT0g
QHVuZGVmaW5lZClcbiIgXAogICAgIiAgcmV0dXJuIG1hdGNoZXIuQGNhbGwocmVnZXhwLCB0aGlz
KTtcbiIgXAogICAgIn1cbiIgXAogICAgImxldCB0aGlzU3RyaW5nID0gQHRvU3RyaW5nKHRoaXMp
O1xuIiBcCiAgICAibGV0IGNyZWF0ZWRSZWdFeHAgPSBAcmVnRXhwQ3JlYXRlKHJlZ2V4cCwgQHVu
ZGVmaW5lZCk7XG4iIFwKICAgICJyZXR1cm4gY3JlYXRlZFJlZ0V4cC5AbWF0Y2hTeW1ib2wodGhp
c1N0cmluZyk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX3N0cmluZ1Byb3RvdHlwZVJlcGVhdFNsb3dQYXRoQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBK
U0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5n
UHJvdG90eXBlUmVwZWF0U2xvd1BhdGhDb2RlTGVuZ3RoID0gMzYzOwpzdGF0aWMgY29uc3QgSlND
OjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVSZXBlYXRTbG93UGF0aENvZGVJbnRyaW5zaWMg
PSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZVJlcGVhdFNs
b3dQYXRoQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KVxuIiBcCiAgICAie1xu
IiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoY291bnQgPT09IDAgfHwgc3Ry
aW5nLmxlbmd0aCA9PT0gMClcbiIgXAogICAgIiByZXR1cm4gXCJcIjtcbiIgXAogICAgImlmIChj
b3VudCA9PT0gMSlcbiIgXAogICAgIiByZXR1cm4gc3RyaW5nO1xuIiBcCiAgICAiaWYgKHN0cmlu
Zy5sZW5ndGggKiBjb3VudCA+IEBNQVhfU1RSSU5HX0xFTkdUSClcbiIgXAogICAgIiBAdGhyb3dP
dXRPZk1lbW9yeUVycm9yKCk7XG4iIFwKICAgICJ2YXIgcmVzdWx0ID0gXCJcIjtcbiIgXAogICAg
InZhciBvcGVyYW5kID0gc3RyaW5nO1xuIiBcCiAgICAid2hpbGUgKHRydWUpIHtcbiIgXAogICAg
IiBpZiAoY291bnQgJiAxKVxuIiBcCiAgICAiICByZXN1bHQgKz0gb3BlcmFuZDtcbiIgXAogICAg
IiBjb3VudCA+Pj0gMTtcbiIgXAogICAgIiBpZiAoIWNvdW50KVxuIiBcCiAgICAiICByZXR1cm4g
cmVzdWx0O1xuIiBcCiAgICAiIG9wZXJhbmQgKz0gb3BlcmFuZDtcbiIgXAogICAgIn1cbiIgXAog
ICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90
eXBlUmVwZWF0Q2hhcmFjdGVyc1Nsb3dQYXRoQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5nUHJvdG90
eXBlUmVwZWF0Q2hhcmFjdGVyc1Nsb3dQYXRoQ29kZUxlbmd0aCA9IDQzNTsKc3RhdGljIGNvbnN0
IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlUmVwZWF0Q2hhcmFjdGVyc1Nsb3dQYXRo
Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJv
dG90eXBlUmVwZWF0Q2hhcmFjdGVyc1Nsb3dQYXRoQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChzdHJp
bmcsIGNvdW50KVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAg
ICJ2YXIgcmVwZWF0Q291bnQgPSAoY291bnQgLyBzdHJpbmcubGVuZ3RoKSB8IDA7XG4iIFwKICAg
ICJ2YXIgcmVtYWluaW5nQ2hhcmFjdGVycyA9IGNvdW50IC0gcmVwZWF0Q291bnQgKiBzdHJpbmcu
bGVuZ3RoO1xuIiBcCiAgICAidmFyIHJlc3VsdCA9IFwiXCI7XG4iIFwKICAgICJ2YXIgb3BlcmFu
ZCA9IHN0cmluZztcbiIgXAogICAgIndoaWxlICh0cnVlKSB7XG4iIFwKICAgICIgaWYgKHJlcGVh
dENvdW50ICYgMSlcbiIgXAogICAgIiAgcmVzdWx0ICs9IG9wZXJhbmQ7XG4iIFwKICAgICIgcmVw
ZWF0Q291bnQgPj49IDE7XG4iIFwKICAgICIgaWYgKCFyZXBlYXRDb3VudClcbiIgXAogICAgIiAg
YnJlYWs7XG4iIFwKICAgICIgb3BlcmFuZCArPSBvcGVyYW5kO1xuIiBcCiAgICAifVxuIiBcCiAg
ICAiaWYgKHJlbWFpbmluZ0NoYXJhY3RlcnMpXG4iIFwKICAgICIgcmVzdWx0ICs9IEBzdHJpbmdT
dWJzdHJJbnRlcm5hbC5AY2FsbChzdHJpbmcsIDAsIHJlbWFpbmluZ0NoYXJhY3RlcnMpO1xuIiBc
CiAgICAicmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlUmVwZWF0Q29kZUNvbnN0cnVjdEFiaWxpdHkg
PSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3Ry
aW5nUHJvdG90eXBlUmVwZWF0Q29kZUxlbmd0aCA9IDQ1NjsKc3RhdGljIGNvbnN0IEpTQzo6SW50
cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlUmVwZWF0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRy
aW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlUmVwZWF0Q29kZSA9CiAgICAiKGZ1
bmN0aW9uIChjb3VudClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBc
CiAgICAiaWYgKHRoaXMgPT0gbnVsbClcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJTdHJp
bmcucHJvdG90eXBlLnJlcGVhdCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1
bmRlZmluZWRcIik7XG4iIFwKICAgICJ2YXIgc3RyaW5nID0gQHRvU3RyaW5nKHRoaXMpO1xuIiBc
CiAgICAiY291bnQgPSBAdG9JbnRlZ2VyKGNvdW50KTtcbiIgXAogICAgImlmIChjb3VudCA8IDAg
fHwgY291bnQgPT09IEBJbmZpbml0eSlcbiIgXAogICAgIiBAdGhyb3dSYW5nZUVycm9yKFwiU3Ry
aW5nLnByb3RvdHlwZS5yZXBlYXQgYXJndW1lbnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1
YWwgdG8gMCBhbmQgbm90IGJlIEluZmluaXR5XCIpO1xuIiBcCiAgICAiaWYgKHN0cmluZy5sZW5n
dGggPT09IDEpXG4iIFwKICAgICIgcmV0dXJuIEByZXBlYXRDaGFyYWN0ZXIoc3RyaW5nLCBjb3Vu
dCk7XG4iIFwKICAgICJyZXR1cm4gQHJlcGVhdFNsb3dQYXRoKHN0cmluZywgY291bnQpO1xuIiBc
CiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90
b3R5cGVQYWRTdGFydENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZVBhZFN0YXJ0Q29k
ZUxlbmd0aCA9IDgwMjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90
eXBlUGFkU3RhcnRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciog
c19zdHJpbmdQcm90b3R5cGVQYWRTdGFydENvZGUgPQogICAgIihmdW5jdGlvbiAobWF4TGVuZ3Ro
KVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAodGhp
cyA9PSBudWxsKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlN0cmluZy5wcm90b3R5cGUu
cGFkU3RhcnQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkXCIp
O1xuIiBcCiAgICAidmFyIHN0cmluZyA9IEB0b1N0cmluZyh0aGlzKTtcbiIgXAogICAgIm1heExl
bmd0aCA9IEB0b0xlbmd0aChtYXhMZW5ndGgpO1xuIiBcCiAgICAidmFyIHN0cmluZ0xlbmd0aCA9
IHN0cmluZy5sZW5ndGg7XG4iIFwKICAgICJpZiAobWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aClc
biIgXAogICAgIiByZXR1cm4gc3RyaW5nO1xuIiBcCiAgICAidmFyIGZpbGxlcjtcbiIgXAogICAg
InZhciBmaWxsU3RyaW5nID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiaWYgKGZpbGxTdHJpbmcg
PT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgZmlsbGVyID0gXCIgXCI7XG4iIFwKICAgICJlbHNl
IHtcbiIgXAogICAgIiBmaWxsZXIgPSBAdG9TdHJpbmcoZmlsbFN0cmluZyk7XG4iIFwKICAgICIg
aWYgKGZpbGxlciA9PT0gXCJcIilcbiIgXAogICAgIiAgcmV0dXJuIHN0cmluZztcbiIgXAogICAg
In1cbiIgXAogICAgImlmIChtYXhMZW5ndGggPiBATUFYX1NUUklOR19MRU5HVEgpXG4iIFwKICAg
ICIgQHRocm93T3V0T2ZNZW1vcnlFcnJvcigpO1xuIiBcCiAgICAidmFyIGZpbGxMZW5ndGggPSBt
YXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4iIFwKICAgICJ2YXIgdHJ1bmNhdGVkU3RyaW5nRmls
bGVyO1xuIiBcCiAgICAiaWYgKGZpbGxlci5sZW5ndGggPT09IDEpXG4iIFwKICAgICIgdHJ1bmNh
dGVkU3RyaW5nRmlsbGVyID0gQHJlcGVhdENoYXJhY3RlcihmaWxsZXIsIGZpbGxMZW5ndGgpO1xu
IiBcCiAgICAiZWxzZVxuIiBcCiAgICAiIHRydW5jYXRlZFN0cmluZ0ZpbGxlciA9IEByZXBlYXRD
aGFyYWN0ZXJzU2xvd1BhdGgoZmlsbGVyLCBmaWxsTGVuZ3RoKTtcbiIgXAogICAgInJldHVybiB0
cnVuY2F0ZWRTdHJpbmdGaWxsZXIgKyBzdHJpbmc7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0
IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZVBhZEVuZENvZGVDb25zdHJ1
Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0
IGludCBzX3N0cmluZ1Byb3RvdHlwZVBhZEVuZENvZGVMZW5ndGggPSA4MDA7CnN0YXRpYyBjb25z
dCBKU0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZVBhZEVuZENvZGVJbnRyaW5zaWMgPSBK
U0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZVBhZEVuZENvZGUg
PQogICAgIihmdW5jdGlvbiAobWF4TGVuZ3RoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ug
c3RyaWN0XCI7XG4iIFwKICAgICJpZiAodGhpcyA9PSBudWxsKVxuIiBcCiAgICAiIEB0aHJvd1R5
cGVFcnJvcihcIlN0cmluZy5wcm90b3R5cGUucGFkRW5kIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5v
dCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiIgXAogICAgInZhciBzdHJpbmcgPSBAdG9TdHJp
bmcodGhpcyk7XG4iIFwKICAgICJtYXhMZW5ndGggPSBAdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiIg
XAogICAgInZhciBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuIiBcCiAgICAiaWYgKG1h
eExlbmd0aCA8PSBzdHJpbmdMZW5ndGgpXG4iIFwKICAgICIgcmV0dXJuIHN0cmluZztcbiIgXAog
ICAgInZhciBmaWxsZXI7XG4iIFwKICAgICJ2YXIgZmlsbFN0cmluZyA9IEBhcmd1bWVudCgxKTtc
biIgXAogICAgImlmIChmaWxsU3RyaW5nID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiIGZpbGxl
ciA9IFwiIFwiO1xuIiBcCiAgICAiZWxzZSB7XG4iIFwKICAgICIgZmlsbGVyID0gQHRvU3RyaW5n
KGZpbGxTdHJpbmcpO1xuIiBcCiAgICAiIGlmIChmaWxsZXIgPT09IFwiXCIpXG4iIFwKICAgICIg
IHJldHVybiBzdHJpbmc7XG4iIFwKICAgICJ9XG4iIFwKICAgICJpZiAobWF4TGVuZ3RoID4gQE1B
WF9TVFJJTkdfTEVOR1RIKVxuIiBcCiAgICAiIEB0aHJvd091dE9mTWVtb3J5RXJyb3IoKTtcbiIg
XAogICAgInZhciBmaWxsTGVuZ3RoID0gbWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuIiBcCiAg
ICAidmFyIHRydW5jYXRlZFN0cmluZ0ZpbGxlcjtcbiIgXAogICAgImlmIChmaWxsZXIubGVuZ3Ro
ID09PSAxKVxuIiBcCiAgICAiIHRydW5jYXRlZFN0cmluZ0ZpbGxlciA9IEByZXBlYXRDaGFyYWN0
ZXIoZmlsbGVyLCBmaWxsTGVuZ3RoKTtcbiIgXAogICAgImVsc2VcbiIgXAogICAgIiB0cnVuY2F0
ZWRTdHJpbmdGaWxsZXIgPSBAcmVwZWF0Q2hhcmFjdGVyc1Nsb3dQYXRoKGZpbGxlciwgZmlsbExl
bmd0aCk7XG4iIFwKICAgICJyZXR1cm4gc3RyaW5nICsgdHJ1bmNhdGVkU3RyaW5nRmlsbGVyO1xu
IiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQ
cm90b3R5cGVIYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JTdHJpbmdSZXBsYWNlQ29kZUNvbnN0
cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29u
c3QgaW50IHNfc3RyaW5nUHJvdG90eXBlSGFzT2JzZXJ2YWJsZVNpZGVFZmZlY3RzRm9yU3RyaW5n
UmVwbGFjZUNvZGVMZW5ndGggPSA0NTQ7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0
cmluZ1Byb3RvdHlwZUhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclN0cmluZ1JlcGxhY2VDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5
cGVIYXNPYnNlcnZhYmxlU2lkZUVmZmVjdHNGb3JTdHJpbmdSZXBsYWNlQ29kZSA9CiAgICAiKGZ1
bmN0aW9uIChyZWdleHAsIHJlcGxhY2VyKSB7XG4iIFwKICAgICJpZiAocmVwbGFjZXIgIT09IEBy
ZWdFeHBQcm90b3R5cGVTeW1ib2xSZXBsYWNlKVxuIiBcCiAgICAiIHJldHVybiB0cnVlO1xuIiBc
CiAgICAibGV0IHJlZ2V4cEV4ZWMgPSBAdHJ5R2V0QnlJZChyZWdleHAsIFwiZXhlY1wiKTtcbiIg
XAogICAgImlmIChyZWdleHBFeGVjICE9PSBAcmVnRXhwQnVpbHRpbkV4ZWMpXG4iIFwKICAgICIg
cmV0dXJuIHRydWU7XG4iIFwKICAgICJsZXQgcmVnZXhwR2xvYmFsID0gQHRyeUdldEJ5SWQocmVn
ZXhwLCBcImdsb2JhbFwiKTtcbiIgXAogICAgImlmIChyZWdleHBHbG9iYWwgIT09IEByZWdFeHBQ
cm90b0dsb2JhbEdldHRlcilcbiIgXAogICAgIiByZXR1cm4gdHJ1ZTtcbiIgXAogICAgImxldCBy
ZWdleHBVbmljb2RlID0gQHRyeUdldEJ5SWQocmVnZXhwLCBcInVuaWNvZGVcIik7XG4iIFwKICAg
ICJpZiAocmVnZXhwVW5pY29kZSAhPT0gQHJlZ0V4cFByb3RvVW5pY29kZUdldHRlcilcbiIgXAog
ICAgIiByZXR1cm4gdHJ1ZTtcbiIgXAogICAgInJldHVybiAhQGlzUmVnRXhwT2JqZWN0KHJlZ2V4
cCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0
cmluZ1Byb3RvdHlwZVJlcGxhY2VDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVSZXBs
YWNlQ29kZUxlbmd0aCA9IDU3NTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5n
UHJvdG90eXBlUmVwbGFjZUNvZGVJbnRyaW5zaWMgPSBKU0M6OlN0cmluZ1Byb3RvdHlwZVJlcGxh
Y2VJbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlUmVwbGFjZUNvZGUgPQog
ICAgIihmdW5jdGlvbiAoc2VhcmNoLCByZXBsYWNlKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1
c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAodGhpcyA9PSBudWxsKVxuIiBcCiAgICAiIEB0aHJv
d1R5cGVFcnJvcihcIlN0cmluZy5wcm90b3R5cGUucmVwbGFjZSByZXF1aXJlcyB0aGF0IHx0aGlz
fCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAgICJpZiAoc2VhcmNoICE9IG51
bGwpIHtcbiIgXAogICAgIiBsZXQgcmVwbGFjZXIgPSBzZWFyY2guQHJlcGxhY2VTeW1ib2w7XG4i
IFwKICAgICIgaWYgKHJlcGxhY2VyICE9PSBAdW5kZWZpbmVkKSB7XG4iIFwKICAgICIgIGlmICgh
QGhhc09ic2VydmFibGVTaWRlRWZmZWN0c0ZvclN0cmluZ1JlcGxhY2Uoc2VhcmNoLCByZXBsYWNl
cikpXG4iIFwKICAgICIgICByZXR1cm4gQHRvU3RyaW5nKHRoaXMpLkByZXBsYWNlVXNpbmdSZWdF
eHAoc2VhcmNoLCByZXBsYWNlKTtcbiIgXAogICAgIiAgcmV0dXJuIHJlcGxhY2VyLkBjYWxsKHNl
YXJjaCwgdGhpcywgcmVwbGFjZSk7XG4iIFwKICAgICIgfVxuIiBcCiAgICAifVxuIiBcCiAgICAi
bGV0IHRoaXNTdHJpbmcgPSBAdG9TdHJpbmcodGhpcyk7XG4iIFwKICAgICJsZXQgc2VhcmNoU3Ry
aW5nID0gQHRvU3RyaW5nKHNlYXJjaCk7XG4iIFwKICAgICJyZXR1cm4gdGhpc1N0cmluZy5AcmVw
bGFjZVVzaW5nU3RyaW5nU2VhcmNoKHNlYXJjaFN0cmluZywgcmVwbGFjZSk7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZUdl
dERlZmF1bHRDb2xsYXRvckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZUdldERlZmF1
bHRDb2xsYXRvckNvZGVMZW5ndGggPSAxMDc7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X3N0cmluZ1Byb3RvdHlwZUdldERlZmF1bHRDb2xsYXRvckNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZUdldERlZmF1bHRDb2xsYXRv
ckNvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAicmV0dXJuIEBn
ZXREZWZhdWx0Q29sbGF0b3IuY29sbGF0b3IgfHwgKEBnZXREZWZhdWx0Q29sbGF0b3IuY29sbGF0
b3IgPSBuZXcgQENvbGxhdG9yKCkpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNv
bnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVMb2NhbGVDb21wYXJlQ29kZUNvbnN0cnVj
dEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3Qg
aW50IHNfc3RyaW5nUHJvdG90eXBlTG9jYWxlQ29tcGFyZUNvZGVMZW5ndGggPSA0OTA7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZUxvY2FsZUNvbXBhcmVDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5
cGVMb2NhbGVDb21wYXJlQ29kZSA9CiAgICAiKGZ1bmN0aW9uICh0aGF0KVxuIiBcCiAgICAie1xu
IiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAodGhpcyA9PSBudWxsKVxuIiBc
CiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZSBy
ZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwKICAg
ICJ2YXIgdGhpc1N0cmluZyA9IEB0b1N0cmluZyh0aGlzKTtcbiIgXAogICAgInZhciB0aGF0U3Ry
aW5nID0gQHRvU3RyaW5nKHRoYXQpO1xuIiBcCiAgICAidmFyIGxvY2FsZXMgPSBAYXJndW1lbnQo
MSk7XG4iIFwKICAgICJ2YXIgb3B0aW9ucyA9IEBhcmd1bWVudCgyKTtcbiIgXAogICAgImlmIChs
b2NhbGVzID09PSBAdW5kZWZpbmVkICYmIG9wdGlvbnMgPT09IEB1bmRlZmluZWQpXG4iIFwKICAg
ICIgcmV0dXJuIEBnZXREZWZhdWx0Q29sbGF0b3IoKS5jb21wYXJlKHRoaXNTdHJpbmcsIHRoYXRT
dHJpbmcpO1xuIiBcCiAgICAidmFyIGNvbGxhdG9yID0gbmV3IEBDb2xsYXRvcihsb2NhbGVzLCBv
cHRpb25zKTtcbiIgXAogICAgInJldHVybiBjb2xsYXRvci5jb21wYXJlKHRoaXNTdHJpbmcsIHRo
YXRTdHJpbmcpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxp
dHkgc19zdHJpbmdQcm90b3R5cGVTZWFyY2hDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5
cGVTZWFyY2hDb2RlTGVuZ3RoID0gNDE0OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc19z
dHJpbmdQcm90b3R5cGVTZWFyY2hDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29u
c3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVTZWFyY2hDb2RlID0KICAgICIoZnVuY3Rpb24gKHJl
Z2V4cClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiaWYg
KHRoaXMgPT0gbnVsbClcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJTdHJpbmcucHJvdG90
eXBlLnNlYXJjaCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRc
Iik7XG4iIFwKICAgICJpZiAocmVnZXhwICE9IG51bGwpIHtcbiIgXAogICAgIiB2YXIgc2VhcmNo
ZXIgPSByZWdleHAuQHNlYXJjaFN5bWJvbDtcbiIgXAogICAgIiBpZiAoc2VhcmNoZXIgIT0gQHVu
ZGVmaW5lZClcbiIgXAogICAgIiAgcmV0dXJuIHNlYXJjaGVyLkBjYWxsKHJlZ2V4cCwgdGhpcyk7
XG4iIFwKICAgICJ9XG4iIFwKICAgICJ2YXIgdGhpc1N0cmluZyA9IEB0b1N0cmluZyh0aGlzKTtc
biIgXAogICAgInZhciBjcmVhdGVkUmVnRXhwID0gQHJlZ0V4cENyZWF0ZShyZWdleHAsIEB1bmRl
ZmluZWQpO1xuIiBcCiAgICAicmV0dXJuIGNyZWF0ZWRSZWdFeHAuQHNlYXJjaFN5bWJvbCh0aGlz
U3RyaW5nKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
IHNfc3RyaW5nUHJvdG90eXBlU3BsaXRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3Ry
dWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVT
cGxpdENvZGVMZW5ndGggPSAzNTY7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmlu
Z1Byb3RvdHlwZVNwbGl0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNo
YXIqIHNfc3RyaW5nUHJvdG90eXBlU3BsaXRDb2RlID0KICAgICIoZnVuY3Rpb24gKHNlcGFyYXRv
ciwgbGltaXQpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAg
ImlmICh0aGlzID09IG51bGwpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwiU3RyaW5nLnBy
b3RvdHlwZS5zcGxpdCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmlu
ZWRcIik7XG4iIFwKICAgICJpZiAoc2VwYXJhdG9yICE9IG51bGwpIHtcbiIgXAogICAgIiB2YXIg
c3BsaXR0ZXIgPSBzZXBhcmF0b3IuQHNwbGl0U3ltYm9sO1xuIiBcCiAgICAiIGlmIChzcGxpdHRl
ciAhPSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiICByZXR1cm4gc3BsaXR0ZXIuQGNhbGwoc2VwYXJh
dG9yLCB0aGlzLCBsaW1pdCk7XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1cm4gQHN0cmluZ1Nw
bGl0RmFzdC5AY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiIgXAogICAgIn0pXG4iIFwK
OwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlU3RyaW5nQ29u
Y2F0U2xvd1BhdGhDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6
Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVTdHJpbmdDb25jYXRT
bG93UGF0aENvZGVMZW5ndGggPSAxNzM7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0
cmluZ1Byb3RvdHlwZVN0cmluZ0NvbmNhdFNsb3dQYXRoQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlU3RyaW5nQ29uY2F0U2xvd1Bh
dGhDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0
cmljdFwiO1xuIiBcCiAgICAidmFyIHJlc3VsdCA9IEB0b1N0cmluZyh0aGlzKTtcbiIgXAogICAg
ImZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyAr
K2kpXG4iIFwKICAgICIgcmVzdWx0ICs9IEB0b1N0cmluZyhhcmd1bWVudHNbaV0pO1xuIiBcCiAg
ICAicmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlQ29uY2F0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBK
U0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5n
UHJvdG90eXBlQ29uY2F0Q29kZUxlbmd0aCA9IDI3ODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmlu
c2ljIHNfc3RyaW5nUHJvdG90eXBlQ29uY2F0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5z
aWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlQ29uY2F0Q29kZSA9CiAgICAiKGZ1bmN0
aW9uIChhcmcgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAg
ICJpZiAodGhpcyA9PSBudWxsKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlN0cmluZy5w
cm90b3R5cGUuY29uY2F0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVm
aW5lZFwiKTtcbiIgXAogICAgImlmIChAYXJndW1lbnRDb3VudCgpID09PSAxKVxuIiBcCiAgICAi
IHJldHVybiBAdG9TdHJpbmcodGhpcykgKyBAdG9TdHJpbmcoYXJnKTtcbiIgXAogICAgInJldHVy
biBAdGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKEBzdHJpbmdDb25jYXRTbG93UGF0aCwgdGhpcyk7
XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmlu
Z1Byb3RvdHlwZUNyZWF0ZUhUTUxDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVDcmVh
dGVIVE1MQ29kZUxlbmd0aCA9IDQ1MDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3Ry
aW5nUHJvdG90eXBlQ3JlYXRlSFRNTENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpj
b25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZUNyZWF0ZUhUTUxDb2RlID0KICAgICIoZnVuY3Rp
b24gKGZ1bmMsIHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxuIiBcCiAgICAie1xuIiBc
CiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAoc3RyaW5nID09IG51bGwpXG4iIFwK
ICAgICIgQHRocm93VHlwZUVycm9yKGAke2Z1bmN9IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBi
ZSBudWxsIG9yIHVuZGVmaW5lZGApO1xuIiBcCiAgICAibGV0IFMgPSBAdG9TdHJpbmcoc3RyaW5n
KTtcbiIgXAogICAgImxldCBwMSA9IFwiPFwiICsgdGFnO1xuIiBcCiAgICAiaWYgKGF0dHJpYnV0
ZSkge1xuIiBcCiAgICAiIGxldCBWID0gQHRvU3RyaW5nKHZhbHVlKTtcbiIgXAogICAgIiBsZXQg
ZXNjYXBlZFYgPSBWLkByZXBsYWNlVXNpbmdSZWdFeHAoL1wiL2csICcmcXVvdDsnKTtcbiIgXAog
ICAgIiBwMSA9IHAxICsgXCIgXCIgKyBAdG9TdHJpbmcoYXR0cmlidXRlKSArICc9XCInICsgZXNj
YXBlZFYgKyAnXCInXG4iIFwKICAgICJ9XG4iIFwKICAgICJsZXQgcDIgPSBwMSArIFwiPlwiXG4i
IFwKICAgICJsZXQgcDMgPSBwMiArIFM7XG4iIFwKICAgICJsZXQgcDQgPSBwMyArIFwiPC9cIiAr
IHRhZyArIFwiPlwiO1xuIiBcCiAgICAicmV0dXJuIHA0O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVBbmNob3JDb2RlQ29u
c3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpj
b25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVBbmNob3JDb2RlTGVuZ3RoID0gMTAzOwpzdGF0aWMg
Y29uc3QgSlNDOjpJbnRyaW5zaWMgc19zdHJpbmdQcm90b3R5cGVBbmNob3JDb2RlSW50cmluc2lj
ID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVBbmNob3JD
b2RlID0KICAgICIoZnVuY3Rpb24gKHVybClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0
cmljdFwiO1xuIiBcCiAgICAicmV0dXJuIEBjcmVhdGVIVE1MKFwiU3RyaW5nLnByb3RvdHlwZS5s
aW5rXCIsIHRoaXMsIFwiYVwiLCBcIm5hbWVcIiwgdXJsKVxuIiBcCiAgICAifSlcbiIgXAo7Cgpj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVCaWdDb2RlQ29uc3Ry
dWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25z
dCBpbnQgc19zdHJpbmdQcm90b3R5cGVCaWdDb2RlTGVuZ3RoID0gOTc7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZUJpZ0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZUJpZ0NvZGUgPQogICAgIihm
dW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAg
ICJyZXR1cm4gQGNyZWF0ZUhUTUwoXCJTdHJpbmcucHJvdG90eXBlLmJpZ1wiLCB0aGlzLCBcImJp
Z1wiLCBcIlwiLCBcIlwiKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlQmxpbmtDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQ
cm90b3R5cGVCbGlua0NvZGVMZW5ndGggPSAxMDE7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNp
YyBzX3N0cmluZ1Byb3RvdHlwZUJsaW5rQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7
CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlQmxpbmtDb2RlID0KICAgICIoZnVuY3Rpb24g
KClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAicmV0dXJu
IEBjcmVhdGVIVE1MKFwiU3RyaW5nLnByb3RvdHlwZS5ibGlua1wiLCB0aGlzLCBcImJsaW5rXCIs
IFwiXCIsIFwiXCIpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFi
aWxpdHkgc19zdHJpbmdQcm90b3R5cGVCb2xkQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfc3RyaW5nUHJvdG90
eXBlQm9sZENvZGVMZW5ndGggPSA5NjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3Ry
aW5nUHJvdG90eXBlQm9sZENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX3N0cmluZ1Byb3RvdHlwZUJvbGRDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAog
ICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAicmV0dXJuIEBjcmVhdGVI
VE1MKFwiU3RyaW5nLnByb3RvdHlwZS5ib2xkXCIsIHRoaXMsIFwiYlwiLCBcIlwiLCBcIlwiKTtc
biIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5n
UHJvdG90eXBlRml4ZWRDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVGaXhlZENvZGVM
ZW5ndGggPSA5ODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBl
Rml4ZWRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJp
bmdQcm90b3R5cGVGaXhlZENvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBc
CiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJyZXR1cm4gQGNyZWF0ZUhUTUwoXCJTdHJp
bmcucHJvdG90eXBlLmZpeGVkXCIsIHRoaXMsIFwidHRcIiwgXCJcIiwgXCJcIik7XG4iIFwKICAg
ICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlw
ZUZvbnRjb2xvckNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZUZvbnRjb2xvckNvZGVM
ZW5ndGggPSAxMTc7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlw
ZUZvbnRjb2xvckNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBz
X3N0cmluZ1Byb3RvdHlwZUZvbnRjb2xvckNvZGUgPQogICAgIihmdW5jdGlvbiAoY29sb3IpXG4i
IFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiBAY3Jl
YXRlSFRNTChcIlN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yXCIsIHRoaXMsIFwiZm9udFwiLCBc
ImNvbG9yXCIsIGNvbG9yKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlRm9udHNpemVDb2RlQ29uc3RydWN0QWJpbGl0eSA9
IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc19zdHJp
bmdQcm90b3R5cGVGb250c2l6ZUNvZGVMZW5ndGggPSAxMTM7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZUZvbnRzaXplQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9J
bnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfc3RyaW5nUHJvdG90eXBlRm9udHNpemVDb2RlID0KICAg
ICIoZnVuY3Rpb24gKHNpemUpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtc
biIgXAogICAgInJldHVybiBAY3JlYXRlSFRNTChcIlN0cmluZy5wcm90b3R5cGUuZm9udHNpemVc
IiwgdGhpcywgXCJmb250XCIsIFwic2l6ZVwiLCBzaXplKTtcbiIgXAogICAgIn0pXG4iIFwKOwoK
Y29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlSXRhbGljc0NvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZUl0YWxpY3NDb2RlTGVuZ3RoID0gOTk7CnN0YXRp
YyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZUl0YWxpY3NDb2RlSW50cmlu
c2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVJdGFs
aWNzQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBz
dHJpY3RcIjtcbiIgXAogICAgInJldHVybiBAY3JlYXRlSFRNTChcIlN0cmluZy5wcm90b3R5cGUu
aXRhbGljc1wiLCB0aGlzLCBcImlcIiwgXCJcIiwgXCJcIik7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZUxpbmtDb2RlQ29u
c3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpj
b25zdCBpbnQgc19zdHJpbmdQcm90b3R5cGVMaW5rQ29kZUxlbmd0aCA9IDEwMzsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlTGlua0NvZGVJbnRyaW5zaWMgPSBK
U0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZUxpbmtDb2RlID0K
ICAgICIoZnVuY3Rpb24gKHVybClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwi
O1xuIiBcCiAgICAicmV0dXJuIEBjcmVhdGVIVE1MKFwiU3RyaW5nLnByb3RvdHlwZS5saW5rXCIs
IHRoaXMsIFwiYVwiLCBcImhyZWZcIiwgdXJsKVxuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBK
U0M6OkNvbnN0cnVjdEFiaWxpdHkgc19zdHJpbmdQcm90b3R5cGVTbWFsbENvZGVDb25zdHJ1Y3RB
YmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGlu
dCBzX3N0cmluZ1Byb3RvdHlwZVNtYWxsQ29kZUxlbmd0aCA9IDEwMTsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfc3RyaW5nUHJvdG90eXBlU21hbGxDb2RlSW50cmluc2ljID0gSlNDOjpO
b0ludHJpbnNpYzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVTbWFsbENvZGUgPQogICAg
IihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICJyZXR1cm4gQGNyZWF0ZUhUTUwoXCJTdHJpbmcucHJvdG90eXBlLnNtYWxsXCIsIHRoaXMs
IFwic21hbGxcIiwgXCJcIiwgXCJcIik7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6
Q29uc3RydWN0QWJpbGl0eSBzX3N0cmluZ1Byb3RvdHlwZVN0cmlrZUNvZGVDb25zdHJ1Y3RBYmls
aXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBz
X3N0cmluZ1Byb3RvdHlwZVN0cmlrZUNvZGVMZW5ndGggPSAxMDM7CnN0YXRpYyBjb25zdCBKU0M6
OkludHJpbnNpYyBzX3N0cmluZ1Byb3RvdHlwZVN0cmlrZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5v
SW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3N0cmluZ1Byb3RvdHlwZVN0cmlrZUNvZGUgPQogICAg
IihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwK
ICAgICJyZXR1cm4gQGNyZWF0ZUhUTUwoXCJTdHJpbmcucHJvdG90eXBlLnN0cmlrZVwiLCB0aGlz
LCBcInN0cmlrZVwiLCBcIlwiLCBcIlwiKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlND
OjpDb25zdHJ1Y3RBYmlsaXR5IHNfc3RyaW5nUHJvdG90eXBlU3ViQ29kZUNvbnN0cnVjdEFiaWxp
dHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNf
c3RyaW5nUHJvdG90eXBlU3ViQ29kZUxlbmd0aCA9IDk3OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRy
aW5zaWMgc19zdHJpbmdQcm90b3R5cGVTdWJDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc19zdHJpbmdQcm90b3R5cGVTdWJDb2RlID0KICAgICIoZnVuY3Rpb24g
KClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAicmV0dXJu
IEBjcmVhdGVIVE1MKFwiU3RyaW5nLnByb3RvdHlwZS5zdWJcIiwgdGhpcywgXCJzdWJcIiwgXCJc
IiwgXCJcIik7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX3N0cmluZ1Byb3RvdHlwZVN1cENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3N0cmluZ1Byb3RvdHlwZVN1
cENvZGVMZW5ndGggPSA5NzsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfc3RyaW5nUHJv
dG90eXBlU3VwQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNf
c3RyaW5nUHJvdG90eXBlU3VwQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4i
IFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInJldHVybiBAY3JlYXRlSFRNTChcIlN0
cmluZy5wcm90b3R5cGUuc3VwXCIsIHRoaXMsIFwic3VwXCIsIFwiXCIsIFwiXCIpO1xuIiBcCiAg
ICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5Q29u
c3RydWN0b3JPZkNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlDb25zdHJ1Y3Rvck9mQ29kZUxl
bmd0aCA9IDM1NjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheUNvbnN0
cnVjdG9yT2ZDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190
eXBlZEFycmF5Q29uc3RydWN0b3JPZkNvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJsZXQgbGVuID0gYXJndW1lbnRz
Lmxlbmd0aDtcbiIgXAogICAgImxldCBjb25zdHJ1Y3RGdW5jdGlvbiA9IHRoaXMuQGFsbG9jYXRl
VHlwZWRBcnJheTtcbiIgXAogICAgImlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9PT0gQHVuZGVmaW5l
ZClcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJUeXBlZEFycmF5Lm9mIHJlcXVpcmVzIGl0
cyB0aGlzIGFyZ3VtZW50IHRvIHN1YmNsYXNzIGEgVHlwZWRBcnJheSBjb25zdHJ1Y3RvclwiKTtc
biIgXAogICAgImxldCByZXN1bHQgPSBjb25zdHJ1Y3RGdW5jdGlvbihsZW4pO1xuIiBcCiAgICAi
Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcbiIgXAogICAgIiByZXN1bHRbaV0gPSBhcmd1
bWVudHNbaV07XG4iIFwKICAgICJyZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5Q29uc3RydWN0b3JGcm9tQ29k
ZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dDsKY29uc3QgaW50IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yRnJvbUNvZGVMZW5ndGggPSAxNzgy
OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5Q29uc3RydWN0b3JGcm9t
Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJh
eUNvbnN0cnVjdG9yRnJvbUNvZGUgPQogICAgIihmdW5jdGlvbiAoaXRlbXMgKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJsZXQgbWFwRm4gPSBAYXJndW1l
bnQoMSk7XG4iIFwKICAgICJsZXQgdGhpc0FyZztcbiIgXAogICAgImlmIChtYXBGbiAhPT0gQHVu
ZGVmaW5lZCkge1xuIiBcCiAgICAiIGlmICh0eXBlb2YgbWFwRm4gIT09IFwiZnVuY3Rpb25cIilc
biIgXAogICAgIiAgQHRocm93VHlwZUVycm9yKFwiVHlwZWRBcnJheS5mcm9tIHJlcXVpcmVzIHRo
YXQgdGhlIHNlY29uZCBhcmd1bWVudCwgd2hlbiBwcm92aWRlZCwgYmUgYSBmdW5jdGlvblwiKTtc
biIgXAogICAgIiB0aGlzQXJnID0gQGFyZ3VtZW50KDIpO1xuIiBcCiAgICAifVxuIiBcCiAgICAi
bGV0IGFycmF5TGlrZSA9IEB0b09iamVjdChpdGVtcywgXCJUeXBlZEFycmF5LmZyb20gcmVxdWly
ZXMgYW4gYXJyYXktbGlrZSBvYmplY3QgLSBub3QgbnVsbCBvciB1bmRlZmluZWRcIik7XG4iIFwK
ICAgICJsZXQgaXRlcmF0b3JNZXRob2QgPSBpdGVtcy5AaXRlcmF0b3JTeW1ib2w7XG4iIFwKICAg
ICJpZiAoaXRlcmF0b3JNZXRob2QgIT0gbnVsbCkge1xuIiBcCiAgICAiIGlmICh0eXBlb2YgaXRl
cmF0b3JNZXRob2QgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiAgQHRocm93VHlwZUVycm9y
KFwiVHlwZWRBcnJheS5mcm9tIHJlcXVpcmVzIHRoYXQgdGhlIHByb3BlcnR5IG9mIHRoZSBmaXJz
dCBhcmd1bWVudCwgaXRlbXNbU3ltYm9sLml0ZXJhdG9yXSwgd2hlbiBleGlzdHMsIGJlIGEgZnVu
Y3Rpb25cIik7XG4iIFwKICAgICIgbGV0IGFjY3VtdWxhdG9yID0gW107XG4iIFwKICAgICIgbGV0
IGsgPSAwO1xuIiBcCiAgICAiIGxldCBpdGVyYXRvciA9IGl0ZXJhdG9yTWV0aG9kLkBjYWxsKGl0
ZW1zKTtcbiIgXAogICAgIiBsZXQgd3JhcHBlciA9IHt9O1xuIiBcCiAgICAiIHdyYXBwZXIuQGl0
ZXJhdG9yU3ltYm9sID0gZnVuY3Rpb24oKSB7IHJldHVybiBpdGVyYXRvcjsgfVxuIiBcCiAgICAi
IGZvciAobGV0IHZhbHVlIG9mIHdyYXBwZXIpIHtcbiIgXAogICAgIiAgaWYgKG1hcEZuKVxuIiBc
CiAgICAiICAgQHB1dEJ5VmFsRGlyZWN0KGFjY3VtdWxhdG9yLCBrLCB0aGlzQXJnID09PSBAdW5k
ZWZpbmVkID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFsdWUsIGsp
KTtcbiIgXAogICAgIiAgZWxzZVxuIiBcCiAgICAiICAgQHB1dEJ5VmFsRGlyZWN0KGFjY3VtdWxh
dG9yLCBrLCB2YWx1ZSk7XG4iIFwKICAgICIgIGsrKztcbiIgXAogICAgIiB9XG4iIFwKICAgICIg
bGV0IGNvbnN0cnVjdEZ1bmN0aW9uID0gdGhpcy5AYWxsb2NhdGVUeXBlZEFycmF5O1xuIiBcCiAg
ICAiIGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAgIiAgQHRo
cm93VHlwZUVycm9yKFwiVHlwZWRBcnJheS5mcm9tIHJlcXVpcmVzIGl0cyB0aGlzIGFyZ3VtZW50
IHN1YmNsYXNzIGEgVHlwZWRBcnJheSBjb25zdHJ1Y3RvclwiKTtcbiIgXAogICAgIiBsZXQgcmVz
dWx0ID0gY29uc3RydWN0RnVuY3Rpb24oayk7XG4iIFwKICAgICIgZm9yIChsZXQgaSA9IDA7IGkg
PCBrOyBpKyspIFxuIiBcCiAgICAiICByZXN1bHRbaV0gPSBhY2N1bXVsYXRvcltpXTtcbiIgXAog
ICAgIiByZXR1cm4gcmVzdWx0O1xuIiBcCiAgICAifVxuIiBcCiAgICAibGV0IGFycmF5TGlrZUxl
bmd0aCA9IEB0b0xlbmd0aChhcnJheUxpa2UubGVuZ3RoKTtcbiIgXAogICAgImxldCBjb25zdHJ1
Y3RGdW5jdGlvbiA9IHRoaXMuQGFsbG9jYXRlVHlwZWRBcnJheTtcbiIgXAogICAgImlmIChjb25z
dHJ1Y3RGdW5jdGlvbiA9PT0gQHVuZGVmaW5lZClcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3Io
XCJ0aGlzIGRvZXMgbm90IHN1YmNsYXNzIGEgVHlwZWRBcnJheSBjb25zdHJ1Y3RvclwiKTtcbiIg
XAogICAgImxldCByZXN1bHQgPSBjb25zdHJ1Y3RGdW5jdGlvbihhcnJheUxpa2VMZW5ndGgpO1xu
IiBcCiAgICAibGV0IGsgPSAwO1xuIiBcCiAgICAid2hpbGUgKGsgPCBhcnJheUxpa2VMZW5ndGgp
IHtcbiIgXAogICAgIiBsZXQgdmFsdWUgPSBhcnJheUxpa2Vba107XG4iIFwKICAgICIgaWYgKG1h
cEZuKVxuIiBcCiAgICAiICByZXN1bHRba10gPSB0aGlzQXJnID09PSBAdW5kZWZpbmVkID8gbWFw
Rm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFsdWUsIGspO1xuIiBcCiAgICAi
IGVsc2VcbiIgXAogICAgIiAgcmVzdWx0W2tdID0gdmFsdWU7XG4iIFwKICAgICIgaysrO1xuIiBc
CiAgICAifVxuIiBcCiAgICAicmV0dXJuIHJlc3VsdDtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29u
c3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVJ
bnQ4QXJyYXlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZUlu
dDhBcnJheUNvZGVMZW5ndGggPSA1NTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlw
ZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVJbnQ4QXJyYXlDb2RlSW50cmluc2ljID0gSlNDOjpO
b0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZUlu
dDhBcnJheUNvZGUgPQogICAgIihmdW5jdGlvbiAobGVuZ3RoKVxuIiBcCiAgICAie1xuIiBcCiAg
ICAicmV0dXJuIG5ldyBASW50OEFycmF5KGxlbmd0aCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRl
SW50MTZBcnJheUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRl
SW50MTZBcnJheUNvZGVMZW5ndGggPSA2MDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNf
dHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVJbnQxNkFycmF5Q29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2Nh
dGVJbnQxNkFycmF5Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChsZW5ndGgpXG4iIFwKICAgICJ7XG4i
IFwKICAgICJyZXR1cm4gbmV3IEBJbnQxNkFycmF5KGxlbmd0aCk7ICAgIFxuIiBcCiAgICAifSlc
biIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5Q29uc3RydWN0
b3JBbGxvY2F0ZUludDMyQXJyYXlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5Q29uc3RydWN0
b3JBbGxvY2F0ZUludDMyQXJyYXlDb2RlTGVuZ3RoID0gNTk7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlSW50MzJBcnJheUNvZGVJbnRy
aW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlDb25zdHJ1
Y3RvckFsbG9jYXRlSW50MzJBcnJheUNvZGUgPQogICAgIihmdW5jdGlvbiAobGVuZ3RoKVxuIiBc
CiAgICAie1xuIiBcCiAgICAicmV0dXJuIG5ldyBASW50MzJBcnJheShsZW5ndGgpOyAgIFxuIiBc
CiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5
Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQzMkFycmF5Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6
OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJh
eUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50MzJBcnJheUNvZGVMZW5ndGggPSA1NzsKc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50MzJB
cnJheUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVk
QXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDMyQXJyYXlDb2RlID0KICAgICIoZnVuY3Rpb24g
KGxlbmd0aClcbiIgXAogICAgIntcbiIgXAogICAgInJldHVybiBuZXcgQFVpbnQzMkFycmF5KGxl
bmd0aCk7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBz
X3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDE2QXJyYXlDb2RlQ29uc3RydWN0QWJp
bGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQg
c190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQxNkFycmF5Q29kZUxlbmd0aCA9IDYw
OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxv
Y2F0ZVVpbnQxNkFycmF5Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNo
YXIqIHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50MTZBcnJheUNvZGUgPQogICAg
IihmdW5jdGlvbiAobGVuZ3RoKVxuIiBcCiAgICAie1xuIiBcCiAgICAicmV0dXJuIG5ldyBAVWlu
dDE2QXJyYXkobGVuZ3RoKTsgICBcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50OEFycmF5Q29k
ZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dDsKY29uc3QgaW50IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50OEFycmF5Q29k
ZUxlbmd0aCA9IDU5OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5Q29u
c3RydWN0b3JBbGxvY2F0ZVVpbnQ4QXJyYXlDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQ4QXJyYXlD
b2RlID0KICAgICIoZnVuY3Rpb24gKGxlbmd0aClcbiIgXAogICAgIntcbiIgXAogICAgInJldHVy
biBuZXcgQFVpbnQ4QXJyYXkobGVuZ3RoKTsgICBcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3Qg
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50
OENsYW1wZWRBcnJheUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9j
YXRlVWludDhDbGFtcGVkQXJyYXlDb2RlTGVuZ3RoID0gNjM7CnN0YXRpYyBjb25zdCBKU0M6Oklu
dHJpbnNpYyBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDhDbGFtcGVkQXJyYXlD
b2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5
Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQ4Q2xhbXBlZEFycmF5Q29kZSA9CiAgICAiKGZ1bmN0aW9u
IChsZW5ndGgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJyZXR1cm4gbmV3IEBVaW50OENsYW1wZWRB
cnJheShsZW5ndGgpO1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFi
aWxpdHkgc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZUZsb2F0MzJBcnJheUNvZGVDb25z
dHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNv
bnN0IGludCBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlRmxvYXQzMkFycmF5Q29kZUxl
bmd0aCA9IDU4OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5Q29uc3Ry
dWN0b3JBbGxvY2F0ZUZsb2F0MzJBcnJheUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2lj
Owpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlRmxvYXQzMkFycmF5
Q29kZSA9CiAgICAiKGZ1bmN0aW9uIChsZW5ndGgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJyZXR1
cm4gbmV3IEBGbG9hdDMyQXJyYXkobGVuZ3RoKTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3Qg
SlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVGbG9h
dDY0QXJyYXlDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZUZs
b2F0NjRBcnJheUNvZGVMZW5ndGggPSA1ODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNf
dHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVGbG9hdDY0QXJyYXlDb2RlSW50cmluc2ljID0g
SlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5Q29uc3RydWN0b3JBbGxv
Y2F0ZUZsb2F0NjRBcnJheUNvZGUgPQogICAgIihmdW5jdGlvbiAobGVuZ3RoKVxuIiBcCiAgICAi
e1xuIiBcCiAgICAicmV0dXJuIG5ldyBARmxvYXQ2NEFycmF5KGxlbmd0aCk7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5
cGVUeXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6
OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJh
eVByb3RvdHlwZVR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3JDb2RlTGVuZ3RoID0gMzkyOwpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5UHJvdG90eXBlVHlwZWRBcnJh
eVNwZWNpZXNDb25zdHJ1Y3RvckNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVUeXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9y
Q29kZSA9CiAgICAiKGZ1bmN0aW9uICh2YWx1ZSlcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNl
IHN0cmljdFwiO1xuIiBcCiAgICAibGV0IGNvbnN0cnVjdG9yID0gdmFsdWUuY29uc3RydWN0b3I7
XG4iIFwKICAgICJpZiAoY29uc3RydWN0b3IgPT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgcmV0
dXJuIEB0eXBlZEFycmF5R2V0T3JpZ2luYWxDb25zdHJ1Y3Rvcih2YWx1ZSk7XG4iIFwKICAgICJp
ZiAoIUBpc09iamVjdChjb25zdHJ1Y3RvcikpXG4iIFwKICAgICIgQHRocm93VHlwZUVycm9yKFwi
fHRoaXN8LmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuIiBc
CiAgICAiY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5Ac3BlY2llc1N5bWJvbDtcbiIgXAogICAg
ImlmIChjb25zdHJ1Y3RvciA9PSBudWxsKVxuIiBcCiAgICAiIHJldHVybiBAdHlwZWRBcnJheUdl
dE9yaWdpbmFsQ29uc3RydWN0b3IodmFsdWUpO1xuIiBcCiAgICAicmV0dXJuIGNvbnN0cnVjdG9y
O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBl
ZEFycmF5UHJvdG90eXBlVHlwZWRBcnJheUNsYW1wQXJndW1lbnRUb1N0YXJ0T3JFbmRDb2RlQ29u
c3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpj
b25zdCBpbnQgc190eXBlZEFycmF5UHJvdG90eXBlVHlwZWRBcnJheUNsYW1wQXJndW1lbnRUb1N0
YXJ0T3JFbmRDb2RlTGVuZ3RoID0gMjM2OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190
eXBlZEFycmF5UHJvdG90eXBlVHlwZWRBcnJheUNsYW1wQXJndW1lbnRUb1N0YXJ0T3JFbmRDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5UHJv
dG90eXBlVHlwZWRBcnJheUNsYW1wQXJndW1lbnRUb1N0YXJ0T3JFbmRDb2RlID0KICAgICIoZnVu
Y3Rpb24gKHZhbHVlLCBsZW5ndGgsIHVuZGVmaW5lZFZhbHVlKVxuIiBcCiAgICAie1xuIiBcCiAg
ICAiXCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJpZiAodmFsdWUgPT09IEB1bmRlZmluZWQpXG4i
IFwKICAgICIgcmV0dXJuIHVuZGVmaW5lZFZhbHVlO1xuIiBcCiAgICAibGV0IGludCA9IEB0b0lu
dGVnZXIodmFsdWUpO1xuIiBcCiAgICAiaWYgKGludCA8IDApIHtcbiIgXAogICAgIiBpbnQgKz0g
bGVuZ3RoO1xuIiBcCiAgICAiIHJldHVybiBpbnQgPCAwID8gMCA6IGludDtcbiIgXAogICAgIn1c
biIgXAogICAgInJldHVybiBpbnQgPiBsZW5ndGggPyBsZW5ndGggOiBpbnQ7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5
cGVWYWx1ZXNDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5UHJvdG90eXBlVmFsdWVzQ29kZUxl
bmd0aCA9IDEzMDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVByb3Rv
dHlwZVZhbHVlc0NvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBz
X3R5cGVkQXJyYXlQcm90b3R5cGVWYWx1ZXNDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAog
ICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAiQHR5cGVkQXJyYXlMZW5n
dGgodGhpcyk7XG4iIFwKICAgICJyZXR1cm4gbmV3IEBjcmVhdGVBcnJheUl0ZXJhdG9yKHRoaXMs
IFwidmFsdWVcIiwgQGFycmF5SXRlcmF0b3JWYWx1ZU5leHQpO1xuIiBcCiAgICAifSlcbiIgXAo7
Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBlZEFycmF5UHJvdG90eXBlS2V5c0Nv
ZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlQcm90b3R5cGVLZXlzQ29kZUxlbmd0aCA9IDEyNjsK
c3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVByb3RvdHlwZUtleXNDb2Rl
SW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKY29uc3QgY2hhciogc190eXBlZEFycmF5UHJv
dG90eXBlS2V5c0NvZGUgPQogICAgIihmdW5jdGlvbiAoKVxuIiBcCiAgICAie1xuIiBcCiAgICAi
XCJ1c2Ugc3RyaWN0XCI7XG4iIFwKICAgICJAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTtcbiIgXAog
ICAgInJldHVybiBuZXcgQGNyZWF0ZUFycmF5SXRlcmF0b3IodGhpcywgXCJrZXlcIiwgQGFycmF5
SXRlcmF0b3JLZXlOZXh0KTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5IHNfdHlwZWRBcnJheVByb3RvdHlwZUVudHJpZXNDb2RlQ29uc3RydWN0QWJpbGl0
eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190
eXBlZEFycmF5UHJvdG90eXBlRW50cmllc0NvZGVMZW5ndGggPSAxMzc7CnN0YXRpYyBjb25zdCBK
U0M6OkludHJpbnNpYyBzX3R5cGVkQXJyYXlQcm90b3R5cGVFbnRyaWVzQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZUVudHJp
ZXNDb2RlID0KICAgICIoZnVuY3Rpb24gKClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0
cmljdFwiO1xuIiBcCiAgICAiQHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7XG4iIFwKICAgICJyZXR1
cm4gbmV3IEBjcmVhdGVBcnJheUl0ZXJhdG9yKHRoaXMsIFwia2V5K3ZhbHVlXCIsIEBhcnJheUl0
ZXJhdG9yS2V5VmFsdWVOZXh0KTtcbiIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25z
dHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheVByb3RvdHlwZUV2ZXJ5Q29kZUNvbnN0cnVjdEFiaWxp
dHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNf
dHlwZWRBcnJheVByb3RvdHlwZUV2ZXJ5Q29kZUxlbmd0aCA9IDMzNDsKc3RhdGljIGNvbnN0IEpT
Qzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVByb3RvdHlwZUV2ZXJ5Q29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZUV2ZXJ5Q29k
ZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVz
ZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlz
KTtcbiIgXAogICAgInZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiaWYgKHR5
cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJv
cihcIlR5cGVkQXJyYXkucHJvdG90eXBlLmV2ZXJ5IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlv
blwiKTtcbiIgXAogICAgImZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiIgXAog
ICAgIiBpZiAoIWNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIHRoaXNbaV0sIGksIHRoaXMpKVxuIiBc
CiAgICAiICByZXR1cm4gZmFsc2U7XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1cm4gdHJ1ZTtc
biIgXAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRB
cnJheVByb3RvdHlwZUZpbGxDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5UHJvdG90eXBlRmls
bENvZGVMZW5ndGggPSAzMjA7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3R5cGVkQXJy
YXlQcm90b3R5cGVGaWxsQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNo
YXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZUZpbGxDb2RlID0KICAgICIoZnVuY3Rpb24gKHZhbHVl
IClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAibGV0IGxl
bmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAgICAibGV0IHN0YXJ0ID0gQGFy
Z3VtZW50KDEpO1xuIiBcCiAgICAibGV0IGVuZCA9IEBhcmd1bWVudCgyKTtcbiIgXAogICAgInN0
YXJ0ID0gQHR5cGVkQXJyYXlDbGFtcEFyZ3VtZW50VG9TdGFydE9yRW5kKHN0YXJ0LCBsZW5ndGgs
IDApO1xuIiBcCiAgICAiZW5kID0gQHR5cGVkQXJyYXlDbGFtcEFyZ3VtZW50VG9TdGFydE9yRW5k
KGVuZCwgbGVuZ3RoLCBsZW5ndGgpO1xuIiBcCiAgICAiZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwg
ZW5kOyBpKyspXG4iIFwKICAgICIgdGhpc1tpXSA9IHZhbHVlO1xuIiBcCiAgICAicmV0dXJuIHRo
aXM7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5
cGVkQXJyYXlQcm90b3R5cGVGaW5kQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVByb3RvdHlw
ZUZpbmRDb2RlTGVuZ3RoID0gMzU1OwpzdGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBl
ZEFycmF5UHJvdG90eXBlRmluZENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25z
dCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaW5kQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChj
YWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAg
InZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTtcbiIgXAogICAgInZhciB0aGlz
QXJnID0gQGFyZ3VtZW50KDEpO1xuIiBcCiAgICAiaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJm
dW5jdGlvblwiKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJyYXkucHJvdG90
eXBlLmZpbmQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuIiBcCiAgICAiIGxldCBlbGVtID0gdGhpc1tp
XTtcbiIgXAogICAgIiBpZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywgZWxlbSwgaSwgdGhpcykp
XG4iIFwKICAgICIgIHJldHVybiBlbGVtO1xuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJuIEB1
bmRlZmluZWQ7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaW5kSW5kZXhDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpT
Qzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFy
cmF5UHJvdG90eXBlRmluZEluZGV4Q29kZUxlbmd0aCA9IDMzMTsKc3RhdGljIGNvbnN0IEpTQzo6
SW50cmluc2ljIHNfdHlwZWRBcnJheVByb3RvdHlwZUZpbmRJbmRleENvZGVJbnRyaW5zaWMgPSBK
U0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaW5kSW5k
ZXhDb2RlID0KICAgICIoZnVuY3Rpb24gKGNhbGxiYWNrIClcbiIgXAogICAgIntcbiIgXAogICAg
IlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAidmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3Ro
KHRoaXMpO1xuIiBcCiAgICAidmFyIHRoaXNBcmcgPSBAYXJndW1lbnQoMSk7XG4iIFwKICAgICJp
ZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgQHRocm93VHlw
ZUVycm9yKFwiVHlwZWRBcnJheS5wcm90b3R5cGUuZmluZEluZGV4IGNhbGxiYWNrIG11c3QgYmUg
YSBmdW5jdGlvblwiKTtcbiIgXAogICAgImZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHtcbiIgXAogICAgIiBpZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywgdGhpc1tpXSwgaSwgdGhp
cykpXG4iIFwKICAgICIgIHJldHVybiBpO1xuIiBcCiAgICAifVxuIiBcCiAgICAicmV0dXJuIC0x
O1xuIiBcCiAgICAifSlcbiIgXAo7Cgpjb25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc190eXBl
ZEFycmF5UHJvdG90eXBlRm9yRWFjaENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1
Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlQcm90b3R5
cGVGb3JFYWNoQ29kZUxlbmd0aCA9IDI5ODsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNf
dHlwZWRBcnJheVByb3RvdHlwZUZvckVhY2hDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc190eXBlZEFycmF5UHJvdG90eXBlRm9yRWFjaENvZGUgPQogICAgIihm
dW5jdGlvbiAoY2FsbGJhY2sgKVxuIiBcCiAgICAie1xuIiBcCiAgICAiXCJ1c2Ugc3RyaWN0XCI7
XG4iIFwKICAgICJ2YXIgbGVuZ3RoID0gQHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7XG4iIFwKICAg
ICJ2YXIgdGhpc0FyZyA9IEBhcmd1bWVudCgxKTtcbiIgXAogICAgImlmICh0eXBlb2YgY2FsbGJh
Y2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJyb3IoXCJUeXBlZEFy
cmF5LnByb3RvdHlwZS5mb3JFYWNoIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiIg
XAogICAgImZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4iIFwKICAgICIgY2FsbGJh
Y2suQGNhbGwodGhpc0FyZywgdGhpc1tpXSwgaSwgdGhpcyk7XG4iIFwKICAgICJ9KVxuIiBcCjsK
CmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVTb21lQ29k
ZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVByb3RvdHlwZVNvbWVDb2RlTGVuZ3RoID0gMzMyOwpz
dGF0aWMgY29uc3QgSlNDOjpJbnRyaW5zaWMgc190eXBlZEFycmF5UHJvdG90eXBlU29tZUNvZGVJ
bnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90
b3R5cGVTb21lQ29kZSA9CiAgICAiKGZ1bmN0aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4i
IFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBsZW5ndGggPSBAdHlwZWRBcnJh
eUxlbmd0aCh0aGlzKTtcbiIgXAogICAgInZhciB0aGlzQXJnID0gQGFyZ3VtZW50KDEpO1xuIiBc
CiAgICAiaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiIEB0
aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJyYXkucHJvdG90eXBlLnNvbWUgY2FsbGJhY2sgbXVzdCBi
ZSBhIGZ1bmN0aW9uXCIpO1xuIiBcCiAgICAiZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
Kykge1xuIiBcCiAgICAiIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCB0aGlzW2ldLCBpLCB0
aGlzKSlcbiIgXAogICAgIiAgcmV0dXJuIHRydWU7XG4iIFwKICAgICJ9XG4iIFwKICAgICJyZXR1
cm4gZmFsc2U7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0
eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVTb3J0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVBy
b3RvdHlwZVNvcnRDb2RlTGVuZ3RoID0gMTE2NjsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfdHlwZWRBcnJheVByb3RvdHlwZVNvcnRDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNp
YzsKY29uc3QgY2hhciogc190eXBlZEFycmF5UHJvdG90eXBlU29ydENvZGUgPQogICAgIihmdW5j
dGlvbiAoY29tcGFyYXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xu
IiBcCiAgICAiZnVuY3Rpb24gbWluKGEsIGIpXG4iIFwKICAgICJ7XG4iIFwKICAgICIgcmV0dXJu
IGEgPCBiID8gYSA6IGI7XG4iIFwKICAgICJ9XG4iIFwKICAgICJmdW5jdGlvbiBtZXJnZShkc3Qs
IHNyYywgc3JjSW5kZXgsIHNyY0VuZCwgd2lkdGgsIGNvbXBhcmF0b3IpXG4iIFwKICAgICJ7XG4i
IFwKICAgICIgdmFyIGxlZnQgPSBzcmNJbmRleDtcbiIgXAogICAgIiB2YXIgbGVmdEVuZCA9IG1p
bihsZWZ0ICsgd2lkdGgsIHNyY0VuZCk7XG4iIFwKICAgICIgdmFyIHJpZ2h0ID0gbGVmdEVuZDtc
biIgXAogICAgIiB2YXIgcmlnaHRFbmQgPSBtaW4ocmlnaHQgKyB3aWR0aCwgc3JjRW5kKTtcbiIg
XAogICAgIiBmb3IgKHZhciBkc3RJbmRleCA9IGxlZnQ7IGRzdEluZGV4IDwgcmlnaHRFbmQ7ICsr
ZHN0SW5kZXgpIHtcbiIgXAogICAgIiAgaWYgKHJpZ2h0IDwgcmlnaHRFbmQpIHtcbiIgXAogICAg
IiAgIGlmIChsZWZ0ID49IGxlZnRFbmQgfHwgY29tcGFyYXRvcihzcmNbcmlnaHRdLCBzcmNbbGVm
dF0pIDwgMCkge1xuIiBcCiAgICAiICAgIGRzdFtkc3RJbmRleF0gPSBzcmNbcmlnaHQrK107XG4i
IFwKICAgICIgICAgY29udGludWU7XG4iIFwKICAgICIgICB9XG4iIFwKICAgICIgIH1cbiIgXAog
ICAgIiAgZHN0W2RzdEluZGV4XSA9IHNyY1tsZWZ0KytdO1xuIiBcCiAgICAiIH1cbiIgXAogICAg
In1cbiIgXAogICAgImZ1bmN0aW9uIG1lcmdlU29ydChhcnJheSwgdmFsdWVDb3VudCwgY29tcGFy
YXRvcilcbiIgXAogICAgIntcbiIgXAogICAgIiB2YXIgYnVmZmVyID0gWyBdO1xuIiBcCiAgICAi
IGJ1ZmZlci5sZW5ndGggPSB2YWx1ZUNvdW50O1xuIiBcCiAgICAiIHZhciBkc3QgPSBidWZmZXI7
XG4iIFwKICAgICIgdmFyIHNyYyA9IGFycmF5O1xuIiBcCiAgICAiIGZvciAodmFyIHdpZHRoID0g
MTsgd2lkdGggPCB2YWx1ZUNvdW50OyB3aWR0aCAqPSAyKSB7XG4iIFwKICAgICIgIGZvciAodmFy
IHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCB2YWx1ZUNvdW50OyBzcmNJbmRleCArPSAyICogd2lk
dGgpXG4iIFwKICAgICIgICBtZXJnZShkc3QsIHNyYywgc3JjSW5kZXgsIHZhbHVlQ291bnQsIHdp
ZHRoLCBjb21wYXJhdG9yKTtcbiIgXAogICAgIiAgdmFyIHRtcCA9IHNyYztcbiIgXAogICAgIiAg
c3JjID0gZHN0O1xuIiBcCiAgICAiICBkc3QgPSB0bXA7XG4iIFwKICAgICIgfVxuIiBcCiAgICAi
IGlmIChzcmMgIT0gYXJyYXkpIHtcbiIgXAogICAgIiAgZm9yKHZhciBpID0gMDsgaSA8IHZhbHVl
Q291bnQ7IGkrKylcbiIgXAogICAgIiAgIGFycmF5W2ldID0gc3JjW2ldO1xuIiBcCiAgICAiIH1c
biIgXAogICAgIn1cbiIgXAogICAgInZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlz
KTtcbiIgXAogICAgImlmIChsZW5ndGggPCAyKVxuIiBcCiAgICAiIHJldHVybjtcbiIgXAogICAg
ImlmICh0eXBlb2YgY29tcGFyYXRvciA9PSBcImZ1bmN0aW9uXCIpXG4iIFwKICAgICIgbWVyZ2VT
b3J0KHRoaXMsIGxlbmd0aCwgY29tcGFyYXRvcik7XG4iIFwKICAgICJlbHNlXG4iIFwKICAgICIg
QHR5cGVkQXJyYXlTb3J0KHRoaXMpO1xuIiBcCiAgICAicmV0dXJuIHRoaXM7XG4iIFwKICAgICJ9
KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5
cGVTdWJhcnJheUNvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7CmNvbnN0IGludCBzX3R5cGVkQXJyYXlQcm90b3R5cGVTdWJhcnJheUNv
ZGVMZW5ndGggPSAzNTI7CnN0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX3R5cGVkQXJyYXlQ
cm90b3R5cGVTdWJhcnJheUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVTdWJhcnJheUNvZGUgPQogICAgIihmdW5jdGlvbiAo
YmVnaW4sIGVuZClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAg
ICAiaWYgKCFAaXNUeXBlZEFycmF5Vmlldyh0aGlzKSlcbiIgXAogICAgIiBAdGhyb3dUeXBlRXJy
b3IoXCJ8dGhpc3wgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlld1wiKTtcbiIgXAogICAgImxl
dCBzdGFydCA9IEB0b0ludGVnZXIoYmVnaW4pO1xuIiBcCiAgICAibGV0IGZpbmlzaDtcbiIgXAog
ICAgImlmIChlbmQgIT09IEB1bmRlZmluZWQpXG4iIFwKICAgICIgZmluaXNoID0gQHRvSW50ZWdl
cihlbmQpO1xuIiBcCiAgICAibGV0IGNvbnN0cnVjdG9yID0gQHR5cGVkQXJyYXlTcGVjaWVzQ29u
c3RydWN0b3IodGhpcyk7XG4iIFwKICAgICJyZXR1cm4gQHR5cGVkQXJyYXlTdWJhcnJheUNyZWF0
ZS5AY2FsbCh0aGlzLCBzdGFydCwgZmluaXNoLCBjb25zdHJ1Y3Rvcik7XG4iIFwKICAgICJ9KVxu
IiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVS
ZWR1Y2VDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90
Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5UHJvdG90eXBlUmVkdWNlQ29kZUxlbmd0
aCA9IDU4MDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVByb3RvdHlw
ZVJlZHVjZUNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBjaGFyKiBzX3R5
cGVkQXJyYXlQcm90b3R5cGVSZWR1Y2VDb2RlID0KICAgICIoZnVuY3Rpb24gKGNhbGxiYWNrIClc
biIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAidmFyIGxlbmd0
aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAgICAiaWYgKHR5cGVvZiBjYWxsYmFj
ayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJy
YXkucHJvdG90eXBlLnJlZHVjZSBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4iIFwK
ICAgICJ2YXIgYXJndW1lbnRDb3VudCA9IEBhcmd1bWVudENvdW50KCk7XG4iIFwKICAgICJpZiAo
bGVuZ3RoID09PSAwICYmIGFyZ3VtZW50Q291bnQgPCAyKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVF
cnJvcihcIlR5cGVkQXJyYXkucHJvdG90eXBlLnJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5v
IGluaXRpYWwgdmFsdWVcIik7XG4iIFwKICAgICJ2YXIgYWNjdW11bGF0b3IsIGsgPSAwO1xuIiBc
CiAgICAiaWYgKGFyZ3VtZW50Q291bnQgPiAxKVxuIiBcCiAgICAiIGFjY3VtdWxhdG9yID0gQGFy
Z3VtZW50KDEpO1xuIiBcCiAgICAiZWxzZVxuIiBcCiAgICAiIGFjY3VtdWxhdG9yID0gdGhpc1tr
KytdO1xuIiBcCiAgICAiZm9yICg7IGsgPCBsZW5ndGg7IGsrKylcbiIgXAogICAgIiBhY2N1bXVs
YXRvciA9IGNhbGxiYWNrLkBjYWxsKEB1bmRlZmluZWQsIGFjY3VtdWxhdG9yLCB0aGlzW2tdLCBr
LCB0aGlzKTtcbiIgXAogICAgInJldHVybiBhY2N1bXVsYXRvcjtcbiIgXAogICAgIn0pXG4iIFwK
OwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJheVByb3RvdHlwZVJlZHVj
ZVJpZ2h0Q29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5v
dENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVByb3RvdHlwZVJlZHVjZVJpZ2h0Q29k
ZUxlbmd0aCA9IDU5NTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJheVBy
b3RvdHlwZVJlZHVjZVJpZ2h0Q29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0
IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZVJlZHVjZVJpZ2h0Q29kZSA9CiAgICAiKGZ1bmN0
aW9uIChjYWxsYmFjayApXG4iIFwKICAgICJ7XG4iIFwKICAgICJcInVzZSBzdHJpY3RcIjtcbiIg
XAogICAgInZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTtcbiIgXAogICAgImlm
ICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIilcbiIgXAogICAgIiBAdGhyb3dUeXBl
RXJyb3IoXCJUeXBlZEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCBjYWxsYmFjayBtdXN0IGJl
IGEgZnVuY3Rpb25cIik7XG4iIFwKICAgICJ2YXIgYXJndW1lbnRDb3VudCA9IEBhcmd1bWVudENv
dW50KCk7XG4iIFwKICAgICJpZiAobGVuZ3RoID09PSAwICYmIGFyZ3VtZW50Q291bnQgPCAyKVxu
IiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihcIlR5cGVkQXJyYXkucHJvdG90eXBlLnJlZHVjZVJp
Z2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKTtcbiIgXAogICAgInZh
ciBhY2N1bXVsYXRvciwgayA9IGxlbmd0aCAtIDE7XG4iIFwKICAgICJpZiAoYXJndW1lbnRDb3Vu
dCA+IDEpXG4iIFwKICAgICIgYWNjdW11bGF0b3IgPSBAYXJndW1lbnQoMSk7XG4iIFwKICAgICJl
bHNlXG4iIFwKICAgICIgYWNjdW11bGF0b3IgPSB0aGlzW2stLV07XG4iIFwKICAgICJmb3IgKDsg
ayA+PSAwOyBrLS0pXG4iIFwKICAgICIgYWNjdW11bGF0b3IgPSBjYWxsYmFjay5AY2FsbChAdW5k
ZWZpbmVkLCBhY2N1bXVsYXRvciwgdGhpc1trXSwgaywgdGhpcyk7XG4iIFwKICAgICJyZXR1cm4g
YWNjdW11bGF0b3I7XG4iIFwKICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJp
bGl0eSBzX3R5cGVkQXJyYXlQcm90b3R5cGVNYXBDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6
Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5
UHJvdG90eXBlTWFwQ29kZUxlbmd0aCA9IDc4NTsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2lj
IHNfdHlwZWRBcnJheVByb3RvdHlwZU1hcENvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2lj
Owpjb25zdCBjaGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVNYXBDb2RlID0KICAgICIoZnVuY3Rp
b24gKGNhbGxiYWNrIClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBc
CiAgICAidmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAgICAiaWYg
KHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVF
cnJvcihcIlR5cGVkQXJyYXkucHJvdG90eXBlLm1hcCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rp
b25cIik7XG4iIFwKICAgICJ2YXIgdGhpc0FyZyA9IEBhcmd1bWVudCgxKTtcbiIgXAogICAgInZh
ciBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4iIFwKICAgICJ2YXIgcmVzdWx0O1xu
IiBcCiAgICAiaWYgKGNvbnN0cnVjdG9yID09PSBAdW5kZWZpbmVkKVxuIiBcCiAgICAiIHJlc3Vs
dCA9IG5ldyAoQHR5cGVkQXJyYXlHZXRPcmlnaW5hbENvbnN0cnVjdG9yKHRoaXMpKShsZW5ndGgp
O1xuIiBcCiAgICAiZWxzZSB7XG4iIFwKICAgICIgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IGNv
bnN0cnVjdG9yLkBzcGVjaWVzU3ltYm9sO1xuIiBcCiAgICAiIGlmIChzcGVjaWVzQ29uc3RydWN0
b3IgPT09IG51bGwgfHwgc3BlY2llc0NvbnN0cnVjdG9yID09PSBAdW5kZWZpbmVkKVxuIiBcCiAg
ICAiICByZXN1bHQgPSBuZXcgKEB0eXBlZEFycmF5R2V0T3JpZ2luYWxDb25zdHJ1Y3Rvcih0aGlz
KSkobGVuZ3RoKTtcbiIgXAogICAgIiBlbHNlIHtcbiIgXAogICAgIiAgcmVzdWx0ID0gbmV3IHNw
ZWNpZXNDb25zdHJ1Y3RvcihsZW5ndGgpO1xuIiBcCiAgICAiICBAdHlwZWRBcnJheUxlbmd0aChy
ZXN1bHQpO1xuIiBcCiAgICAiIH1cbiIgXAogICAgIn1cbiIgXAogICAgImZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHtcbiIgXAogICAgIiB2YXIgbWFwcGVkVmFsdWUgPSBjYWxsYmFj
ay5AY2FsbCh0aGlzQXJnLCB0aGlzW2ldLCBpLCB0aGlzKTtcbiIgXAogICAgIiByZXN1bHRbaV0g
PSBtYXBwZWRWYWx1ZTtcbiIgXAogICAgIn1cbiIgXAogICAgInJldHVybiByZXN1bHQ7XG4iIFwK
ICAgICJ9KVxuIiBcCjsKCmNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX3R5cGVkQXJyYXlQ
cm90b3R5cGVGaWx0ZXJDb2RlQ29uc3RydWN0QWJpbGl0eSA9IEpTQzo6Q29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0Owpjb25zdCBpbnQgc190eXBlZEFycmF5UHJvdG90eXBlRmlsdGVy
Q29kZUxlbmd0aCA9IDkxNDsKc3RhdGljIGNvbnN0IEpTQzo6SW50cmluc2ljIHNfdHlwZWRBcnJh
eVByb3RvdHlwZUZpbHRlckNvZGVJbnRyaW5zaWMgPSBKU0M6Ok5vSW50cmluc2ljOwpjb25zdCBj
aGFyKiBzX3R5cGVkQXJyYXlQcm90b3R5cGVGaWx0ZXJDb2RlID0KICAgICIoZnVuY3Rpb24gKGNh
bGxiYWNrIClcbiIgXAogICAgIntcbiIgXAogICAgIlwidXNlIHN0cmljdFwiO1xuIiBcCiAgICAi
dmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpO1xuIiBcCiAgICAiaWYgKHR5cGVv
ZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKVxuIiBcCiAgICAiIEB0aHJvd1R5cGVFcnJvcihc
IlR5cGVkQXJyYXkucHJvdG90eXBlLmZpbHRlciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25c
Iik7XG4iIFwKICAgICJ2YXIgdGhpc0FyZyA9IEBhcmd1bWVudCgxKTtcbiIgXAogICAgInZhciBr
ZXB0ID0gW107XG4iIFwKICAgICJmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4i
IFwKICAgICIgdmFyIHZhbHVlID0gdGhpc1tpXTtcbiIgXAogICAgIiBpZiAoY2FsbGJhY2suQGNh
bGwodGhpc0FyZywgdmFsdWUsIGksIHRoaXMpKVxuIiBcCiAgICAiICBrZXB0LkBwdXNoKHZhbHVl
KTtcbiIgXAogICAgIn1cbiIgXAogICAgInZhciBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0
b3I7XG4iIFwKICAgICJ2YXIgcmVzdWx0O1xuIiBcCiAgICAidmFyIHJlc3VsdExlbmd0aCA9IGtl
cHQubGVuZ3RoO1xuIiBcCiAgICAiaWYgKGNvbnN0cnVjdG9yID09PSBAdW5kZWZpbmVkKVxuIiBc
CiAgICAiIHJlc3VsdCA9IG5ldyAoQHR5cGVkQXJyYXlHZXRPcmlnaW5hbENvbnN0cnVjdG9yKHRo
aXMpKShyZXN1bHRMZW5ndGgpO1xuIiBcCiAgICAiZWxzZSB7XG4iIFwKICAgICIgdmFyIHNwZWNp
ZXNDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLkBzcGVjaWVzU3ltYm9sO1xuIiBcCiAgICAiIGlm
IChzcGVjaWVzQ29uc3RydWN0b3IgPT09IG51bGwgfHwgc3BlY2llc0NvbnN0cnVjdG9yID09PSBA
dW5kZWZpbmVkKVxuIiBcCiAgICAiICByZXN1bHQgPSBuZXcgKEB0eXBlZEFycmF5R2V0T3JpZ2lu
YWxDb25zdHJ1Y3Rvcih0aGlzKSkocmVzdWx0TGVuZ3RoKTtcbiIgXAogICAgIiBlbHNlIHtcbiIg
XAogICAgIiAgcmVzdWx0ID0gbmV3IHNwZWNpZXNDb25zdHJ1Y3RvcihyZXN1bHRMZW5ndGgpO1xu
IiBcCiAgICAiICBAdHlwZWRBcnJheUxlbmd0aChyZXN1bHQpO1xuIiBcCiAgICAiIH1cbiIgXAog
ICAgIn1cbiIgXAogICAgImZvciAodmFyIGkgPSAwOyBpIDwga2VwdC5sZW5ndGg7IGkrKylcbiIg
XAogICAgIiByZXN1bHRbaV0gPSBrZXB0W2ldO1xuIiBcCiAgICAicmV0dXJuIHJlc3VsdDtcbiIg
XAogICAgIn0pXG4iIFwKOwoKY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmlsaXR5IHNfdHlwZWRBcnJh
eVByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6OkNvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKY29uc3QgaW50IHNfdHlwZWRBcnJheVByb3Rv
dHlwZVRvTG9jYWxlU3RyaW5nQ29kZUxlbmd0aCA9IDIyOTsKc3RhdGljIGNvbnN0IEpTQzo6SW50
cmluc2ljIHNfdHlwZWRBcnJheVByb3RvdHlwZVRvTG9jYWxlU3RyaW5nQ29kZUludHJpbnNpYyA9
IEpTQzo6Tm9JbnRyaW5zaWM7CmNvbnN0IGNoYXIqIHNfdHlwZWRBcnJheVByb3RvdHlwZVRvTG9j
YWxlU3RyaW5nQ29kZSA9CiAgICAiKGZ1bmN0aW9uICgpXG4iIFwKICAgICJ7XG4iIFwKICAgICJc
InVzZSBzdHJpY3RcIjtcbiIgXAogICAgInZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0
aGlzKTtcbiIgXAogICAgImlmIChsZW5ndGggPT0gMClcbiIgXAogICAgIiByZXR1cm4gXCJcIjtc
biIgXAogICAgInZhciBzdHJpbmcgPSB0aGlzWzBdLnRvTG9jYWxlU3RyaW5nKCk7XG4iIFwKICAg
ICJmb3IgKHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKVxuIiBcCiAgICAiIHN0cmluZyArPSBc
IixcIiArIHRoaXNbaV0udG9Mb2NhbGVTdHJpbmcoKTtcbiIgXAogICAgInJldHVybiBzdHJpbmc7
XG4iIFwKICAgICJ9KVxuIiBcCjsKCgojZGVmaW5lIERFRklORV9CVUlMVElOX0dFTkVSQVRPUihj
b2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBvdmVycmlkZGVuTmFtZSwgYXJndW1lbnRDb3VudCkgXApK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZSogY29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJiB2bSkg
XAp7XAogICAgcmV0dXJuIHZtLmJ1aWx0aW5FeGVjdXRhYmxlcygpLT5jb2RlTmFtZSMjRXhlY3V0
YWJsZSgpLT5saW5rKHZtLCB2bS5idWlsdGluRXhlY3V0YWJsZXMoKS0+Y29kZU5hbWUjI1NvdXJj
ZSgpLCBzdGQ6Om51bGxvcHQsIHNfIyNjb2RlTmFtZSMjSW50cmluc2ljKTsgfQpKU0NfRk9SRUFD
SF9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQojdW5kZWYgREVGSU5FX0JV
SUxUSU5fR0VORVJBVE9SCgoKfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332353</attachid>
            <date>2018-01-25 21:34:08 -0800</date>
            <delta_ts>2018-01-26 11:09:14 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>take-2.patch</filename>
            <type>text/plain</type>
            <size>2685</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDY5M2VmNzNlNTYxLi45ZGM3OThjYWM2MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTgtMDEtMjUgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBKYXZhU2NyaXB0Q29y
ZSBidWlsdGlucyBzaG91bGQgYmUgcGFydGlhbGx5IG1pbmlmaWVkIGluIFJlbGVhc2UgYnVpbGRz
IG5vdCBEZWJ1ZyBidWlsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MjE2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19tb2RlbC5weToKKyAgICAgICAg
KEJ1aWx0aW5GdW5jdGlvbi5mcm9tU3RyaW5nKToKKyAgICAgICAgKEJ1aWx0aW5GdW5jdGlvbi5m
cm9tU3RyaW5nLnJlZHVjZUxlYWRpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgQXBwbHkgbWluaWZp
Y2F0aW9ucyBvbiBSZWxlYXNlIGJ1aWxkcyBpbnN0ZWFkIG9mIERlYnVnIGJ1aWxkcy4KKyAgICAg
ICAgQWxzbyByZWR1Y2UgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gNCBzcGFjZXMgdG8gMSBzcGFj
ZS4KKwogMjAxOC0wMS0yNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4K
IAogICAgICAgICBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNz
L3NjcmlwdGluZy0xL3RoZS1zY3JpcHQtZWxlbWVudC9tb2R1bGUvZXJyb3JoYW5kbGluZy5odG1s
IGNyYXNoZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0
aW5zL2J1aWx0aW5zX21vZGVsLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVp
bHRpbnMvYnVpbHRpbnNfbW9kZWwucHkKaW5kZXggMDIzNDBiNzUwYmUuLjhkMTg4NTEyOGY5IDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGlu
c19tb2RlbC5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9i
dWlsdGluc19tb2RlbC5weQpAQCAtNTcsNiArNTcsNyBAQCBrZXlWYWx1ZUFubm90YXRpb25Db21t
ZW50UmVnRXhwID0gcmUuY29tcGlsZShyIl5cL1wvIEAoXHcrKT0oW149XSs/KVxuIiwgcmUuTVVM
VAogZmxhZ0Fubm90YXRpb25Db21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIl5cL1wvIEAoXHcr
KVtePV0qP1xuIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQogbGluZVdpdGhPbmx5U2luZ2xl
TGluZUNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIiXlxzKlwvXC9cbiIsIHJlLk1VTFRJTElO
RSB8IHJlLkRPVEFMTCkKIGxpbmVXaXRoVHJhaWxpbmdTaW5nbGVMaW5lQ29tbWVudFJlZ0V4cCA9
IHJlLmNvbXBpbGUociJccypcL1wvXG4iLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwpCitsZWFk
aW5nSW5kZW50V2hpdGVzcGFjZVJlZ0V4cCA9IHJlLmNvbXBpbGUociJeICsiLCByZS5NVUxUSUxJ
TkUgfCByZS5ET1RBTEwpCiBtdWx0aXBsZUVtcHR5TGluZXNSZWdFeHAgPSByZS5jb21waWxlKHIi
XG57Mix9IiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQogCiBjbGFzcyBQYXJzZUV4Y2VwdGlv
bihFeGNlcHRpb24pOgpAQCAtMTI1LDkgKzEyNiwxMyBAQCBjbGFzcyBCdWlsdGluRnVuY3Rpb246
CiAgICAgICAgICAgICBvdmVycmlkZGVuX25hbWUgPSBvdmVycmlkZGVuTmFtZU1hdGNoLmdyb3Vw
KDEpCiAgICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2UgPSBmdW5jdGlvbk92ZXJyaWRkZW5OYW1l
UmVnRXhwLnN1YigiIiwgZnVuY3Rpb25fc291cmNlKQogCi0gICAgICAgIGlmIG9zLmdldGVudigi
Q09ORklHVVJBVElPTiIsICJEZWJ1ZyIpLnN0YXJ0c3dpdGgoIkRlYnVnIik6CisgICAgICAgIGlm
IG5vdCBvcy5nZXRlbnYoIkNPTkZJR1VSQVRJT04iLCAiRGVidWciKS5zdGFydHN3aXRoKCJEZWJ1
ZyIpOgorICAgICAgICAgICAgZGVmIHJlZHVjZUxlYWRpbmdXaGl0ZXNwYWNlKG1hdGNoKToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIiAiICogKChsZW4obWF0Y2guZ3JvdXAoMCkpIC8gNCkgLSAx
KQorCiAgICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2UgPSBsaW5lV2l0aE9ubHlTaW5nbGVMaW5l
Q29tbWVudFJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3NvdXJjZSkKICAgICAgICAgICAgIGZ1bmN0
aW9uX3NvdXJjZSA9IGxpbmVXaXRoVHJhaWxpbmdTaW5nbGVMaW5lQ29tbWVudFJlZ0V4cC5zdWIo
IlxuIiwgZnVuY3Rpb25fc291cmNlKQorICAgICAgICAgICAgZnVuY3Rpb25fc291cmNlID0gcmUu
c3ViKGxlYWRpbmdJbmRlbnRXaGl0ZXNwYWNlUmVnRXhwLCByZWR1Y2VMZWFkaW5nV2hpdGVzcGFj
ZSwgZnVuY3Rpb25fc291cmNlKQogICAgICAgICAgICAgZnVuY3Rpb25fc291cmNlID0gbXVsdGlw
bGVFbXB0eUxpbmVzUmVnRXhwLnN1YigiXG4iLCBmdW5jdGlvbl9zb3VyY2UpCiAKICAgICAgICAg
ZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uTmFtZVJlZ0V4cC5maW5kYWxsKGZ1bmN0aW9uX3NvdXJj
ZSlbMF0K
</data>
<flag name="review"
          id="351324"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332354</attachid>
            <date>2018-01-25 21:41:47 -0800</date>
            <delta_ts>2018-01-26 11:32:10 -0800</delta_ts>
            <desc>[PATCH] Eliminate all leading whitespace version</desc>
            <filename>take-3.patch</filename>
            <type>text/plain</type>
            <size>2450</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDY5M2VmNzNlNTYxLi4wZmNkZTQwZjdhYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMDEtMjUgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBKYXZhU2NyaXB0Q29y
ZSBidWlsdGlucyBzaG91bGQgYmUgcGFydGlhbGx5IG1pbmlmaWVkIGluIFJlbGVhc2UgYnVpbGRz
IG5vdCBEZWJ1ZyBidWlsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MjE2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19tb2RlbC5weToKKyAgICAgICAg
KEJ1aWx0aW5GdW5jdGlvbi5mcm9tU3RyaW5nKToKKyAgICAgICAgQXBwbHkgbWluaWZpY2F0aW9u
cyBvbiBSZWxlYXNlIGJ1aWxkcyBpbnN0ZWFkIG9mIERlYnVnIGJ1aWxkcy4KKyAgICAgICAgQWxz
byBlbGltaW5hdGUgbGVhZGluZyB3aGl0ZXNwYWNlLgorCiAyMDE4LTAxLTI1ICBZdXN1a2UgU3V6
dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3Mvc2NyaXB0aW5nLTEvdGhlLXNjcmlwdC1lbGVt
ZW50L21vZHVsZS9lcnJvcmhhbmRsaW5nLmh0bWwgY3Jhc2hlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvYnVpbHRpbnMvYnVpbHRpbnNfbW9kZWwucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9idWlsdGlucy9idWlsdGluc19tb2RlbC5weQppbmRl
eCAwMjM0MGI3NTBiZS4uMDUxOWM1ZWVlNGMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2J1aWx0aW5zL2J1aWx0aW5zX21vZGVsLnB5CkBAIC01Nyw2ICs1
Nyw3IEBAIGtleVZhbHVlQW5ub3RhdGlvbkNvbW1lbnRSZWdFeHAgPSByZS5jb21waWxlKHIiXlwv
XC8gQChcdyspPShbXj1dKz8pXG4iLCByZS5NVUxUCiBmbGFnQW5ub3RhdGlvbkNvbW1lbnRSZWdF
eHAgPSByZS5jb21waWxlKHIiXlwvXC8gQChcdyspW149XSo/XG4iLCByZS5NVUxUSUxJTkUgfCBy
ZS5ET1RBTEwpCiBsaW5lV2l0aE9ubHlTaW5nbGVMaW5lQ29tbWVudFJlZ0V4cCA9IHJlLmNvbXBp
bGUociJeXHMqXC9cL1xuIiwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQogbGluZVdpdGhUcmFp
bGluZ1NpbmdsZUxpbmVDb21tZW50UmVnRXhwID0gcmUuY29tcGlsZShyIlxzKlwvXC9cbiIsIHJl
Lk1VTFRJTElORSB8IHJlLkRPVEFMTCkKK2xlYWRpbmdXaGl0ZXNwYWNlUmVnRXhwID0gcmUuY29t
cGlsZShyIl4gKyIsIHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTCkKIG11bHRpcGxlRW1wdHlMaW5l
c1JlZ0V4cCA9IHJlLmNvbXBpbGUociJcbnsyLH0iLCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwp
CiAKIGNsYXNzIFBhcnNlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CkBAIC0xMjUsOSArMTI2LDEwIEBA
IGNsYXNzIEJ1aWx0aW5GdW5jdGlvbjoKICAgICAgICAgICAgIG92ZXJyaWRkZW5fbmFtZSA9IG92
ZXJyaWRkZW5OYW1lTWF0Y2guZ3JvdXAoMSkKICAgICAgICAgICAgIGZ1bmN0aW9uX3NvdXJjZSA9
IGZ1bmN0aW9uT3ZlcnJpZGRlbk5hbWVSZWdFeHAuc3ViKCIiLCBmdW5jdGlvbl9zb3VyY2UpCiAK
LSAgICAgICAgaWYgb3MuZ2V0ZW52KCJDT05GSUdVUkFUSU9OIiwgIkRlYnVnIikuc3RhcnRzd2l0
aCgiRGVidWciKToKKyAgICAgICAgaWYgbm90IG9zLmdldGVudigiQ09ORklHVVJBVElPTiIsICJE
ZWJ1ZyIpLnN0YXJ0c3dpdGgoIkRlYnVnIik6CiAgICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2Ug
PSBsaW5lV2l0aE9ubHlTaW5nbGVMaW5lQ29tbWVudFJlZ0V4cC5zdWIoIiIsIGZ1bmN0aW9uX3Nv
dXJjZSkKICAgICAgICAgICAgIGZ1bmN0aW9uX3NvdXJjZSA9IGxpbmVXaXRoVHJhaWxpbmdTaW5n
bGVMaW5lQ29tbWVudFJlZ0V4cC5zdWIoIlxuIiwgZnVuY3Rpb25fc291cmNlKQorICAgICAgICAg
ICAgZnVuY3Rpb25fc291cmNlID0gbGVhZGluZ1doaXRlc3BhY2VSZWdFeHAuc3ViKCIiLCBmdW5j
dGlvbl9zb3VyY2UpCiAgICAgICAgICAgICBmdW5jdGlvbl9zb3VyY2UgPSBtdWx0aXBsZUVtcHR5
TGluZXNSZWdFeHAuc3ViKCJcbiIsIGZ1bmN0aW9uX3NvdXJjZSkKIAogICAgICAgICBmdW5jdGlv
bl9uYW1lID0gZnVuY3Rpb25OYW1lUmVnRXhwLmZpbmRhbGwoZnVuY3Rpb25fc291cmNlKVswXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>