<?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>149683</bug_id>
          
          <creation_ts>2015-09-30 15:54:27 -0700</creation_ts>
          <short_desc>Add the test runner for a new a graphics benchmark</short_desc>
          <delta_ts>2015-10-02 15:15:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Animations</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149691</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1129697</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-09-30 15:54:27 -0700</bug_when>
    <thetext>We need a framework for a graphics benchmark test runner. This patch is separated from the patch attached to https://bugs.webkit.org/show_bug.cgi?id=149053.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129698</commentid>
    <comment_count>1</comment_count>
      <attachid>262199</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-09-30 15:56:06 -0700</bug_when>
    <thetext>Created attachment 262199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129705</commentid>
    <comment_count>2</comment_count>
      <attachid>262199</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-30 16:16:56 -0700</bug_when>
    <thetext>Comment on attachment 262199
Patch

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

&gt; PerformanceTests/ChangeLog:14
&gt; +        * Animometer: Added.

Please skip this directory in PerformanceTests/Skipped.

&gt; PerformanceTests/Animometer/runner/animometer.html:5
&gt; +    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js&quot; defer&gt;&lt;/script&gt;  

We should not pull scripts from CDNs.  We should put a copy in the repo instead.

&gt; PerformanceTests/Animometer/runner/resources/animometer.js:104
&gt; +    var browser = benchmarkRunnerClient.browser();    
&gt; +    if (browser.length)
&gt; +        element.textContent += &quot; [browser = &quot; + browser + &quot;]&quot;;

Why does this need to be included in the results?
The user running the browser is perfectly aware of which browser he/she is running.
Please remove this code as well as benchmarkRunnerClient.browser
so that people don&apos;t mistakenly think we&apos;re running different code based on user agent strings.

&gt; PerformanceTests/Animometer/runner/resources/benchmark-runner.js:1
&gt; +function BenchmarkRunnerState(suites)

This code is basically copied from Speedometer.
Instead of making a copy-paste, please do &quot;svn cp&quot; so that we can see the diff.

&gt; PerformanceTests/Animometer/runner/resources/tests.js:47
&gt; +    name: &quot;HTML Bouncing Particles&quot;,

It&apos;s best if we added these suites as we added the actual test contents.
Please remove them for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129742</commentid>
    <comment_count>3</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2015-09-30 17:03:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 262199 [details]
&gt; Patch
&gt; 
&gt; We should not pull scripts from CDNs.  We should put a copy in the repo
&gt; instead.

This script is used to visualize the data after the test is run; it is not used for any test. Right now we can&apos;t include a copy, so my suggestion is we leave it as is now, and file a follow-up task to either get rid of it completely or get approval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129745</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-30 17:08:20 -0700</bug_when>
    <thetext>Well, we can just svn cp from Websites/perf.webkit.org/public/v2/js/d3/d3.min.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129766</commentid>
    <comment_count>5</comment_count>
      <attachid>262199</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-09-30 17:37:11 -0700</bug_when>
    <thetext>Comment on attachment 262199
Patch

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

&gt;&gt; PerformanceTests/Animometer/runner/animometer.html:5
&gt;&gt; +    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js&quot; defer&gt;&lt;/script&gt;  
&gt; 
&gt; We should not pull scripts from CDNs.  We should put a copy in the repo instead.

Just make sure we&apos;ve got approval to put this in the repository.

&gt; PerformanceTests/Animometer/runner/resources/animometer.css:221
&gt; +.left-samples {
&gt; +  fill: none;
&gt; +  stroke: steelblue;
&gt; +  stroke-width: 1.5px;
&gt; +}
&gt; +
&gt; +.right-samples {
&gt; +    fill: none;
&gt; +    stroke: red;
&gt; +    stroke-width: 1.5px;
&gt; +}
&gt; +
&gt; +.smaple-time {
&gt; +    fill: none;
&gt; +    stroke: green;
&gt; +    stroke-width: 1.5px;
&gt; +}
&gt; +
&gt; +.left-mean {
&gt; +    fill: none;
&gt; +    stroke: yellow;
&gt; +    stroke-width: 1.5px;
&gt; +}
&gt; +
&gt; +.right-mean {
&gt; +    fill: none;
&gt; +    stroke: magenta;
&gt; +    stroke-width: 1.5px;
&gt; +}

You can share the rules for fill and stroke-width here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130108</commentid>
    <comment_count>6</comment_count>
      <attachid>262303</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-01 17:29:11 -0700</bug_when>
    <thetext>Created attachment 262303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130113</commentid>
    <comment_count>7</comment_count>
      <attachid>262199</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-01 17:48:54 -0700</bug_when>
    <thetext>Comment on attachment 262199
Patch

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

&gt;&gt; PerformanceTests/ChangeLog:14
&gt;&gt; +        * Animometer: Added.
&gt; 
&gt; Please skip this directory in PerformanceTests/Skipped.

Done.

&gt;&gt;&gt; PerformanceTests/Animometer/runner/animometer.html:5
&gt;&gt;&gt; +    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js&quot; defer&gt;&lt;/script&gt;  
&gt;&gt; 
&gt;&gt; We should not pull scripts from CDNs.  We should put a copy in the repo instead.
&gt; 
&gt; Just make sure we&apos;ve got approval to put this in the repository.

Done. I made svn cp Websites/perf.webkit.org/public/v2/js/d3/d3.min.js.

&gt;&gt; PerformanceTests/Animometer/runner/resources/animometer.js:104
&gt;&gt; +        element.textContent += &quot; [browser = &quot; + browser + &quot;]&quot;;
&gt; 
&gt; Why does this need to be included in the results?
&gt; The user running the browser is perfectly aware of which browser he/she is running.
&gt; Please remove this code as well as benchmarkRunnerClient.browser
&gt; so that people don&apos;t mistakenly think we&apos;re running different code based on user agent strings.

Done. The browser name was removed. I was helpful when getting a screenshot of the results and paste it in an email.

&gt;&gt; PerformanceTests/Animometer/runner/resources/benchmark-runner.js:1
&gt;&gt; +function BenchmarkRunnerState(suites)
&gt; 
&gt; This code is basically copied from Speedometer.
&gt; Instead of making a copy-paste, please do &quot;svn cp&quot; so that we can see the diff.

Done.

&gt;&gt; PerformanceTests/Animometer/runner/resources/tests.js:47
&gt;&gt; +    name: &quot;HTML Bouncing Particles&quot;,
&gt; 
&gt; It&apos;s best if we added these suites as we added the actual test contents.
&gt; Please remove them for now.

Done. This file is included along with the tests in the patch attached to https://bugs.webkit.org/show_bug.cgi?id=149053.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130156</commentid>
    <comment_count>8</comment_count>
      <attachid>262303</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-10-01 21:44:35 -0700</bug_when>
    <thetext>Comment on attachment 262303
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130322</commentid>
    <comment_count>9</comment_count>
      <attachid>262303</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-02 15:15:50 -0700</bug_when>
    <thetext>Comment on attachment 262303
Patch

Clearing flags on attachment: 262303

Committed r190526: &lt;http://trac.webkit.org/changeset/190526&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130323</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-02 15:15:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262199</attachid>
            <date>2015-09-30 15:56:06 -0700</date>
            <delta_ts>2015-10-01 17:29:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149683-20150930155541.patch</filename>
            <type>text/plain</type>
            <size>35256</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTAzMzEpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTA5LTMwICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IHRoZSB0ZXN0IHJ1bm5lciBmb3IgYSBuZXcgYSBncmFwaGljcyBiZW5jaG1hcmsKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTY4MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCByZXByZXNlbnRzIHRoZSBncmFwaGljcyBiZW5jaG1hcmsgdGVzdCBydW5uZXIuIEZyb20gdGhl
IGhvbWUgcGFnZSwKKyAgICAgICAgaXQgY29sbGVjdHMgdGhlIHNlbGVjdGVkIHRlc3Qgc3VpdGVz
IGFuZCB0aGUgcnVubmluZyBvcHRpb25zLiBJdCBsb29wcyB0aHJvdWdoCisgICAgICAgIGFsbCB0
aGUgdGVzdHMsIHJ1bnMgdGhlbSBhbmQgY29sbGVjdHMgdGhlaXIgcnVubmluZyByZXN1bHRzLiBB
dCB0aGUgZW5kLCBpdAorICAgICAgICBzaG93cyBzdW1tYXJ5IHJlc3VsdHMgYW5kIGEgZmluYWwg
c2NvcmUuIEl0IGNhbiBhbHNvIHNob3cgYSBjaGFydCBmb3IgYSB0ZXN0CisgICAgICAgIHNhbXBs
ZWQgZGF0YS4KKyAgICAgICAgCisgICAgICAgICogQW5pbW9tZXRlcjogQWRkZWQuCisgICAgICAg
ICogQW5pbW9tZXRlci9ydW5uZXI6IEFkZGVkLgorICAgICAgICAqIEFuaW1vbWV0ZXIvcnVubmVy
L3Jlc291cmNlczogQWRkZWQuCisgICAgICAgICAgICAgICAgCisgICAgICAgICogQW5pbW9tZXRl
ci9ydW5uZXIvYW5pbW9tZXRlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBBbmltb21ldGVyL3J1
bm5lci9yZXNvdXJjZXMvYW5pbW9tZXRlci5jc3M6IEFkZGVkLgorICAgICAgICBUaGUgYmVuY2ht
YXJrIHJ1bm5lciBwYWdlIGFuZCBjc3MuCisgICAgICAgIAorICAgICAgICAqIEFuaW1vbWV0ZXIv
cnVubmVyL3Jlc291cmNlcy9hbmltb21ldGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKHdpbmRvdy5i
ZW5jaG1hcmtSdW5uZXJDbGllbnQud2lsbEFkZFRlc3RGcmFtZSk6IENhbGxlZCBhZnRlciB0aGUg
dGVzdCA8aWZyYW1lPiBpcyBjcmVhdGVkLgorICAgICAgICAod2luZG93LmJlbmNobWFya1J1bm5l
ckNsaWVudC5kaWRSdW5UZXN0KTogQ2FsbGVkIGFmdGVyIHJ1bm5pbmcgYSB0ZXN0IGlzIGZpbmlz
aGVkLgorICAgICAgICAod2luZG93LmJlbmNobWFya1J1bm5lckNsaWVudC53aWxsU3RhcnRGaXJz
dEl0ZXJhdGlvbik6IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIGJlZm9yZSBydW5uaW5nIGFueSB0
ZXN0LgorICAgICAgICAod2luZG93LmJlbmNobWFya1J1bm5lckNsaWVudC5kaWRSdW5TdWl0ZXMp
OiBDYWxsZWQgYWZ0ZXIgcnVubmluZyBhbGwgdGVzdHMgb2YgYSBzdWl0ZS4KKyAgICAgICAgKHdp
bmRvdy5iZW5jaG1hcmtSdW5uZXJDbGllbnQuZGlkRmluaXNoTGFzdEl0ZXJhdGlvbik6IENhbGxl
ZCBhZnRlciBydW5uaW5nIHRoZSBsYXN0IHRlc3QuCisgICAgICAgIAorICAgICAgICAod2luZG93
LmJlbmNobWFya1J1bm5lckNsaWVudC5icm93c2VyKToKKyAgICAgICAgKHNob3dTZWN0aW9uKTog
U2hvd3MgYSBzZWN0aW9uIGluIHRoZSBhbmltb21ldGVyLmh0bWwgcGFnZS4KKyAgICAgICAgKHN0
YXJ0VGVzdCk6IENhbGxlZCB3aGVuIHRoZSAiU3RhcnQgVGVzdCIgYnV0dG9uIGlzIGNsaWNrZWQu
CisgICAgICAgIChzaG93UmVzdWx0cyk6IENhbGxlZCBhZnRlciBmaW5pc2hpbmcgYWxsIHRoZSB0
ZXN0cy4KKyAgICAgICAgKHNob3dHcmFwaCk6IENhbGxlZCB3aGVuICJDbGljay4uLiIgYnV0dG9u
IGluIHRoZSAiU2FtcGxlcyIgY29sdW1uIG9mIHRoZSByZXN1bHRzIHRhYmxlIGlzIGNsaWNrZWQK
KyAgICAgICAgCisgICAgICAgICogQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL2JlbmNobWFy
ay1ydW5uZXIuanM6IEFkZGVkLgorICAgICAgICAoQmVuY2htYXJrUnVubmVyU3RhdGUpOiBUcmFj
a3MgdGhlIGN1cnJlbnQgcnVubmluZyA8c3VpdGUsIHRlc3Q+CisgICAgICAgIChCZW5jaG1hcmtS
dW5uZXJTdGF0ZS5wcm90b3R5cGUuY3VycmVudFN1aXRlKTogUmV0dXJucyB0aGUgY3VycmVudCBy
dW5uaW5nIHN1aXRlLgorICAgICAgICAoQmVuY2htYXJrUnVubmVyU3RhdGUucHJvdG90eXBlLmN1
cnJlbnRUZXN0KTogUmV0dXJucyB0aGUgY3VycmVudCBydW5uaW5nIHRlc3QuCisgICAgICAgIChC
ZW5jaG1hcmtSdW5uZXJTdGF0ZS5wcm90b3R5cGUuaXNGaXJzdFRlc3QpOiBSZXR1cm5zIHRydWUg
aWYgd2UgYXJlIHJ1bm5pbmcgdGhlIGZpcnN0IHRlc3QgaW4gdGhlIGN1cnJlbnQgc3VpdGUuCisg
ICAgICAgIChCZW5jaG1hcmtSdW5uZXJTdGF0ZS5wcm90b3R5cGUubmV4dCk6IEFkdmFuY2VzIHRv
IHRoZSBuZXh0IHRlc3QuCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXJTdGF0ZS5wcm90b3R5cGUu
cHJlcGFyZUN1cnJlbnRUZXN0KTogQ3JlYXRlcyBhIG5ldyA8aWZyYW1lPiBhbmQgd2FpdHMgZm9y
IGl0IHRvIGxvYWQgYSB0ZXN0LgorCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIpOiBNYW5hZ2Vz
IHJ1bm5pbmcgdGhlIHRlc3RzIGFuZCBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGJlbmNobWFya1J1
bm5lckNsaWVudC4KKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5wcm90b3R5cGUud2FpdEZvckVs
ZW1lbnQpOiBXYWl0cyBmb3IgYW4gZWxlbWVudCB0byBiZSBjcmVhdGVkLgorICAgICAgICAoQmVu
Y2htYXJrUnVubmVyLnByb3RvdHlwZS5fYXBwZW5kRnJhbWUpOiBDcmVhdGVzIGEgbmV3IDxpZnJh
bWU+IGVsZW1lbnQuCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLl9yZW1vdmVG
cmFtZSk6IFJlbW92ZWQgdGhlIGN1cnJlbnQgPGlmcmFtZT4gZWxlbWVudC4KKyAgICAgICAgKEJl
bmNobWFya1J1bm5lci5wcm90b3R5cGUuX3J1blRlc3RBbmRSZWNvcmRSZXN1bHRzKTogUnVucyB0
aGUgY3VycmVudCB0ZXN0IGFuZCBzYXZlcyBpdHMgcmVzdWx0cy4KKyAgICAgICAgKEJlbmNobWFy
a1J1bm5lci5wcm90b3R5cGUuc3RlcCk6IEVpdGhlciBydW5zIHRoZSBjdXJyZW50IHRlc3QgaWYg
dGhlcmUgaXMgb3Igc3RhcnQgYSBuZXcgaXRlcmF0aW9uLgorICAgICAgICAoQmVuY2htYXJrUnVu
bmVyLnByb3RvdHlwZS5ydW5BbGxTdGVwcyk6IExvb3BzIHRvIHJ1biBhbGwgdGhlIHRlc3RzIGFu
ZCBtb3ZlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKyAgICAgICAgKHRoaXMuX3J1bk5leHRJdGVy
YXRpb24pOiBTdGFydHMgYSBuZXcgaXRlcmF0aW9uIG9yIHNob3cgdGhlIHJlc3VsdHMuCisgICAg
ICAgIChCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLnJ1bk11bHRpcGxlSXRlcmF0aW9ucyk6IExv
b3BzIHRvIHJ1biBhbGwgdGhlIGl0ZXJhdGlvbnMgYW5kIHNob3cgdGhlIHJlc3VsdHMKKyAgICAg
ICAgKEJlbmNobWFya1J1bm5lci5wcm90b3R5cGUuX2ZpbmFsaXplKTogU3RhcnRzIGEgbmV3IGl0
ZXJhdGlvbi4KKworICAgICAgICAqIEFuaW1vbWV0ZXIvcnVubmVyL3Jlc291cmNlcy9ncmFwaC5q
czogQWRkZWQuCisgICAgICAgIChncmFwaCk6IERyYXdzIGEgY2hhcnQgZm9yIGEgdGVzdCBzYW1w
bGVkIGRhdGEuIEl0IHNob3dzIHR3byB5LWF4ZXM6IG9uZSBmb3IgdGhlIGFuaW1hdGVkIGl0ZW1z
IGFuZCB0aGUgc2Vjb25kIGZvciBGUFMuCisgICAgICAgIAorICAgICAgICAqIEFuaW1vbWV0ZXIv
cnVubmVyL3Jlc291cmNlcy90ZXN0cy5qczogQWRkZWQuCisgICAgICAgIChzdWl0ZUZyb21OYW1l
KTogUmV0dXJucyBhIHN1aXRlIGdpdmVuIGl0cyBuYW1lLgorICAgICAgICAodGVzdEZyb21OYW1l
KTogUmV0dXJucyBhIHRlc3QgZ2l2ZW4gaXRzIHN1aXRlIGFuZCBuYW1lLgorCiAyMDE1LTA4LTI3
ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0VGTF0g
UkVHUkVTU0lPTihyMTg4NzkzKTogSXQgbWFkZSAyMDAgbGF5b3V0IHRlc3RzIGFuZCBCaW5kaW5n
cy9ldmVudC10YXJnZXQtd3JhcHBlci5odG1sIHBlcmZvcm1hbmNlIHRlc3QgZmFpbApJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9hbmltb21ldGVyLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9hbmltb21ldGVyLmh0
bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcnVubmVyL2Fu
aW1vbWV0ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJy
ZXNvdXJjZXMvYW5pbW9tZXRlci5jc3MiPgorICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbmpz
LmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9kMy8zLjUuNS9kMy5taW4uanMiIGRlZmVyPjwvc2Ny
aXB0PiAgCisgICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIiBkZWZl
cj48L3NjcmlwdD4gIAorICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvbWFpbi5qcyIgZGVm
ZXI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0cy5qcyIgZGVmZXI9
IiI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9iZW5jaG1hcmstcnVubmVy
LmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2FuaW1vbWV0
ZXIuanMiIGRlZmVyPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZ3JhcGgu
anMiIGRlZmVyPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPG1haW4+CisgICAgICAg
IDxzZWN0aW9uIGlkPSJob21lIiBjbGFzcz0ic2VsZWN0ZWQiPgorICAgICAgICAgICAgPHA+Cisg
ICAgICAgICAgICAgICAgQW5pbW9tZXRlciBpcyBhIGJyb3dzZXIgYmVuY2htYXJrIHRoYXQgbWVh
c3VyZXMgdGhlIGNvbXBsZXhpdHkgb2YgYW4gYW5pbWF0aW9uIGZvcgorICAgICAgICAgICAgICAg
IHdoaWNoIGEgYnJvd3NlciBjYW4gYWNoaWV2ZSA1MCBGUFMgKGZyYW1lIHBlciBzZWNvbmQpLiBJ
dCB1c2VzIGFkYXB0aXZlIGFuaW1hdGlvbnMKKyAgICAgICAgICAgICAgICB0byB0dW5lIHRoZWly
IGNvbXBsZXhpdGllcyB0byBzdGF5IGNsb3NlIHRvIDUwIEZQUy4KKyAgICAgICAgICAgIDwvcD4K
KyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9wdGlvbnMiPgorICAgICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9ImNvbHVtbiI+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9Imh0
bWwtc3VpdGUiIHR5cGU9ImNoZWNrYm94IiBjaGVja2VkPiBIVE1MIGVsZW1lbnRzIHN1aXRlPC9s
YWJlbD48YnI+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9ImNhbnZhcy1z
dWl0ZSIgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQ+IENhbnZhcyBkcmF3aW5ncyBzdWl0ZTwvbGFi
ZWw+PGJyPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IGlkPSJzdmctc3VpdGUi
IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkPiBTVkcgZWxlbWVudHMgc3VpdGU8L2xhYmVsPjxicj4K
KyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCBpZD0idGVtcGxhdGUtc3VpdGUiIHR5
cGU9ImNoZWNrYm94Ij4gVGVtcGxhdGUgc3VpdGU8L2xhYmVsPgorICAgICAgICAgICAgICAgIDwv
ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5U
ZXN0IGludGVydmFsOiA8aW5wdXQgaWQ9InRlc3QtaW50ZXJ2YWwiIHR5cGU9Im51bWJlciIgdmFs
dWU9IjMwIj4gc2Vjb25kczwvbGFiZWw+PGJyPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWw+
RnJhbWUgcmF0ZTogPGlucHV0IGlkPSJmcmFtZS1yYXRlIiB0eXBlPSJudW1iZXIiIHZhbHVlPSI1
MCI+IGZwczwvbGFiZWw+PGJyPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IGlk
PSJlc3RpbWF0ZWQtZnJhbWUtcmF0ZSIgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQ+IEVzdGltYXRl
ZCBGcmFtZSBSYXRlPC9sYWJlbD48YnI+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aW5w
dXQgaWQ9ImZpeC10ZXN0LWNvbXBsZXhpdHkiIHR5cGU9ImNoZWNrYm94Ij4gRml4IHRlc3QgY29t
cGxleGl0eSBhZnRlciB3YXJtdXA8L2xhYmVsPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAg
ICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KKyAgICAg
ICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9InN0YXJ0VGVzdCgpIj5TdGFydCBUZXN0PC9idXR0
b24+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8c2Vj
dGlvbiBpZD0icnVubmluZyI+CisgICAgICAgICAgICA8ZGl2IGlkPSJ0ZXN0Q29udGFpbmVyIj48
L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgaWQ9InByb2dyZXNzIj4KKyAgICAgICAgICAgICAgICA8
ZGl2IGlkPSJwcm9ncmVzcy1jb21wbGV0ZWQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+Cisg
ICAgICAgICAgICA8ZGl2IGlkPSJyZWNvcmQiPgorICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFz
cz0icmVjb3JkLXRhYmxlIj48L3RhYmxlPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwv
c2VjdGlvbj4KKyAgICAgICAgPHNlY3Rpb24gaWQ9InJlc3VsdHMiPgorICAgICAgICAgICAgPGgx
PlJlc3VsdHM8L2gxPgorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJyZXN1bHRzLXRhYmxlIj48
L3RhYmxlPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9ucyI+CisgICAgICAgICAgICAg
ICAgPGJ1dHRvbiBvbmNsaWNrPSJzdGFydFRlc3QoKSI+VGVzdCBBZ2FpbjwvYnV0dG9uPgorICAg
ICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvc2VjdGlvbj4gIAorICAgICAgICA8c2VjdGlvbiBp
ZD0iZ3JhcGgiPgorICAgICAgICAgICAgPGgxPkdyYXBoPC9oMT4KKyAgICAgICAgICAgIDxkaXYg
aWQ9ImdyYXBoQ29udGFpbmVyIj48L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRv
bnMiPgorICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0ic2hvd1Jlc3VsdHMoKSI+UmVz
dWx0czwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0ic3RhcnRUZXN0
KCkiPlRlc3QgQWdhaW48L2J1dHRvbj4gICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAg
ICAgIDwvc2VjdGlvbj4gIAorICAgIDwvbWFpbj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL2FuaW1vbWV0ZXIuY3Nz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVzb3Vy
Y2VzL2FuaW1vbWV0ZXIuY3NzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmlt
b21ldGVyL3J1bm5lci9yZXNvdXJjZXMvYW5pbW9tZXRlci5jc3MJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMjEgQEAKK2JvZHkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig5NiwgOTYs
IDk2KTsKKyAgICBjb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpOworICAgIGZvbnQtZmFtaWx5OiAi
SGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIFZlcmRhbmEsIHNhbnMtc2VyaWY7Cit9CisKK21h
aW4geworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3
aWR0aDogODAwcHg7CisgICAgaGVpZ2h0OiA2MDBweDsKKyAgICB0b3A6IDUwJTsKKyAgICBsZWZ0
OiA1MCU7CisgICAgbWFyZ2luLXRvcDogLTMyMXB4OworICAgIG1hcmdpbi1sZWZ0OiAtNDIxcHg7
CisgICAgcGFkZGluZzogMTVweDsKKyAgICBib3JkZXI6IDZweCBzb2xpZCByZ2IoMjM1LCAyMzUs
IDIzNSk7CisgICAgYm9yZGVyLXJhZGl1czogMjBweDsKK30KKworaWZyYW1lIHsKKyAgICB3aWR0
aDogODAwcHg7CisgICAgaGVpZ2h0OiA2MDBweDsKKyAgICBib3JkZXI6IDBweCBub25lOworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKworbGFiZWwsIHAgeworICAgIGZvbnQtc2l6ZTogMTZw
eDsKKyAgICBsaW5lLWhlaWdodDogMjFweDsKK30KKworc2VjdGlvbiB7CisgICAgZGlzcGxheTog
bm9uZTsKK30KKworc2VjdGlvbiA+IHAgeworICAgIG1hcmdpbjogMTBweCAyMHB4OworfQorCitz
ZWN0aW9uI2hvbWUgPiBwIHsKKyAgICBtYXJnaW46IDAgYXV0bzsKKyAgICB3aWR0aDogNzAlOwor
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworc2VjdGlvbiNob21lID4gcDpmaXJzdC1jaGls
ZCB7CisgICAgbWFyZ2luLXRvcDogMTYwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQor
CitzZWN0aW9uLnNlbGVjdGVkIHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKworI3Rlc3RDb250
YWluZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDE1cHg7CisgICAgbGVm
dDogMTVweDsKKyAgICB3aWR0aDogODAwcHg7CisgICAgaGVpZ2h0OiA2MDBweDsKK30KKworc2Vj
dGlvbiNydW5uaW5nID4gI3Byb2dyZXNzIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
Ym90dG9tOiAtNnB4OworICAgIGxlZnQ6IDYwcHg7CisgICAgcmlnaHQ6IDYwcHg7CisgICAgaGVp
Z2h0OiA2cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOworICAg
IGJvcmRlci1sZWZ0OiA2cHggc29saWQgcmdiKDQ2LCA1MSwgNTUpOworICAgIGJvcmRlci1yaWdo
dDogNnB4IHNvbGlkIHJnYig0NiwgNTEsIDU1KTsKK30KKworc2VjdGlvbiNydW5uaW5nICNwcm9n
cmVzcy1jb21wbGV0ZWQgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7Cisg
ICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDZweDsKKyAgICB3aWR0aDogMDsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiByZ2IoMjM1LCAyMzUsIDIzNSk7Cit9CisKK3NlY3Rpb24jcnVubmluZyA+ICNy
ZWNvcmQgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC0xMzBweDsKKyAg
ICBsZWZ0OiAwcHg7CisgICAgcmlnaHQ6IDBweDsKKyAgICBoZWlnaHQ6IDc1cHg7CisgICAgY29s
b3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKKyAgICBwYWRkaW5nOiAxNXB4OworICAgIGJvcmRlcjog
NnB4IHNvbGlkIHJnYigyMzUsIDIzNSwgMjM1KTsKKyAgICBib3JkZXItcmFkaXVzOiAyMHB4Owor
fQorCitzZWN0aW9uI3J1bm5pbmcgPiAjcmVjb3JkID4gdGFibGUsCitzZWN0aW9uI3Jlc3VsdHMg
PiB0YWJsZSB7CisgICAgd2lkdGg6IDEwMCU7Cit9CisKK3NlY3Rpb24jcnVubmluZyA+ICNyZWNv
cmQgPiB0YWJsZSB0ZCwgdGgsCitzZWN0aW9uI3Jlc3VsdHMgPiB0YWJsZSB0ZCwgdGggeworICAg
IGZvbnQtc2l6ZTogMTFweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjOThiZjIxOworICAgIHBh
ZGRpbmc6IDNweCA0cHggMnB4IDRweDsKK30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKK3NlY3Rpb24jcnVubmluZyA+ICNyZWNvcmQgPiB0YWJsZSB0ci5hbHQs
IHRkCitzZWN0aW9uI3Jlc3VsdHMgPiB0YWJsZSB0ci5hbHQsIHRkIHsKKyAgICBjb2xvcjogIzAw
MDAwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUFGMkQzOworfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitzZWN0aW9uI3J1bm5pbmcgPiAjcmVjb3Jk
ID4gdGFibGUgdGgsCitzZWN0aW9uI3Jlc3VsdHMgPiB0YWJsZSB0aCB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogI0E3Qzk0MjsgCisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisub3B0aW9u
cyB7CisgICAgbWFyZ2luOjAgYXV0bzsgICAgCisgICAgbWFyZ2luLXRvcDogMzBweDsKKyAgICB3
aWR0aDogNTAwcHg7CisgICAgYWxpZ246IGNlbnRlcjsKK30KKworLmNvbHVtbiB7CisgICAgd2lk
dGg6IDQ1JTsKKyAgICBmbG9hdDpsZWZ0OworICAgIGhlaWdodDogMTIwcHg7CisgICAgcGFkZGlu
Zzo1cHg7Cit9CisKK2lucHV0W3R5cGU9Im51bWJlciJdIHsKKyAgIHdpZHRoOjUwcHg7Cit9CisK
Ky5idXR0b25zIHsKKyAgICBtYXJnaW4tdG9wOiAxMHB4OworICAgIHRleHQtYWxpZ246IGNlbnRl
cjsKKyAgICBjbGVhcjogYm90aDsKK30KKworYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IG5vbmU7CisgICAgYm9yZGVyOiAzcHggc29saWQgcmdiKDIzNSwgMjM1LCAyMzUpOworICAg
IGJvcmRlci1yYWRpdXM6IDEwcHg7CisgICAgbWluLXdpZHRoOiAyMDBweDsKKyAgICBwYWRkaW5n
OiA1cHggMjBweDsKKyAgICBtYXJnaW46IDAgNDBweDsKKyAgICBmb250LXNpemU6IDI1cHg7Cisg
ICAgY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFu
c3BhcmVudDsKKworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKK2J1dHRvbjph
Y3RpdmUgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTsKKyAgICBj
b2xvcjogcmdiKDQ2LCA1MSwgNTUpOworICAgIGJvcmRlci1jb2xvcjogcmdiKDIzNSwgMjM1LCAy
MzUpICFpbXBvcnRhbnQ7Cit9CisKK2J1dHRvbjpmb2N1cyB7CisgICAgb3V0bGluZTogbm9uZTsK
KyAgICBib3JkZXItY29sb3I6IHJnYigyMzIsIDc5LCA3OSk7Cit9CisKKy5zbWFsbC1idXR0b24g
eworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBy
Z2IoOTYsIDk2LCA5Nik7CisgICAgYm9yZGVyLXJhZGl1czogMnB4OworICAgIHBhZGRpbmc6IDFw
eCA0cHg7CisgICAgbWFyZ2luOiAwIDRweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3Bh
cmVudDsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAg
IC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKKyNncmFwaENvbnRhaW5lciB7CisgIGZv
bnQ6IDEwcHggc2Fucy1zZXJpZjsKKyAgY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTsgIAorfQor
CisuYXhpcyBwYXRoLAorLmF4aXMgbGluZSB7CisgIGZpbGw6IG5vbmU7CisgIHN0cm9rZTogcmdi
KDIzNSwgMjM1LCAyMzUpOworICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7Cit9CisKKy5s
ZWZ0LXNhbXBsZXMgeworICBmaWxsOiBub25lOworICBzdHJva2U6IHN0ZWVsYmx1ZTsKKyAgc3Ry
b2tlLXdpZHRoOiAxLjVweDsKK30KKworLnJpZ2h0LXNhbXBsZXMgeworICAgIGZpbGw6IG5vbmU7
CisgICAgc3Ryb2tlOiByZWQ7CisgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKK30KKworLnNtYXBs
ZS10aW1lIHsKKyAgICBmaWxsOiBub25lOworICAgIHN0cm9rZTogZ3JlZW47CisgICAgc3Ryb2tl
LXdpZHRoOiAxLjVweDsKK30KKworLmxlZnQtbWVhbiB7CisgICAgZmlsbDogbm9uZTsKKyAgICBz
dHJva2U6IHllbGxvdzsKKyAgICBzdHJva2Utd2lkdGg6IDEuNXB4OworfQorCisucmlnaHQtbWVh
biB7CisgICAgZmlsbDogbm9uZTsKKyAgICBzdHJva2U6IG1hZ2VudGE7CisgICAgc3Ryb2tlLXdp
ZHRoOiAxLjVweDsKK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIv
cmVzb3VyY2VzL2FuaW1vbWV0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9B
bmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXMvYW5pbW9tZXRlci5qcwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL2FuaW1vbWV0ZXIu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKK3dpbmRvdy5iZW5jaG1hcmtSdW5u
ZXJDbGllbnQgPQoreworICAgIGl0ZXJhdGlvbkNvdW50OiAxLAorICAgIHRlc3RzQ291bnQ6IG51
bGwsCisgICAgcHJvZ3Jlc3NCYXI6IG51bGwsCisgICAgcmVjb3JkVGFibGU6IG51bGwsCisgICAg
b3B0aW9uczogeyB0ZXN0SW50ZXJ2YWw6IDMwMDAwLCBmcmFtZVJhdGU6IDUwLCBlc3RpbWF0ZWRG
cmFtZVJhdGU6IHRydWUsIGZpeFRlc3RDb21wbGV4aXR5IDogZmFsc2UgfSwKKyAgICBzY29yZTog
MCwKKyAgICBfaXRlcmF0aW9uc1NhbXBsZXJzOiBbXSwKKyAgICBfcmVzdWx0c1RhYmxlOiBudWxs
LAorICAgIF9pc0Nocm9tZTogL0Nocm9tZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAv
R29vZ2xlIEluYy8udGVzdChuYXZpZ2F0b3IudmVuZG9yKSwKKyAgICBfaXNTYWZhcmk6IC9TYWZh
cmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5h
dmlnYXRvci52ZW5kb3IpLAorICAgIAorICAgIHdpbGxBZGRUZXN0RnJhbWU6IGZ1bmN0aW9uIChm
cmFtZSkKKyAgICB7CisgICAgICAgIHZhciBtYWluID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigi
bWFpbiIpOworICAgICAgICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG1haW4pOworICAg
ICAgICBmcmFtZS5zdHlsZS5sZWZ0ID0gbWFpbi5vZmZzZXRMZWZ0ICsgcGFyc2VJbnQoc3R5bGUu
Ym9yZGVyTGVmdFdpZHRoKSArIHBhcnNlSW50KHN0eWxlLnBhZGRpbmdMZWZ0KSArICJweCI7Cisg
ICAgICAgIGZyYW1lLnN0eWxlLnRvcCA9IG1haW4ub2Zmc2V0VG9wICsgcGFyc2VJbnQoc3R5bGUu
Ym9yZGVyVG9wV2lkdGgpICsgcGFyc2VJbnQoc3R5bGUucGFkZGluZ1RvcCkgKyAicHgiOworICAg
IH0sCisgICAgCisgICAgZGlkUnVuVGVzdDogZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIHRo
aXMucHJvZ3Jlc3NCYXIuaW5jUmFuZ2UoKTsKKyAgICB9LAorICAgIAorICAgIHdpbGxTdGFydEZp
cnN0SXRlcmF0aW9uOiBmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgdGhpcy5faXRlcmF0aW9u
c1NhbXBsZXJzID0gW107CisgICAgICAgIHRoaXMuX3Jlc3VsdHNUYWJsZSA9IG5ldyBSZWNvcmRU
YWJsZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIucmVzdWx0cy10YWJsZSIpWzBdKTsKKyAg
ICAgICAgCisgICAgICAgIHRoaXMucHJvZ3Jlc3NCYXIgPSBuZXcgUHJvZ3Jlc3NCYXIoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInByb2dyZXNzLWNvbXBsZXRlZCIpLCB0aGlzLnRlc3RzQ291bnQp
OworICAgICAgICB0aGlzLnJlY29yZFRhYmxlID0gbmV3IFJlY29yZFRhYmxlKGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3JBbGwoIi5yZWNvcmQtdGFibGUiKVswXSk7CisgICAgfSwKKyAgICAKKyAgICBk
aWRSdW5TdWl0ZXM6IGZ1bmN0aW9uIChzdWl0ZXNTYW1wbGVycykKKyAgICB7CisgICAgICAgIHRo
aXMuX2l0ZXJhdGlvbnNTYW1wbGVycy5wdXNoKHN1aXRlc1NhbXBsZXJzKTsKKyAgICB9LAorICAg
IAorICAgIGRpZEZpbmlzaExhc3RJdGVyYXRpb246IGZ1bmN0aW9uICgpCisgICAgeworICAgICAg
ICB0aGlzLnNjb3JlID0gdGhpcy5fcmVzdWx0c1RhYmxlLnNob3dJdGVyYXRpb25zKHRoaXMuX2l0
ZXJhdGlvbnNTYW1wbGVycywgIiIpOworICAgICAgICBzaG93UmVzdWx0cygpOworICAgIH0sCisg
ICAgCisgICAgYnJvd3NlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2lz
Q2hyb21lKQorICAgICAgICAgICAgcmV0dXJuICJDaHJvbWUiOworICAgICAgICBpZiAodGhpcy5f
aXNTYWZhcmkpCisgICAgICAgICAgICByZXR1cm4gIlNhZmFyaSI7CisgICAgICAgIHJldHVybiAi
IjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHNob3dTZWN0aW9uKHNlY3Rpb25JZGVudGlmaWVyLCBw
dXNoU3RhdGUpCit7CisgICAgdmFyIGN1cnJlbnRTZWN0aW9uRWxlbWVudCA9IGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoInNlY3Rpb24uc2VsZWN0ZWQiKTsKKyAgICBjb25zb2xlLmFzc2VydChjdXJy
ZW50U2VjdGlvbkVsZW1lbnQpOworCisgICAgdmFyIG5ld1NlY3Rpb25FbGVtZW50ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkZW50aWZpZXIpOworICAgIGNvbnNvbGUuYXNzZXJ0
KG5ld1NlY3Rpb25FbGVtZW50KTsKKworICAgIGN1cnJlbnRTZWN0aW9uRWxlbWVudC5jbGFzc0xp
c3QucmVtb3ZlKCJzZWxlY3RlZCIpOworICAgIG5ld1NlY3Rpb25FbGVtZW50LmNsYXNzTGlzdC5h
ZGQoInNlbGVjdGVkIik7CisKKyAgICBpZiAocHVzaFN0YXRlKQorICAgICAgICBoaXN0b3J5LnB1
c2hTdGF0ZSh7c2VjdGlvbjogc2VjdGlvbklkZW50aWZpZXJ9LCBkb2N1bWVudC50aXRsZSk7Cit9
CisKK2Z1bmN0aW9uIHN0YXJ0QmVuY2htYXJrKCkKK3sKKyAgICB2YXIgY2hlY2tib3hlcyA9IFsg
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodG1sLXN1aXRlIiksIAorICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzLXN1aXRlIiksIAorICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgic3ZnLXN1aXRlIiksCisgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0ZW1wbGF0ZS1zdWl0ZSIpLAorICAgIF07CisgICAgdmFyIGVuYWJsZWRTdWl0
ZXMgPSBTdWl0ZXMuZmlsdGVyKGZ1bmN0aW9uIChzdWl0ZSwgaW5kZXgpIHsgcmV0dXJuICFzdWl0
ZS5kaXNhYmxlZCAmJiBjaGVja2JveGVzW2luZGV4XS5jaGVja2VkOyB9KTsKKyAgICB2YXIgdGVz
dHNDb3VudCA9IGVuYWJsZWRTdWl0ZXMucmVkdWNlKGZ1bmN0aW9uICh0ZXN0c0NvdW50LCBzdWl0
ZSkgeyByZXR1cm4gdGVzdHNDb3VudCArIHN1aXRlLnRlc3RzLmxlbmd0aDsgfSwgMCk7CisgICAg
YmVuY2htYXJrUnVubmVyQ2xpZW50LnRlc3RzQ291bnQgPSBiZW5jaG1hcmtSdW5uZXJDbGllbnQu
aXRlcmF0aW9uQ291bnQgKiB0ZXN0c0NvdW50OworICAgIGJlbmNobWFya1J1bm5lckNsaWVudC5v
cHRpb25zWyJ0ZXN0SW50ZXJ2YWwiXSA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0LWludGVydmFsIikudmFsdWUpICogMTAwMDsKKyAgICBiZW5jaG1hcmtSdW5uZXJDbGll
bnQub3B0aW9uc1siZnJhbWVSYXRlIl0gPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiZnJhbWUtcmF0ZSIpLnZhbHVlKTsKKyAgICBiZW5jaG1hcmtSdW5uZXJDbGllbnQub3B0aW9u
c1siZXN0aW1hdGVkRnJhbWVSYXRlIl0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXN0aW1h
dGVkLWZyYW1lLXJhdGUiKS5jaGVja2VkOyAgICAKKyAgICBiZW5jaG1hcmtSdW5uZXJDbGllbnQu
b3B0aW9uc1siZml4VGVzdENvbXBsZXhpdHkiXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJm
aXgtdGVzdC1jb21wbGV4aXR5IikuY2hlY2tlZDsKKyAgICB2YXIgcnVubmVyID0gbmV3IEJlbmNo
bWFya1J1bm5lcihlbmFibGVkU3VpdGVzLCBiZW5jaG1hcmtSdW5uZXJDbGllbnQpOworICAgIHJ1
bm5lci5ydW5NdWx0aXBsZUl0ZXJhdGlvbnMoYmVuY2htYXJrUnVubmVyQ2xpZW50Lml0ZXJhdGlv
bkNvdW50KTsKK30KKworZnVuY3Rpb24gc3RhcnRUZXN0KCkKK3sKKyAgICBzaG93U2VjdGlvbigi
cnVubmluZyIpOworICAgIHN0YXJ0QmVuY2htYXJrKCk7Cit9CisKK2Z1bmN0aW9uIHNob3dSZXN1
bHRzKHNjb3JlKQoreworICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigi
I3Jlc3VsdHMgPiBoMSIpOworICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSAiUmVzdWx0czoiCisg
ICAgCisgICAgdmFyIGJyb3dzZXIgPSBiZW5jaG1hcmtSdW5uZXJDbGllbnQuYnJvd3NlcigpOyAg
ICAKKyAgICBpZiAoYnJvd3Nlci5sZW5ndGgpCisgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQg
Kz0gIiBbYnJvd3NlciA9ICIgKyBicm93c2VyICsgIl0iOworCisgICAgdmFyIHNjb3JlID0gYmVu
Y2htYXJrUnVubmVyQ2xpZW50LnNjb3JlLnRvRml4ZWQoMik7CisgICAgZWxlbWVudC50ZXh0Q29u
dGVudCArPSAiIFtTY29yZSA9ICIgKyBzY29yZSArICJdIjsKKyAgICAgICAgCisgICAgc2hvd1Nl
Y3Rpb24oInJlc3VsdHMiLCB0cnVlKTsKK30KKworZnVuY3Rpb24gc2hvd0dyYXBoKHRlc3ROYW1l
LCBheGVzLCBzYW1wbGVzLCBzYW1wbGluZ1RpbWVPZmZzZXQpCit7CisgICAgdmFyIGVsZW1lbnQg
PSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZ3JhcGggPiBoMSIpOworICAgIGVsZW1lbnQudGV4
dENvbnRlbnQgPSAiR3JhcGg6IgorCisgICAgdmFyIGJyb3dzZXIgPSBiZW5jaG1hcmtSdW5uZXJD
bGllbnQuYnJvd3NlcigpOyAgICAKKyAgICBpZiAoYnJvd3Nlci5sZW5ndGgpCisgICAgICAgIGVs
ZW1lbnQudGV4dENvbnRlbnQgKz0gIiBbYnJvd3NlciA9ICIgKyBicm93c2VyICsgIl0iOworCisg
ICAgaWYgKHRlc3ROYW1lLmxlbmd0aCkKKyAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCArPSAi
IFt0ZXN0ID0gIiArIHRlc3ROYW1lICsgIl0iOworICAgICAgICAgICAgCisgICAgZ3JhcGgoIiNn
cmFwaENvbnRhaW5lciIsIG5ldyBQb2ludCg3MDAsIDQwMCksIG5ldyBJbnNldHMoMjAsIDUwLCAy
MCwgNTApLCBheGVzLCBzYW1wbGVzLCBzYW1wbGluZ1RpbWVPZmZzZXQpOworICAgIHNob3dTZWN0
aW9uKCJncmFwaCIsIHRydWUpOyAgICAKK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci9ydW5uZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1
bm5lci5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5u
ZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOTggQEAKK2Z1bmN0aW9uIEJlbmNobWFya1J1bm5lclN0YXRlKHN1aXRlcykKK3sKKyAgICB0
aGlzLl9zdWl0ZXMgPSBzdWl0ZXM7CisgICAgdGhpcy5fc3VpdGVJbmRleCA9IC0xOworICAgIHRo
aXMuX3Rlc3RJbmRleCA9IDA7CisgICAgdGhpcy5uZXh0KCk7Cit9CisKK0JlbmNobWFya1J1bm5l
clN0YXRlLnByb3RvdHlwZS5jdXJyZW50U3VpdGUgPSBmdW5jdGlvbigpCit7CisgICAgcmV0dXJu
IHRoaXMuX3N1aXRlc1t0aGlzLl9zdWl0ZUluZGV4XTsKK30KKworQmVuY2htYXJrUnVubmVyU3Rh
dGUucHJvdG90eXBlLmN1cnJlbnRUZXN0ID0gZnVuY3Rpb24oKQoreworICAgIHZhciBzdWl0ZSA9
IHRoaXMuY3VycmVudFN1aXRlKCk7CisgICAgcmV0dXJuIHN1aXRlID8gc3VpdGUudGVzdHNbdGhp
cy5fdGVzdEluZGV4XSA6IG51bGw7Cit9CisKK0JlbmNobWFya1J1bm5lclN0YXRlLnByb3RvdHlw
ZS5pc0ZpcnN0VGVzdCA9IGZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gIXRoaXMuX3Rlc3RJbmRl
eDsKK30KKworQmVuY2htYXJrUnVubmVyU3RhdGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigp
Cit7CisgICAgdGhpcy5fdGVzdEluZGV4Kys7CisKKyAgICB2YXIgc3VpdGUgPSB0aGlzLl9zdWl0
ZXNbdGhpcy5fc3VpdGVJbmRleF07CisgICAgaWYgKHN1aXRlICYmIHRoaXMuX3Rlc3RJbmRleCA8
IHN1aXRlLnRlc3RzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICB0aGlzLl90
ZXN0SW5kZXggPSAwOworICAgIGRvIHsKKyAgICAgICAgdGhpcy5fc3VpdGVJbmRleCsrOworICAg
IH0gd2hpbGUgKHRoaXMuX3N1aXRlSW5kZXggPCB0aGlzLl9zdWl0ZXMubGVuZ3RoICYmIHRoaXMu
X3N1aXRlc1t0aGlzLl9zdWl0ZUluZGV4XS5kaXNhYmxlZCk7CisKKyAgICByZXR1cm4gdGhpczsK
K30KKworQmVuY2htYXJrUnVubmVyU3RhdGUucHJvdG90eXBlLnByZXBhcmVDdXJyZW50VGVzdCA9
IGZ1bmN0aW9uKHJ1bm5lciwgZnJhbWUpCit7CisgICAgdmFyIHN1aXRlID0gdGhpcy5jdXJyZW50
U3VpdGUoKTsKKyAgICB2YXIgdGVzdCA9IHRoaXMuY3VycmVudFRlc3QoKTsKKyAgICB2YXIgcHJv
bWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgIGZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBzdWl0ZS5wcmVwYXJlKHJ1bm5lciwgZnJhbWUuY29udGVudFdpbmRvdywgZnJh
bWUuY29udGVudERvY3VtZW50KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeyBwcm9taXNlLnJlc29s
dmUocmVzdWx0KTsgfSk7CisgICAgfQorICAgIGZyYW1lLnNyYyA9IHRlc3QudXJsOworICAgIHJl
dHVybiBwcm9taXNlOworfQorCitmdW5jdGlvbiBCZW5jaG1hcmtSdW5uZXIoc3VpdGVzLCBjbGll
bnQpCit7CisgICAgdGhpcy5fc3VpdGVzID0gc3VpdGVzOworICAgIHRoaXMuX2NsaWVudCA9IGNs
aWVudDsKK30KKworQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS53YWl0Rm9yRWxlbWVudCA9IGZ1
bmN0aW9uKHNlbGVjdG9yKQoreworICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7
CisgICAgdmFyIGNvbnRlbnREb2N1bWVudCA9IHRoaXMuX2ZyYW1lLmNvbnRlbnREb2N1bWVudDsK
KworICAgIGZ1bmN0aW9uIHJlc29sdmVJZlJlYWR5KCkgeworICAgICAgICB2YXIgZWxlbWVudCA9
IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKKyAgICAgICAgaWYgKGVs
ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS5yZXNvbHZlKGVsZW1lbnQpOworICAg
ICAgICBzZXRUaW1lb3V0KHJlc29sdmVJZlJlYWR5LCA1MCk7CisgICAgfQorCisgICAgcmVzb2x2
ZUlmUmVhZHkoKTsKKyAgICByZXR1cm4gcHJvbWlzZTsKK30KKworQmVuY2htYXJrUnVubmVyLnBy
b3RvdHlwZS5fYXBwZW5kRnJhbWUgPSBmdW5jdGlvbihzcmMpCit7CisgICAgdmFyIGZyYW1lID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgZnJhbWUuc2V0QXR0cmlidXRl
KCJzY3JvbGxpbmciLCAibm8iKTsKKworICAgIHZhciBtYXJnaW5MZWZ0ID0gcGFyc2VJbnQoZ2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5tYXJnaW5MZWZ0KTsKKyAgICB2YXIgbWFyZ2lu
VG9wID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5tYXJnaW5Ub3Ap
OworICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDgwMCArIG1hcmdpbkxlZnQgJiYgd2luZG93
LmlubmVySGVpZ2h0ID4gNjAwICsgbWFyZ2luVG9wKSB7CisgICAgICAgIGZyYW1lLnN0eWxlLmxl
ZnQgPSBtYXJnaW5MZWZ0ICsgInB4IjsKKyAgICAgICAgZnJhbWUuc3R5bGUudG9wID0gbWFyZ2lu
VG9wICsgInB4IjsKKyAgICB9IGVsc2UgeworICAgICAgICBmcmFtZS5zdHlsZS5sZWZ0ID0gIjBw
eCI7CisgICAgICAgIGZyYW1lLnN0eWxlLnRvcCA9ICIwcHgiOworICAgIH0KKworICAgIGlmICh0
aGlzLl9jbGllbnQgJiYgdGhpcy5fY2xpZW50LndpbGxBZGRUZXN0RnJhbWUpCisgICAgICAgIHRo
aXMuX2NsaWVudC53aWxsQWRkVGVzdEZyYW1lKGZyYW1lKTsKKworICAgIGRvY3VtZW50LmJvZHku
aW5zZXJ0QmVmb3JlKGZyYW1lLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOworICAgIHRoaXMu
X2ZyYW1lID0gZnJhbWU7CisgICAgcmV0dXJuIGZyYW1lOworfQorCitCZW5jaG1hcmtSdW5uZXIu
cHJvdG90eXBlLl9yZW1vdmVGcmFtZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBpZiAodGhpcy5fZnJh
bWUpIHsKKyAgICAgICAgdGhpcy5fZnJhbWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9m
cmFtZSk7CisgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDsKKyAgICB9Cit9CisKK0JlbmNobWFy
a1J1bm5lci5wcm90b3R5cGUuX3J1blRlc3RBbmRSZWNvcmRSZXN1bHRzID0gZnVuY3Rpb24oc3Rh
dGUpCit7CisgICAgdmFyIHByb21pc2UgPSBuZXcgU2ltcGxlUHJvbWlzZTsKKyAgICB2YXIgc3Vp
dGUgPSBzdGF0ZS5jdXJyZW50U3VpdGUoKTsKKyAgICB2YXIgdGVzdCA9IHN0YXRlLmN1cnJlbnRU
ZXN0KCk7CisgICAgCisgICAgaWYgKHRoaXMuX2NsaWVudCAmJiB0aGlzLl9jbGllbnQud2lsbFJ1
blRlc3RUZXN0KQorICAgICAgICB0aGlzLl9jbGllbnQud2lsbFJ1blRlc3Qoc3VpdGUsIHRlc3Qp
OworCisgICAgdmFyIGNvbnRlbnRXaW5kb3cgPSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93Owor
ICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHN1aXRlLnJ1bihjb250ZW50V2luZG93LCB0ZXN0
LCB0aGlzLl9jbGllbnQub3B0aW9ucywgdGhpcy5fY2xpZW50LnJlY29yZFRhYmxlLCB0aGlzLl9j
bGllbnQucHJvZ3Jlc3NCYXIpLnRoZW4oZnVuY3Rpb24oc2FtcGxlcikgeworICAgICAgICB2YXIg
c2FtcGxlcnMgPSBzZWxmLl9zdWl0ZXNTYW1wbGVyc1tzdWl0ZS5uYW1lXSB8fCBbXTsKKyAgICAg
ICAgCisgICAgICAgIHNhbXBsZXJzW3Rlc3QubmFtZV0gPSBzYW1wbGVyOworICAgICAgICBzZWxm
Ll9zdWl0ZXNTYW1wbGVyc1tzdWl0ZS5uYW1lXSA9IHNhbXBsZXJzOworCisgICAgICAgIGlmIChz
ZWxmLl9jbGllbnQgJiYgc2VsZi5fY2xpZW50LmRpZFJ1blRlc3QpCisgICAgICAgICAgICBzZWxm
Ll9jbGllbnQuZGlkUnVuVGVzdChzdWl0ZSwgdGVzdCk7CisgICAgICAgIAorICAgICAgICBzdGF0
ZS5uZXh0KCk7CisgICAgICAgIGlmIChzdGF0ZS5jdXJyZW50U3VpdGUoKSAhPSBzdWl0ZSkKKyAg
ICAgICAgICAgIHNlbGYuX3JlbW92ZUZyYW1lKCk7CisgICAgICAgIHByb21pc2UucmVzb2x2ZShz
dGF0ZSk7CisgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHByb21pc2U7Cit9CisKK0JlbmNobWFy
a1J1bm5lci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uKHN0YXRlKQoreworICAgIGlmICghc3Rh
dGUpIHsKKyAgICAgICAgc3RhdGUgPSBuZXcgQmVuY2htYXJrUnVubmVyU3RhdGUodGhpcy5fc3Vp
dGVzKTsKKyAgICAgICAgdGhpcy5fc3VpdGVzU2FtcGxlcnMgPSB7fTsKKyAgICB9CisKKyAgICB2
YXIgc3VpdGUgPSBzdGF0ZS5jdXJyZW50U3VpdGUoKTsKKyAgICBpZiAoIXN1aXRlKSB7CisgICAg
ICAgIHRoaXMuX2ZpbmFsaXplKCk7CisgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVBy
b21pc2U7CisgICAgICAgIHByb21pc2UucmVzb2x2ZSgpOworICAgICAgICByZXR1cm4gcHJvbWlz
ZTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUuaXNGaXJzdFRlc3QoKSkgeworICAgICAgICB0aGlz
Ll9tYXN1cmVkVmFsdWVzRm9yQ3VycmVudFN1aXRlID0ge307CisgICAgICAgIHRoaXMuX2FwcGVu
ZEZyYW1lKCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRlLnByZXBhcmVDdXJyZW50VGVzdCh0
aGlzLCB0aGlzLl9mcmFtZSkudGhlbihmdW5jdGlvbihwcmVwYXJlUmV0dXJuVmFsdWUpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3J1blRlc3RBbmRSZWNvcmRSZXN1bHRzKHN0YXRlKTsKKyAgICB9
LmJpbmQodGhpcykpOworfQorCitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLnJ1bkFsbFN0ZXBz
ID0gZnVuY3Rpb24oc3RhcnRpbmdTdGF0ZSkKK3sKKyAgICB2YXIgbmV4dENhbGxlZSA9IHRoaXMu
cnVuQWxsU3RlcHMuYmluZCh0aGlzKTsKKyAgICB0aGlzLnN0ZXAoc3RhcnRpbmdTdGF0ZSkudGhl
bihmdW5jdGlvbihuZXh0U3RhdGUpIHsKKyAgICAgICAgaWYgKG5leHRTdGF0ZSkKKyAgICAgICAg
ICAgIG5leHRDYWxsZWUobmV4dFN0YXRlKTsKKyAgICB9KTsKK30KKworQmVuY2htYXJrUnVubmVy
LnByb3RvdHlwZS5ydW5NdWx0aXBsZUl0ZXJhdGlvbnMgPSBmdW5jdGlvbihpdGVyYXRpb25Db3Vu
dCkKK3sKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgdmFyIGN1cnJlbnRJdGVyYXRpb24gPSAw
OworCisgICAgdGhpcy5fcnVuTmV4dEl0ZXJhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICBj
dXJyZW50SXRlcmF0aW9uKys7CisgICAgICAgIGlmIChjdXJyZW50SXRlcmF0aW9uIDwgaXRlcmF0
aW9uQ291bnQpCisgICAgICAgICAgICBzZWxmLnJ1bkFsbFN0ZXBzKCk7CisgICAgICAgIGVsc2Ug
aWYgKHRoaXMuX2NsaWVudCAmJiB0aGlzLl9jbGllbnQuZGlkRmluaXNoTGFzdEl0ZXJhdGlvbikK
KyAgICAgICAgICAgIHNlbGYuX2NsaWVudC5kaWRGaW5pc2hMYXN0SXRlcmF0aW9uKCk7CisgICAg
fQorCisgICAgaWYgKHNlbGYuX2NsaWVudCAmJiBzZWxmLl9jbGllbnQud2lsbFN0YXJ0Rmlyc3RJ
dGVyYXRpb24pCisgICAgICAgIHNlbGYuX2NsaWVudC53aWxsU3RhcnRGaXJzdEl0ZXJhdGlvbihp
dGVyYXRpb25Db3VudCk7CisKKyAgICBzZWxmLnJ1bkFsbFN0ZXBzKCk7Cit9CisKK0JlbmNobWFy
a1J1bm5lci5wcm90b3R5cGUuX2ZpbmFsaXplID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX3Jl
bW92ZUZyYW1lKCk7CisgICAgICAgIAorICAgIGlmICh0aGlzLl9jbGllbnQgJiYgdGhpcy5fY2xp
ZW50LmRpZFJ1blN1aXRlcykKKyAgICAgICAgdGhpcy5fY2xpZW50LmRpZFJ1blN1aXRlcyh0aGlz
Ll9zdWl0ZXNTYW1wbGVycyk7CisKKyAgICBpZiAodGhpcy5fcnVuTmV4dEl0ZXJhdGlvbikKKyAg
ICAgICAgdGhpcy5fcnVuTmV4dEl0ZXJhdGlvbigpOworfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9Bbmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXMvZ3JhcGguanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXMvZ3JhcGguanMJKHJldmlz
aW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcnVubmVyL3Jlc291cmNlcy9n
cmFwaC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorZnVuY3Rpb24gZ3JhcGgo
c2VsZWN0b3IsIHNpemUsIG1hcmdpbnMsIGF4ZXMsIHNhbXBsZXMsIHNhbXBsaW5nVGltZU9mZnNl
dCkKK3sKKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3Ip
OworICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBudWxsOworCisgICAgdmFyIHggPSBkMy5zY2Fs
ZS5saW5lYXIoKQorICAgICAgICAgICAgLnJhbmdlKFswLCBzaXplLndpZHRoXSkKKyAgICAgICAg
ICAgIC5kb21haW4oZDMuZXh0ZW50KHNhbXBsZXMsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudGlt
ZU9mZnNldDsgfSkpOyAgICAgICAgICAgIAorCisgICAgdmFyIHlMZWZ0ID0gZDMuc2NhbGUubGlu
ZWFyKCkKKyAgICAgICAgICAgIC5yYW5nZShbc2l6ZS5oZWlnaHQsIDBdKQorICAgICAgICAgICAg
LmRvbWFpbihbMCwgZDMubWF4KHNhbXBsZXMsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudmFsdWVz
WzBdOyB9KV0pOworCisgICAgdmFyIHlSaWdodCA9IGQzLnNjYWxlLmxpbmVhcigpCisgICAgICAg
ICAgICAucmFuZ2UoW3NpemUuaGVpZ2h0LCAwXSkKKyAgICAgICAgICAgIC5kb21haW4oWzAsIGQz
Lm1heChzYW1wbGVzLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnZhbHVlc1sxXTsgfSldKTsKKwor
ICAgIHZhciB4QXhpcyA9IGQzLnN2Zy5heGlzKCkKKyAgICAgICAgICAgIC5zY2FsZSh4KQorICAg
ICAgICAgICAgLm9yaWVudCgiYm90dG9tIik7CisKKyAgICB2YXIgeUF4aXNMZWZ0ID0gZDMuc3Zn
LmF4aXMoKQorICAgICAgICAgICAgLnNjYWxlKHlMZWZ0KQorICAgICAgICAgICAgLm9yaWVudCgi
bGVmdCIpOworCisgICAgdmFyIHlBeGlzUmlnaHQgPSBkMy5zdmcuYXhpcygpCisgICAgICAgICAg
ICAuc2NhbGUoeVJpZ2h0KQorICAgICAgICAgICAgLm9yaWVudCgicmlnaHQiKTsKKworICAgIHZh
ciBsaW5lTGVmdCA9IGQzLnN2Zy5saW5lKCkKKyAgICAgICAgICAgIC54KGZ1bmN0aW9uKGQpIHsg
cmV0dXJuIHgoZC50aW1lT2Zmc2V0KTsgfSkKKyAgICAgICAgICAgIC55KGZ1bmN0aW9uKGQpIHsg
cmV0dXJuIHlMZWZ0KGQudmFsdWVzWzBdKTsgfSk7CisKKyAgICB2YXIgbGluZVJpZ2h0ID0gZDMu
c3ZnLmxpbmUoKQorICAgICAgICAgICAgLngoZnVuY3Rpb24oZCkgeyByZXR1cm4geChkLnRpbWVP
ZmZzZXQpOyB9KQorICAgICAgICAgICAgLnkoZnVuY3Rpb24oZCkgeyByZXR1cm4geVJpZ2h0KGQu
dmFsdWVzWzFdKTsgfSk7CisKKyAgICBzYW1wbGVzLmZvckVhY2goZnVuY3Rpb24oZCkgeworICAg
ICAgICBkLnRpbWVPZmZzZXQgPSArZC50aW1lT2Zmc2V0OworICAgICAgICBkLnZhbHVlc1swXSA9
ICtkLnZhbHVlc1swXTsKKyAgICAgICAgZC52YWx1ZXNbMV0gPSArZC52YWx1ZXNbMV07ICAgICAg
ICAKKyAgICB9KTsgICAgCisKKyAgICB2YXIgc2FtcGxlZFNhbXBsZXMgPSBzYW1wbGVzLmZpbHRl
cihmdW5jdGlvbihkKSB7CisgICAgICAgIHJldHVybiBkLnRpbWVPZmZzZXQgPj0gc2FtcGxpbmdU
aW1lT2Zmc2V0OworICAgIH0pOworICAgIAorICAgIHZhciBtZWFuTGVmdCA9IGQzLm1lYW4oc2Ft
cGxlZFNhbXBsZXMsIGZ1bmN0aW9uKGQpIHsKKyAgICAgICAgcmV0dXJuICtkLnZhbHVlc1swXTsK
KyAgICB9KTsKKworICAgIHZhciBtZWFuUmlnaHQgPSBkMy5tZWFuKHNhbXBsZWRTYW1wbGVzLCBm
dW5jdGlvbihkKSB7CisgICAgICAgIHJldHVybiArZC52YWx1ZXNbMV07CisgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgdmFyIHN2ZyA9IGQzLnNlbGVjdChzZWxlY3Rv
cikuYXBwZW5kKCJzdmciKQorICAgICAgICAuYXR0cigid2lkdGgiLCBzaXplLndpZHRoICsgbWFy
Z2lucy5sZWZ0ICsgbWFyZ2lucy5yaWdodCkKKyAgICAgICAgLmF0dHIoImhlaWdodCIsIHNpemUu
aGVpZ2h0ICsgbWFyZ2lucy50b3AgKyBtYXJnaW5zLmJvdHRvbSkKKyAgICAgICAgLmFwcGVuZCgi
ZyIpCisgICAgICAgICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgbWFyZ2lu
cy5sZWZ0ICsgIiwiICsgbWFyZ2lucy50b3AgKyAiKSIpOworCisgICAgLy8geC1heGlzCisgICAg
c3ZnLmFwcGVuZCgiZyIpCisgICAgICAgIC5hdHRyKCJjbGFzcyIsICJ4IGF4aXMiKQorICAgICAg
ICAuYXR0cigiZmlsbCIsICJyZ2IoMjM1LCAyMzUsIDIzNSkiKQorICAgICAgICAuYXR0cigidHJh
bnNmb3JtIiwgInRyYW5zbGF0ZSgwLCIgKyBzaXplLmhlaWdodCArICIpIikKKyAgICAgICAgLmNh
bGwoeEF4aXMpCisgICAgICAgIC5hcHBlbmQoInRleHQiKQorICAgICAgICAgICAgLmF0dHIoImNs
YXNzIiwgImxhYmVsIikKKyAgICAgICAgICAgIC5hdHRyKCJ4Iiwgc2l6ZS53aWR0aCkKKyAgICAg
ICAgICAgIC5hdHRyKCJ5IiwgLTYpCisgICAgICAgICAgICAuYXR0cigiZmlsbCIsICJyZ2IoMjM1
LCAyMzUsIDIzNSkiKQorICAgICAgICAgICAgLnN0eWxlKCJ0ZXh0LWFuY2hvciIsICJlbmQiKQor
ICAgICAgICAgICAgLnRleHQoInRpbWUiKTsKKyAgICAgICAgICAgICAgICAgCisgICAgLy8geUxl
ZnQtYXhpcworICAgIHN2Zy5hcHBlbmQoImciKQorICAgICAgICAuYXR0cigiY2xhc3MiLCAieSBh
eGlzIikKKyAgICAgICAgLmF0dHIoImZpbGwiLCAic3RlZWxibHVlIikKKyAgICAgICAgLmNhbGwo
eUF4aXNMZWZ0KQorICAgICAgICAuYXBwZW5kKCJ0ZXh0IikKKyAgICAgICAgICAgIC5hdHRyKCJj
bGFzcyIsICJsYWJlbCIpCisgICAgICAgICAgICAuYXR0cigidHJhbnNmb3JtIiwgInJvdGF0ZSgt
OTApIikKKyAgICAgICAgICAgIC5hdHRyKCJ5IiwgNikKKyAgICAgICAgICAgIC5hdHRyKCJmaWxs
IiwgInN0ZWVsYmx1ZSIpCisgICAgICAgICAgICAuYXR0cigiZHkiLCAiLjcxZW0iKQorICAgICAg
ICAgICAgLnN0eWxlKCJ0ZXh0LWFuY2hvciIsICJlbmQiKQorICAgICAgICAgICAgLnRleHQoYXhl
c1swXSk7CisKKyAgICAvLyB5UmlnaHQtYXhpcworICAgIHN2Zy5hcHBlbmQoImciKQorICAgICAg
ICAuYXR0cigiY2xhc3MiLCAieSBheGlzIikKKyAgICAgICAgLmF0dHIoImZpbGwiLCAicmVkIikK
KyAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIHNpemUud2lkdGggKyAi
LCAwKSIpCisgICAgICAgIC5jYWxsKHlBeGlzUmlnaHQpCisgICAgICAgIC5hcHBlbmQoInRleHQi
KQorICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImxhYmVsIikKKyAgICAgICAgICAgIC5hdHRy
KCJ0cmFuc2Zvcm0iLCAicm90YXRlKC05MCkiKQorICAgICAgICAgICAgLmF0dHIoInkiLCA2KQor
ICAgICAgICAgICAgLmF0dHIoImZpbGwiLCAicmVkIikKKyAgICAgICAgICAgIC5hdHRyKCJkeSIs
ICIuNzFlbSIpCisgICAgICAgICAgICAuc3R5bGUoInRleHQtYW5jaG9yIiwgImVuZCIpCisgICAg
ICAgICAgICAudGV4dChheGVzWzFdKTsKKworICAgIC8vIGxlZnQtbWVhbgorICAgIHN2Zy5hcHBl
bmQoInN2ZzpsaW5lIikKKyAgICAgICAgLmF0dHIoIngxIiwgeCgwKSkKKyAgICAgICAgLmF0dHIo
IngyIiwgc2l6ZS53aWR0aCkKKyAgICAgICAgLmF0dHIoInkxIiwgeUxlZnQobWVhbkxlZnQpKQor
ICAgICAgICAuYXR0cigieTIiLCB5TGVmdChtZWFuTGVmdCkpCisgICAgICAgIC5hdHRyKCJjbGFz
cyIsICJsZWZ0LW1lYW4iKTsKKworICAgIC8vIHJpZ2h0LW1lYW4KKyAgICBzdmcuYXBwZW5kKCJz
dmc6bGluZSIpCisgICAgICAgIC5hdHRyKCJ4MSIsIHgoMCkpCisgICAgICAgIC5hdHRyKCJ4MiIs
IHNpemUud2lkdGgpCisgICAgICAgIC5hdHRyKCJ5MSIsIHlSaWdodChtZWFuUmlnaHQpKQorICAg
ICAgICAuYXR0cigieTIiLCB5UmlnaHQobWVhblJpZ2h0KSkKKyAgICAgICAgLmF0dHIoImNsYXNz
IiwgInJpZ2h0LW1lYW4iKTsgICAgICAgIAorCisgICAgLy8gc2FtcGxpbmdUaW1lT2Zmc2V0Cisg
ICAgc3ZnLmFwcGVuZCgibGluZSIpCisgICAgICAgIC5hdHRyKCJ4MSIsIHgoc2FtcGxpbmdUaW1l
T2Zmc2V0KSkKKyAgICAgICAgLmF0dHIoIngyIiwgeChzYW1wbGluZ1RpbWVPZmZzZXQpKQorICAg
ICAgICAuYXR0cigieTEiLCB5TGVmdCgwKSkKKyAgICAgICAgLmF0dHIoInkyIiwgeUxlZnQoeUF4
aXNMZWZ0LnNjYWxlKCkuZG9tYWluKClbMV0pKQorICAgICAgICAuYXR0cigiY2xhc3MiLCAic21h
cGxlLXRpbWUiKTsKKworICAgIC8vIGxlZnQtc2FtcGxlcworICAgIHN2Zy5hcHBlbmQoInBhdGgi
KQorICAgICAgICAuZGF0dW0oc2FtcGxlcykKKyAgICAgICAgLmF0dHIoImNsYXNzIiwgImxlZnQt
c2FtcGxlcyIpCisgICAgICAgIC5hdHRyKCJkIiwgbGluZUxlZnQpOworICAgICAgICAKKyAgICAv
LyByaWdodC1zYW1wbGVzCisgICAgc3ZnLmFwcGVuZCgicGF0aCIpCisgICAgICAgIC5kYXR1bShz
YW1wbGVzKQorICAgICAgICAuYXR0cigiY2xhc3MiLCAicmlnaHQtc2FtcGxlcyIpCisgICAgICAg
IC5hdHRyKCJkIiwgbGluZVJpZ2h0KTsKK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci9ydW5uZXIvcmVzb3VyY2VzL3Rlc3RzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL3Rlc3RzLmpzCShyZXZpc2lvbiAwKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXMvdGVzdHMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTAgQEAKK3ZhciBUaXRsZXMgPQorWworICAgIHsK
KyAgICAgICAgdGV4dDogIlRlc3QgTmFtZSIsCisgICAgICAgIHdpZHRoOiAyNSwKKyAgICAgICAg
Y2hpbGRyZW46IFtdCisgICAgfSwKKyAgICB7CisgICAgICAgIHRleHQ6ICJBbmltYXRlZCBJdGVt
cyIsCisgICAgICAgIHdpZHRoOiAzMSwKKyAgICAgICAgY2hpbGRyZW46CisgICAgICAgIFsKKyAg
ICAgICAgICAgIHsgdGV4dDogICAiQXZnLiIsIHdpZHRoOiA2LCBjaGlsZHJlbjogW10gfSwKKyAg
ICAgICAgICAgIHsgdGV4dDogIlx1MDBiMSIsIHdpZHRoOiA1LCBjaGlsZHJlbjogW10gfSwKKyAg
ICAgICAgICAgIHsgdGV4dDogICAiVy41JSIsIHdpZHRoOiA1LCBjaGlsZHJlbjogW10gfSwKKyAg
ICAgICAgICAgIHsgdGV4dDogICAiU3RkLiIsIHdpZHRoOiA1LCBjaGlsZHJlbjogW10gfSwKKyAg
ICAgICAgICAgIHsgdGV4dDogICAgICAiJSIsIHdpZHRoOiA1LCBjaGlsZHJlbjogW10gfSwKKyAg
ICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICB0ZXh0OiAiRlBTIiwKKyAgICAgICAgd2lk
dGg6IDMxLAorICAgICAgICBjaGlsZHJlbjoKKyAgICAgICAgWworICAgICAgICAgICAgeyB0ZXh0
OiAgICJBdmcuIiwgd2lkdGg6IDYsIGNoaWxkcmVuOiBbXSB9LAorICAgICAgICAgICAgeyB0ZXh0
OiAiXHUwMGIxIiwgd2lkdGg6IDUsIGNoaWxkcmVuOiBbXSB9LAorICAgICAgICAgICAgeyB0ZXh0
OiAgICJXLjUlIiwgd2lkdGg6IDUsIGNoaWxkcmVuOiBbXSB9LAorICAgICAgICAgICAgeyB0ZXh0
OiAgICJTdGQuIiwgd2lkdGg6IDUsIGNoaWxkcmVuOiBbXSB9LAorICAgICAgICAgICAgeyB0ZXh0
OiAgICAgICIlIiwgd2lkdGg6IDUsIGNoaWxkcmVuOiBbXSB9LAorICAgICAgICBdCisgICAgfSwK
KyAgICB7CisgICAgICAgIHRleHQ6ICJTY29yZSIsCisgICAgICAgIHdpZHRoOiA2LAorICAgICAg
ICBjaGlsZHJlbjogW10KKyAgICB9LAorICAgIHsKKyAgICAgICAgdGV4dDogIlNhbXBsZXMiLAor
ICAgICAgICB3aWR0aDogNywKKyAgICAgICAgY2hpbGRyZW46IFtdCisgICAgfQorXTsKKwordmFy
IFN1aXRlcyA9IFtdOworCitTdWl0ZXMucHVzaCh7CisgICAgbmFtZTogIkhUTUwgQm91bmNpbmcg
UGFydGljbGVzIiwKKyAgICBwcmVwYXJlOiBmdW5jdGlvbihydW5uZXIsIGNvbnRlbnRXaW5kb3cs
IGNvbnRlbnREb2N1bWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBydW5uZXIud2FpdEZvckVs
ZW1lbnQoIiNzdGFnZSIpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50OworICAgICAgICB9KTsKKyAgICB9LAorICAgIAorICAgIHJ1bjogZnVuY3Rp
b24oY29udGVudFdpbmRvdywgdGVzdCwgb3B0aW9ucywgcmVjb3JkVGFibGUsIHByb2dyZXNzQmFy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRXaW5kb3cucnVuQmVuY2htYXJrKHRoaXMs
IHRlc3QsIG9wdGlvbnMsIHJlY29yZFRhYmxlLCBwcm9ncmVzc0Jhcik7CisgICAgfSwKKworICAg
IHRpdGxlczogVGl0bGVzLAorICAgIHRlc3RzOiBbCisgICAgICAgIHsgCisgICAgICAgICAgICB1
cmw6ICIuLi90ZXN0cy9ib3VuY2luZy1wYXJ0aWNsZXMvYm91bmNpbmctY3NzLXNoYXBlcy5odG1s
P2dhaW49MSZhZGRMaW1pdD0xMDAmcmVtb3ZlTGltaXQ9NSZwYXJ0aWNsZVdpZHRoPTEyJnBhcnRp
Y2xlSGVpZ2h0PTEyJnNoYXBlPWNpcmNsZSIsCisgICAgICAgICAgICBuYW1lOiAiYm91bmNpbmcg
Y2lyY2xlcyIKKyAgICAgICAgfSwKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHVybDogIi4uL3Rl
c3RzL2JvdW5jaW5nLXBhcnRpY2xlcy9ib3VuY2luZy1jc3Mtc2hhcGVzLmh0bWw/Z2Fpbj0xJmFk
ZExpbWl0PTEwMCZyZW1vdmVMaW1pdD01JnBhcnRpY2xlV2lkdGg9NDAmcGFydGljbGVIZWlnaHQ9
NDAmc2hhcGU9cmVjdCZjbGlwPXN0YXIiLAorICAgICAgICAgICAgbmFtZTogImJvdW5jaW5nIGNs
aXBwZWQgcmVjdHMiCisgICAgICAgIH0sCisgICAgICAgIHsgCisgICAgICAgICAgICB1cmw6ICIu
Li90ZXN0cy9ib3VuY2luZy1wYXJ0aWNsZXMvYm91bmNpbmctY3NzLXNoYXBlcy5odG1sP2dhaW49
MSZhZGRMaW1pdD0xMDAmcmVtb3ZlTGltaXQ9NSZwYXJ0aWNsZVdpZHRoPTUwJnBhcnRpY2xlSGVp
Z2h0PTUwJnNoYXBlPWNpcmNsZSZmaWxsPWdyYWRpZW50IiwKKyAgICAgICAgICAgIG5hbWU6ICJi
b3VuY2luZyBncmFkaWVudCBjaXJjbGVzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICB1cmw6ICIuLi90ZXN0cy9ib3VuY2luZy1wYXJ0aWNsZXMvYm91bmNpbmctY3NzLWltYWdl
cy5odG1sP2dhaW49MC40JmFkZExpbWl0PTUmcmVtb3ZlTGltaXQ9MiZwYXJ0aWNsZVdpZHRoPTgw
JnBhcnRpY2xlSGVpZ2h0PTgwJmltYWdlU3JjPS4uL3Jlc291cmNlcy95aW4teWFuZy5zdmciLAor
ICAgICAgICAgICAgbmFtZTogImJvdW5jaW5nIFNWRyBpbWFnZXMiCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVybDogIi4uL3Rlc3RzL2JvdW5jaW5nLXBhcnRpY2xlcy9ib3Vu
Y2luZy1jc3MtaW1hZ2VzLmh0bWw/Z2Fpbj0xJmFkZExpbWl0PTEwMCZyZW1vdmVMaW1pdD01JnBh
cnRpY2xlV2lkdGg9ODAmcGFydGljbGVIZWlnaHQ9ODAmaW1hZ2VTcmM9Li4vcmVzb3VyY2VzL3lp
bi15YW5nLnBuZyIsCisgICAgICAgICAgICBuYW1lOiAiYm91bmNpbmcgUE5HIGltYWdlcyIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgdXJsOiAiLi4vdGVzdHMvdGV4dC9sYXll
cmluZy10ZXh0Lmh0bWw/Z2Fpbj00JmFkZExpbWl0PTEwMCZyZW1vdmVMaW1pdD0xMDAiLAorICAg
ICAgICAgICAgbmFtZTogImxheWVyaW5nIHRleHQiCisgICAgICAgIH0sCisgICAgXQorfSk7CisK
K1N1aXRlcy5wdXNoKAoreworICAgIG5hbWU6ICJDYW52YXMgQm91bmNpbmcgUGFydGljbGVzIiwK
KyAgICBwcmVwYXJlOiBmdW5jdGlvbihydW5uZXIsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1
bWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBydW5uZXIud2FpdEZvckVsZW1lbnQoIiNzdGFn
ZSIpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50
OworICAgICAgICB9KTsKKyAgICB9LCAgCisgICAgCisgICAgcnVuOiBmdW5jdGlvbihjb250ZW50
V2luZG93LCB0ZXN0LCBvcHRpb25zLCByZWNvcmRUYWJsZSwgcHJvZ3Jlc3NCYXIpCisgICAgewor
ICAgICAgICByZXR1cm4gY29udGVudFdpbmRvdy5ydW5CZW5jaG1hcmsodGhpcywgdGVzdCwgb3B0
aW9ucywgcmVjb3JkVGFibGUsIHByb2dyZXNzQmFyKTsKKyAgICB9LAorICAgIAorICAgIHRpdGxl
czogVGl0bGVzLAorICAgIHRlc3RzOgorICAgIFsKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHVy
bDogIi4uL3Rlc3RzL2JvdW5jaW5nLXBhcnRpY2xlcy9ib3VuY2luZy1jYW52YXMtc2hhcGVzLmh0
bWw/Z2Fpbj00JmFkZExpbWl0PTEwMCZyZW1vdmVMaW1pdD0xMDAwJnBhcnRpY2xlV2lkdGg9MTIm
cGFydGljbGVIZWlnaHQ9MTImc2hhcGU9Y2lyY2xlIiwKKyAgICAgICAgICAgIG5hbWU6ICJjYW52
YXMgYm91bmNpbmcgY2lyY2xlcyIKKyAgICAgICAgfSwKKyAgICAgICAgeyAKKyAgICAgICAgICAg
IHVybDogIi4uL3Rlc3RzL2JvdW5jaW5nLXBhcnRpY2xlcy9ib3VuY2luZy1jYW52YXMtc2hhcGVz
Lmh0bWw/Z2Fpbj00JmFkZExpbWl0PTEwMCZyZW1vdmVMaW1pdD0xMDAwJnBhcnRpY2xlV2lkdGg9
NDAmcGFydGljbGVIZWlnaHQ9NDAmc2hhcGU9cmVjdCZjbGlwPXN0YXIiLAorICAgICAgICAgICAg
bmFtZTogImNhbnZhcyBib3VuY2luZyBjbGlwcGVkIHJlY3RzIgorICAgICAgICB9LAorICAgICAg
ICB7IAorICAgICAgICAgICAgdXJsOiAiLi4vdGVzdHMvYm91bmNpbmctcGFydGljbGVzL2JvdW5j
aW5nLWNhbnZhcy1zaGFwZXMuaHRtbD9nYWluPTQmYWRkTGltaXQ9MTAwJnJlbW92ZUxpbWl0PTEw
MDAmcGFydGljbGVXaWR0aD01MCZwYXJ0aWNsZUhlaWdodD01MCZzaGFwZT1jaXJjbGUmZmlsbD1n
cmFkaWVudCIsCisgICAgICAgICAgICBuYW1lOiAiY2FudmFzIGJvdW5jaW5nIGdyYWRpZW50IGNp
cmNsZXMiCisgICAgICAgIH0sCisgICAgICAgIHsgCisgICAgICAgICAgICB1cmw6ICIuLi90ZXN0
cy9ib3VuY2luZy1wYXJ0aWNsZXMvYm91bmNpbmctY2FudmFzLWltYWdlcy5odG1sP2dhaW49MC40
JmFkZExpbWl0PTUmcmVtb3ZlTGltaXQ9MSZwYXJ0aWNsZVdpZHRoPTgwJnBhcnRpY2xlSGVpZ2h0
PTgwJmltYWdlU3JjPS4uL3Jlc291cmNlcy95aW4teWFuZy5zdmciLAorICAgICAgICAgICAgbmFt
ZTogImNhbnZhcyBib3VuY2luZyBTVkcgaW1hZ2VzIgorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICB1cmw6ICIuLi90ZXN0cy9ib3VuY2luZy1wYXJ0aWNsZXMvYm91bmNpbmctY2Fu
dmFzLWltYWdlcy5odG1sP2dhaW49NCZhZGRMaW1pdD0xMDAwJnJlbW92ZUxpbWl0PTEwMDAmcGFy
dGljbGVXaWR0aD04MCZwYXJ0aWNsZUhlaWdodD04MCZpbWFnZVNyYz0uLi9yZXNvdXJjZXMveWlu
LXlhbmcucG5nIiwKKyAgICAgICAgICAgIG5hbWU6ICJjYW52YXMgYm91bmNpbmcgUE5HIGltYWdl
cyIKKyAgICAgICAgfSwKKyAgICBdCit9KTsKKworU3VpdGVzLnB1c2goCit7CisgICAgbmFtZTog
IlNWRyBCb3VuY2luZyBQYXJ0aWNsZXMiLAorICAgIHByZXBhcmU6IGZ1bmN0aW9uKHJ1bm5lciwg
Y29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJ1
bm5lci53YWl0Rm9yRWxlbWVudCgiI3N0YWdlIikudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0pOworICAgIH0sCisgICAgCisg
ICAgcnVuOiBmdW5jdGlvbihjb250ZW50V2luZG93LCB0ZXN0LCBvcHRpb25zLCByZWNvcmRUYWJs
ZSwgcHJvZ3Jlc3NCYXIpCisgICAgeworICAgICAgICByZXR1cm4gY29udGVudFdpbmRvdy5ydW5C
ZW5jaG1hcmsodGhpcywgdGVzdCwgb3B0aW9ucywgcmVjb3JkVGFibGUsIHByb2dyZXNzQmFyKTsK
KyAgICB9LAorICAgIAorICAgIHRpdGxlczogVGl0bGVzLAorICAgIHRlc3RzOgorICAgIFsKKyAg
ICAgICAgeworICAgICAgICAgICAgdXJsOiAiLi4vdGVzdHMvYm91bmNpbmctcGFydGljbGVzL2Jv
dW5jaW5nLXN2Zy1zaGFwZXMuaHRtbD9nYWluPTYmYWRkTGltaXQ9MTAwJnJlbW92ZUxpbWl0PTEw
MDAmcGFydGljbGVXaWR0aD0xMiZwYXJ0aWNsZUhlaWdodD0xMiZzaGFwZT1jaXJjbGUiLAorICAg
ICAgICAgICAgbmFtZTogIlNWRyBib3VuY2luZyBjaXJjbGVzIiwKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgdXJsOiAiLi4vdGVzdHMvYm91bmNpbmctcGFydGljbGVzL2JvdW5j
aW5nLXN2Zy1zaGFwZXMuaHRtbD9nYWluPTAuNiZhZGRMaW1pdD0xMCZyZW1vdmVMaW1pdD0xJnBh
cnRpY2xlV2lkdGg9NDAmcGFydGljbGVIZWlnaHQ9NDAmc2hhcGU9cmVjdCZjbGlwPXN0YXIiLAor
ICAgICAgICAgICAgbmFtZTogIlNWRyBib3VuY2luZyBjbGlwcGVkIHJlY3RzIiwKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgdXJsOiAiLi4vdGVzdHMvYm91bmNpbmctcGFydGlj
bGVzL2JvdW5jaW5nLXN2Zy1zaGFwZXMuaHRtbD9nYWluPTAuOCZhZGRMaW1pdD0xMCZyZW1vdmVM
aW1pdD00JnBhcnRpY2xlV2lkdGg9NTAmcGFydGljbGVIZWlnaHQ9NTAmc2hhcGU9Y2lyY2xlJmZp
bGw9Z3JhZGllbnQiLAorICAgICAgICAgICAgbmFtZTogIlNWRyBib3VuY2luZyBncmFkaWVudCBj
aXJjbGVzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB1cmw6ICIuLi90ZXN0
cy9ib3VuY2luZy1wYXJ0aWNsZXMvYm91bmNpbmctc3ZnLWltYWdlcy5odG1sP2dhaW49MC40JmFk
ZExpbWl0PTUmcmVtb3ZlTGltaXQ9MiZwYXJ0aWNsZVdpZHRoPTgwJnBhcnRpY2xlSGVpZ2h0PTgw
JmltYWdlU3JjPS4uL3Jlc291cmNlcy95aW4teWFuZy5zdmciLAorICAgICAgICAgICAgbmFtZTog
IlNWRyBib3VuY2luZyBTVkcgaW1hZ2VzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICB1cmw6ICIuLi90ZXN0cy9ib3VuY2luZy1wYXJ0aWNsZXMvYm91bmNpbmctc3ZnLWltYWdl
cy5odG1sP2dhaW49NCZhZGRMaW1pdD0xMDAmcmVtb3ZlTGltaXQ9NSZwYXJ0aWNsZVdpZHRoPTgw
JnBhcnRpY2xlSGVpZ2h0PTgwJmltYWdlU3JjPS4uL3Jlc291cmNlcy95aW4teWFuZy5wbmciLAor
ICAgICAgICAgICAgbmFtZTogIlNWRyBib3VuY2luZyBQTkcgaW1hZ2VzIgorICAgICAgICB9LAor
ICAgIF0KK30pOworCitTdWl0ZXMucHVzaCgKK3sKKyAgICBuYW1lOiAiU3RhZ2UgVGVtcGxhdGVz
IChDYW4gYmUgdXNlZCBmb3IgbmV3IHRlc3RzKSIsCisgICAgcHJlcGFyZTogZnVuY3Rpb24ocnVu
bmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpCisgICAgeworICAgICAgICByZXR1
cm4gcnVubmVyLndhaXRGb3JFbGVtZW50KCIjc3RhZ2UiKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50
KSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfSk7CisgICAgfSwKKyAg
ICAKKyAgICBydW46IGZ1bmN0aW9uKGNvbnRlbnRXaW5kb3csIHRlc3QsIG9wdGlvbnMsIHJlY29y
ZFRhYmxlLCBwcm9ncmVzc0JhcikKKyAgICB7CisgICAgICAgIHJldHVybiBjb250ZW50V2luZG93
LnJ1bkJlbmNobWFyayh0aGlzLCB0ZXN0LCBvcHRpb25zLCByZWNvcmRUYWJsZSwgcHJvZ3Jlc3NC
YXIpOworICAgIH0sCisgICAgCisgICAgdGl0bGVzOiBUaXRsZXMsCisgICAgdGVzdHM6CisgICAg
WworICAgICAgICB7CisgICAgICAgICAgICB1cmw6ICIuLi90ZXN0cy90ZW1wbGF0ZS90ZW1wbGF0
ZS1jc3MuaHRtbD9nYWluPTEmYWRkTGltaXQ9MTAwJnJlbW92ZUxpbWl0PTUiLAorICAgICAgICAg
ICAgbmFtZTogInRlbXBsYXRlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB1
cmw6ICIuLi90ZXN0cy90ZW1wbGF0ZS90ZW1wbGF0ZS1jYW52YXMuaHRtbD9nYWluPTEmYWRkTGlt
aXQ9MTAwJnJlbW92ZUxpbWl0PTUiLAorICAgICAgICAgICAgbmFtZTogImNhbnZhcyB0ZW1wbGF0
ZSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgdXJsOiAiLi4vdGVzdHMvdGVt
cGxhdGUvdGVtcGxhdGUtc3ZnLmh0bWw/Z2Fpbj0xJmFkZExpbWl0PTEwMCZyZW1vdmVMaW1pdD01
JjxvdGhlcl9wYXJhbXRlcj49PHZhbHVlPiIsCisgICAgICAgICAgICBuYW1lOiAic3ZnIHRlbXBs
YXRlIgorICAgICAgICB9LAorICAgIF0KK30pOworCitmdW5jdGlvbiBzdWl0ZUZyb21OYW1lKG5h
bWUpIHsKKyAgICByZXR1cm4gU3VpdGVzLmZpbmQoZnVuY3Rpb24oc3VpdGUpIHsgcmV0dXJuIHN1
aXRlLm5hbWUgPT0gbmFtZTsgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGcm9tTmFtZShzdWl0ZSwg
bmFtZSkgeworICAgIHJldHVybiBzdWl0ZS50ZXN0cy5maW5kKGZ1bmN0aW9uKHRlc3QpIHsgcmV0
dXJuIHRlc3QubmFtZSA9PSBuYW1lOyB9KTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262303</attachid>
            <date>2015-10-01 17:29:11 -0700</date>
            <delta_ts>2015-10-02 15:15:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149683-20151001172845.patch</filename>
            <type>text/plain</type>
            <size>190315</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTA0NDApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE1LTEwLTAxICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IHRoZSB0ZXN0IHJ1bm5lciBmb3IgYSBuZXcgYSBncmFwaGljcyBiZW5jaG1hcmsKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTY4MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSB0ZXN0IHJ1bm5lciBj
b2xsZWN0cyB0aGUgc2VsZWN0ZWQgdGVzdCBzdWl0ZXMgYW5kIHRoZSBydW5uaW5nIG9wdGlvbnMK
KyAgICAgICAgZnJvbSBpdHMgaG9tZSBwYWdlLiBJdCBsb29wcyB0aHJvdWdoIGFsbCB0aGUgdGVz
dHMsIHJ1bnMgdGhlbSBhbmQgY29sbGVjdHMKKyAgICAgICAgdGhlaXIgcnVubmluZyByZXN1bHRz
LiBBdCB0aGUgZW5kLCBpdCBzaG93cyBzdW1tYXJ5IHJlc3VsdHMgYW5kIGEgZmluYWwKKyAgICAg
ICAgc2NvcmUuIEl0IGNhbiBhbHNvIHNob3cgYSBjaGFydCBmb3IgYSB0ZXN0IHNhbXBsZWQgZGF0
YS4KKworICAgICAgICAqIEFuaW1vbWV0ZXI6IEFkZGVkLgorICAgICAgICAqIEFuaW1vbWV0ZXIv
cnVubmVyOiBBZGRlZC4KKyAgICAgICAgKiBBbmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXM6IEFk
ZGVkLgorICAgICAgICAKKyAgICAgICAgKiBBbmltb21ldGVyL3J1bm5lci9hbmltb21ldGVyLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIEFuaW1vbWV0ZXIvcnVubmVyL3Jlc291cmNlcy9hbmltb21l
dGVyLmNzczogQWRkZWQuCisgICAgICAgIFRoZSBiZW5jaG1hcmsgcnVubmVyIHBhZ2UgYW5kIGNz
cy4KKworICAgICAgICAqIEFuaW1vbWV0ZXIvcnVubmVyL3Jlc291cmNlcy9hbmltb21ldGVyLmpz
OiBBZGRlZC4KKyAgICAgICAgKHdpbmRvdy5iZW5jaG1hcmtSdW5uZXJDbGllbnQud2lsbEFkZFRl
c3RGcmFtZSk6IENhbGxlZCBhZnRlciB0aGUgdGVzdCA8aWZyYW1lPiBpcyBjcmVhdGVkLgorICAg
ICAgICAod2luZG93LmJlbmNobWFya1J1bm5lckNsaWVudC5kaWRSdW5UZXN0KTogQ2FsbGVkIGFm
dGVyIHJ1bm5pbmcgYSB0ZXN0IGlzIGZpbmlzaGVkLgorICAgICAgICAod2luZG93LmJlbmNobWFy
a1J1bm5lckNsaWVudC53aWxsU3RhcnRGaXJzdEl0ZXJhdGlvbik6IENhbGxlZCBhdCB0aGUgYmVn
aW5uaW5nIGJlZm9yZSBydW5uaW5nIGFueSB0ZXN0LgorICAgICAgICAod2luZG93LmJlbmNobWFy
a1J1bm5lckNsaWVudC5kaWRSdW5TdWl0ZXMpOiBDYWxsZWQgYWZ0ZXIgcnVubmluZyBhbGwgdGVz
dHMgb2YgYSBzdWl0ZS4KKyAgICAgICAgKHdpbmRvdy5iZW5jaG1hcmtSdW5uZXJDbGllbnQuZGlk
RmluaXNoTGFzdEl0ZXJhdGlvbik6IENhbGxlZCBhZnRlciBydW5uaW5nIHRoZSBsYXN0IHRlc3Qu
CisgICAgICAgIAorICAgICAgICAoc2hvd1NlY3Rpb24pOiBTaG93cyBhIHNlY3Rpb24gaW4gdGhl
IGFuaW1vbWV0ZXIuaHRtbCBwYWdlLgorICAgICAgICAoc3RhcnRUZXN0KTogQ2FsbGVkIHdoZW4g
dGhlICJTdGFydCBUZXN0IiBidXR0b24gaXMgY2xpY2tlZC4KKyAgICAgICAgKHNob3dSZXN1bHRz
KTogQ2FsbGVkIGFmdGVyIGZpbmlzaGluZyBhbGwgdGhlIHRlc3RzLgorICAgICAgICAoc2hvd0dy
YXBoKTogQ2FsbGVkIHdoZW4gIkNsaWNrLi4uIiBidXR0b24gaW4gdGhlICJTYW1wbGVzIiBjb2x1
bW4gb2YgdGhlIHJlc3VsdHMgdGFibGUgaXMgY2xpY2tlZAorICAgICAgICAKKyAgICAgICAgKiBB
bmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qczogQ29waWVkIGZy
b20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5l
ci5qcy4KKyAgICAgICAgKEJlbmNobWFya1J1bm5lclN0YXRlKTogVHJhY2tzIHRoZSBjdXJyZW50
IHJ1bm5pbmcgPHN1aXRlLCB0ZXN0PgorICAgICAgICAoQmVuY2htYXJrUnVubmVyU3RhdGUucHJv
dG90eXBlLmN1cnJlbnRTdWl0ZSk6IFJldHVybnMgdGhlIGN1cnJlbnQgcnVubmluZyBzdWl0ZS4K
KyAgICAgICAgKEJlbmNobWFya1J1bm5lclN0YXRlLnByb3RvdHlwZS5jdXJyZW50VGVzdCk6IFJl
dHVybnMgdGhlIGN1cnJlbnQgcnVubmluZyB0ZXN0LgorICAgICAgICAoQmVuY2htYXJrUnVubmVy
U3RhdGUucHJvdG90eXBlLmlzRmlyc3RUZXN0KTogUmV0dXJucyB0cnVlIGlmIHdlIGFyZSBydW5u
aW5nIHRoZSBmaXJzdCB0ZXN0IGluIHRoZSBjdXJyZW50IHN1aXRlLgorICAgICAgICAoQmVuY2ht
YXJrUnVubmVyU3RhdGUucHJvdG90eXBlLm5leHQpOiBBZHZhbmNlcyB0byB0aGUgbmV4dCB0ZXN0
LgorICAgICAgICAoQmVuY2htYXJrUnVubmVyU3RhdGUucHJvdG90eXBlLnByZXBhcmVDdXJyZW50
VGVzdCk6IENyZWF0ZXMgYSBuZXcgPGlmcmFtZT4gYW5kIHdhaXRzIGZvciBpdCB0byBsb2FkIGEg
dGVzdC4KKyAgICAgICAgCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIpOiBNYW5hZ2VzIHJ1bm5p
bmcgdGhlIHRlc3RzIGFuZCBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGJlbmNobWFya1J1bm5lckNs
aWVudC4KKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5wcm90b3R5cGUud2FpdEZvckVsZW1lbnQp
OiBXYWl0cyBmb3IgYW4gZWxlbWVudCB0byBiZSBjcmVhdGVkLgorICAgICAgICAoQmVuY2htYXJr
UnVubmVyLnByb3RvdHlwZS5fYXBwZW5kRnJhbWUpOiBDcmVhdGVzIGEgbmV3IDxpZnJhbWU+IGVs
ZW1lbnQuCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLl9yZW1vdmVGcmFtZSk6
IFJlbW92ZWQgdGhlIGN1cnJlbnQgPGlmcmFtZT4gZWxlbWVudC4KKyAgICAgICAgKEJlbmNobWFy
a1J1bm5lci5wcm90b3R5cGUuX3J1blRlc3RBbmRSZWNvcmRSZXN1bHRzKTogUnVucyB0aGUgY3Vy
cmVudCB0ZXN0IGFuZCBzYXZlcyBpdHMgcmVzdWx0cy4KKyAgICAgICAgKEJlbmNobWFya1J1bm5l
ci5wcm90b3R5cGUuc3RlcCk6IEVpdGhlciBydW5zIHRoZSBjdXJyZW50IHRlc3QgaWYgdGhlcmUg
aXMgb3Igc3RhcnQgYSBuZXcgaXRlcmF0aW9uLgorICAgICAgICAoQmVuY2htYXJrUnVubmVyLnBy
b3RvdHlwZS5ydW5BbGxTdGVwcyk6IExvb3BzIHRvIHJ1biBhbGwgdGhlIHRlc3RzIGFuZCBtb3Zl
IHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKyAgICAgICAgKHRoaXMuX3J1bk5leHRJdGVyYXRpb24p
OiBTdGFydHMgYSBuZXcgaXRlcmF0aW9uIG9yIHNob3cgdGhlIHJlc3VsdHMuCisgICAgICAgIChC
ZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLnJ1bk11bHRpcGxlSXRlcmF0aW9ucyk6IExvb3BzIHRv
IHJ1biBhbGwgdGhlIGl0ZXJhdGlvbnMgYW5kIHNob3cgdGhlIHJlc3VsdHMKKyAgICAgICAgKEJl
bmNobWFya1J1bm5lci5wcm90b3R5cGUuX2ZpbmFsaXplKTogRmluYWxpemVzIHRoZSBjdXJyZW50
IGl0ZXJhdGlvbiBhbmQgc3RhcnRzIGEgbmV3IG9uZS4KKworICAgICAgICAoU2ltcGxlUHJvbWlz
ZSk6IERlbGV0ZWQuCisgICAgICAgIChTaW1wbGVQcm9taXNlLnByb3RvdHlwZS50aGVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKFNpbXBsZVByb21pc2UucHJvdG90eXBlLnJlc29sdmUpOiBEZWxldGVk
LgorICAgICAgICAoQmVuY2htYXJrVGVzdFN0ZXApOiBEZWxldGVkLgorICAgICAgICAoRmlib25h
Y2NpKTogRGVsZXRlZC4KKyAgICAgICAgU2ltcGxlUHJvbWlzZSB3YXMgbW92ZWQgdCBBbmltb21l
dGVyL3Jlc291cmNlcy9leHRlbnNpb25zLmpzIGJlY2F1c2UgaXQgaXMgdXNlZCBieSB0aGUgcnVu
bmVyIGFuZCB0aGUgdGVzdHMuCisgICAgICAgIAorICAgICAgICAoQmVuY2htYXJrUnVubmVyLnBy
b3RvdHlwZS5fd2FpdEFuZFdhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgIChCZW5jaG1hcmtSdW5u
ZXIucHJvdG90eXBlLl9ydW5UZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEJlbmNobWFya1N0YXRl
LnByb3RvdHlwZS5jdXJyZW50U3VpdGUpOiBEZWxldGVkLgorICAgICAgICAoQmVuY2htYXJrU3Rh
dGUucHJvdG90eXBlLmN1cnJlbnRUZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEJlbmNobWFya1N0
YXRlLnByb3RvdHlwZS5uZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEJlbmNobWFya1N0YXRlLnBy
b3RvdHlwZS5pc0ZpcnN0VGVzdCk6IERlbGV0ZWQuCisgICAgICAgIChCZW5jaG1hcmtTdGF0ZS5w
cm90b3R5cGUucHJlcGFyZUN1cnJlbnRTdWl0ZSk6IERlbGV0ZWQuCisgICAgICAgIEJlbmNobWFy
a1N0YXRlIHdhcyByZW5hbWVkIHRvIEJlbmNobWFya1J1bm5lclN0YXRlIHRvIG5vdCBiZSBjb25m
dXNlZCB3aXRoIHRoZSB0ZXN0cyBCZW5jaG1hcmtTdGF0ZS4KKyAgICAgICAgCisgICAgICAgICog
QW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL2QzLm1pbi5qczogQ29waWVkIGZyb20gV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9kMy9kMy5taW4uanMuCisgICAgICAgIE5l
ZWRlZCBmb3IgZHJhd2luZyBjaGFydHMgZm9yIHRoZSBzYW1wbGVkIHNjb3JlcyBhbmQgZnJhbWUg
cmF0ZXMuCisgICAgICAgIAorICAgICAgICAqIEFuaW1vbWV0ZXIvcnVubmVyL3Jlc291cmNlcy9n
cmFwaC5qczogQWRkZWQuCisgICAgICAgIChncmFwaCk6IERyYXdzIGEgY2hhcnQgZm9yIGEgdGVz
dCBzYW1wbGVkIGRhdGEuIEl0IHNob3dzIHR3byB5LWF4ZXM6IG9uZSBmb3IgdGhlIGFuaW1hdGVk
IGl0ZW1zIGFuZCB0aGUgc2Vjb25kIGZvciBGUFMuCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICogU2tpcHBlZDogU2tpcCB0aGUgQW5pbW9tZXRlciBiZW5jaG1hcmsgZm9yIG5vdy4KKwogMjAx
NS0wOC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtFRkxdIFJFR1JFU1NJT04ocjE4ODc5Myk6IEl0IG1hZGUgMjAwIGxheW91dCB0ZXN0cyBhbmQg
QmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCBwZXJmb3JtYW5jZSB0ZXN0IGZhaWwK
SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL1NraXBwZWQJKHJldmlzaW9uIDE5MDI3OCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvU2tp
cHBlZAkod29ya2luZyBjb3B5KQpAQCAtOTYsMyArOTYsNiBAQCBEcm9tYWVvL2pzbGliLW1vZGlm
eS1wcm90b3R5cGUuaHRtbAogIyBbRUZMXSBSRUdSRVNTSU9OKHIxODg3OTMpOiBJdCBtYWRlIDIw
MCBsYXlvdXQgdGVzdHMgYW5kIEJpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwgcGVy
Zm9ybWFuY2UgdGVzdCBmYWlsCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDg0NzAKIFsgRUZMIF0gQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbAor
CisjIFN0aWxsIHVuZGVyIGRldmVsb3BtZW50IHNvIHNraXAgaXQgZm9yIG5vdy4KK0FuaW1vbWV0
ZXIKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvYW5pbW9tZXRlci5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvYW5p
bW9tZXRlci5odG1sCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVy
L3J1bm5lci9hbmltb21ldGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0icmVzb3VyY2VzL2FuaW1vbWV0ZXIuY3NzIj4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3N0YXRpc3RpY3MuanMiIGRlZmVyPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvc2FtcGxlci5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9leHRlbnNpb25zLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3Rlc3RzLmpzIiBkZWZlcj0iIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMiIGRlZmVyPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYW5pbW9tZXRlci5qcyIgZGVmZXI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9kMy5taW4uanMiIGRlZmVyPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZ3JhcGguanMiIGRlZmVyPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+CisgICAgPG1haW4+CisgICAgICAgIDxzZWN0aW9uIGlkPSJob21lIiBjbGFz
cz0ic2VsZWN0ZWQiPgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgQW5pbW9tZXRl
ciBpcyBhIGJyb3dzZXIgYmVuY2htYXJrIHRoYXQgbWVhc3VyZXMgdGhlIGNvbXBsZXhpdHkgb2Yg
YW4gYW5pbWF0aW9uIGZvcgorICAgICAgICAgICAgICAgIHdoaWNoIGEgYnJvd3NlciBjYW4gYWNo
aWV2ZSA1MCBGUFMgKGZyYW1lIHBlciBzZWNvbmQpLiBJdCB1c2VzIGFkYXB0aXZlIGFuaW1hdGlv
bnMKKyAgICAgICAgICAgICAgICB0byB0dW5lIHRoZWlyIGNvbXBsZXhpdGllcyB0byBzdGF5IGNs
b3NlIHRvIDUwIEZQUy4KKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9
Im9wdGlvbnMiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbiI+CisgICAgICAg
ICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9Imh0bWwtc3VpdGUiIHR5cGU9ImNoZWNrYm94
IiBjaGVja2VkPiBIVE1MIGVsZW1lbnRzIHN1aXRlPC9sYWJlbD48YnI+CisgICAgICAgICAgICAg
ICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9ImNhbnZhcy1zdWl0ZSIgdHlwZT0iY2hlY2tib3giIGNo
ZWNrZWQ+IENhbnZhcyBkcmF3aW5ncyBzdWl0ZTwvbGFiZWw+PGJyPgorICAgICAgICAgICAgICAg
ICAgICA8bGFiZWw+PGlucHV0IGlkPSJzdmctc3VpdGUiIHR5cGU9ImNoZWNrYm94IiBjaGVja2Vk
PiBTVkcgZWxlbWVudHMgc3VpdGU8L2xhYmVsPjxicj4KKyAgICAgICAgICAgICAgICAgICAgPGxh
YmVsPjxpbnB1dCBpZD0idGVtcGxhdGUtc3VpdGUiIHR5cGU9ImNoZWNrYm94Ij4gVGVtcGxhdGUg
c3VpdGU8L2xhYmVsPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxk
aXY+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5UZXN0IGludGVydmFsOiA8aW5wdXQgaWQ9
InRlc3QtaW50ZXJ2YWwiIHR5cGU9Im51bWJlciIgdmFsdWU9IjMwIj4gc2Vjb25kczwvbGFiZWw+
PGJyPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWw+RnJhbWUgcmF0ZTogPGlucHV0IGlkPSJm
cmFtZS1yYXRlIiB0eXBlPSJudW1iZXIiIHZhbHVlPSI1MCI+IGZwczwvbGFiZWw+PGJyPgorICAg
ICAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IGlkPSJlc3RpbWF0ZWQtZnJhbWUtcmF0ZSIg
dHlwZT0iY2hlY2tib3giIGNoZWNrZWQ+IEVzdGltYXRlZCBGcmFtZSBSYXRlPC9sYWJlbD48YnI+
CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9ImZpeC10ZXN0LWNvbXBsZXhp
dHkiIHR5cGU9ImNoZWNrYm94Ij4gRml4IHRlc3QgY29tcGxleGl0eSBhZnRlciB3YXJtdXA8L2xh
YmVsPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIG9uY2xp
Y2s9InN0YXJ0VGVzdCgpIj5TdGFydCBUZXN0PC9idXR0b24+CisgICAgICAgICAgICA8L2Rpdj4K
KyAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8c2VjdGlvbiBpZD0icnVubmluZyI+CisgICAg
ICAgICAgICA8ZGl2IGlkPSJ0ZXN0Q29udGFpbmVyIj48L2Rpdj4KKyAgICAgICAgICAgIDxkaXYg
aWQ9InByb2dyZXNzIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1jb21wbGV0
ZWQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGlkPSJyZWNv
cmQiPgorICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0icmVjb3JkLXRhYmxlIj48L3RhYmxl
PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPHNlY3Rp
b24gaWQ9InJlc3VsdHMiPgorICAgICAgICAgICAgPGgxPlJlc3VsdHM8L2gxPgorICAgICAgICAg
ICAgPHRhYmxlIGNsYXNzPSJyZXN1bHRzLXRhYmxlIj48L3RhYmxlPgorICAgICAgICAgICAgPGRp
diBjbGFzcz0iYnV0dG9ucyI+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJzdGFy
dFRlc3QoKSI+VGVzdCBBZ2FpbjwvYnV0dG9uPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAg
IDwvc2VjdGlvbj4gIAorICAgICAgICA8c2VjdGlvbiBpZD0iZ3JhcGgiPgorICAgICAgICAgICAg
PGgxPkdyYXBoPC9oMT4KKyAgICAgICAgICAgIDxkaXYgaWQ9ImdyYXBoQ29udGFpbmVyIj48L2Rp
dj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbnMiPgorICAgICAgICAgICAgICAgIDxi
dXR0b24gb25jbGljaz0ic2hvd1Jlc3VsdHMoKSI+UmVzdWx0czwvYnV0dG9uPgorICAgICAgICAg
ICAgICAgIDxidXR0b24gb25jbGljaz0ic3RhcnRUZXN0KCkiPlRlc3QgQWdhaW48L2J1dHRvbj4g
ICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvc2VjdGlvbj4gIAorICAgIDwv
bWFpbj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRl
ci9ydW5uZXIvcmVzb3VyY2VzL2FuaW1vbWV0ZXIuY3NzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL2FuaW1vbWV0ZXIuY3NzCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXMv
YW5pbW9tZXRlci5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjEgQEAKK2JvZHkgewor
ICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig5NiwgOTYsIDk2KTsKKyAgICBjb2xvcjogcmdiKDIz
NSwgMjM1LCAyMzUpOworICAgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRp
Y2EsIFZlcmRhbmEsIHNhbnMtc2VyaWY7Cit9CisKK21haW4geworICAgIGRpc3BsYXk6IGJsb2Nr
OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogODAwcHg7CisgICAgaGVpZ2h0
OiA2MDBweDsKKyAgICB0b3A6IDUwJTsKKyAgICBsZWZ0OiA1MCU7CisgICAgbWFyZ2luLXRvcDog
LTMyMXB4OworICAgIG1hcmdpbi1sZWZ0OiAtNDIxcHg7CisgICAgcGFkZGluZzogMTVweDsKKyAg
ICBib3JkZXI6IDZweCBzb2xpZCByZ2IoMjM1LCAyMzUsIDIzNSk7CisgICAgYm9yZGVyLXJhZGl1
czogMjBweDsKK30KKworaWZyYW1lIHsKKyAgICB3aWR0aDogODAwcHg7CisgICAgaGVpZ2h0OiA2
MDBweDsKKyAgICBib3JkZXI6IDBweCBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30K
KworbGFiZWwsIHAgeworICAgIGZvbnQtc2l6ZTogMTZweDsKKyAgICBsaW5lLWhlaWdodDogMjFw
eDsKK30KKworc2VjdGlvbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworc2VjdGlvbiA+IHAg
eworICAgIG1hcmdpbjogMTBweCAyMHB4OworfQorCitzZWN0aW9uI2hvbWUgPiBwIHsKKyAgICBt
YXJnaW46IDAgYXV0bzsKKyAgICB3aWR0aDogNzAlOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsK
K30KKworc2VjdGlvbiNob21lID4gcDpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLXRvcDogMTYw
cHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitzZWN0aW9uLnNlbGVjdGVkIHsKKyAg
ICBkaXNwbGF5OiBibG9jazsKK30KKworI3Rlc3RDb250YWluZXIgeworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICB0b3A6IDE1cHg7CisgICAgbGVmdDogMTVweDsKKyAgICB3aWR0aDogODAw
cHg7CisgICAgaGVpZ2h0OiA2MDBweDsKK30KKworc2VjdGlvbiNydW5uaW5nID4gI3Byb2dyZXNz
IHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAtNnB4OworICAgIGxlZnQ6
IDYwcHg7CisgICAgcmlnaHQ6IDYwcHg7CisgICAgaGVpZ2h0OiA2cHg7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOworICAgIGJvcmRlci1sZWZ0OiA2cHggc29saWQg
cmdiKDQ2LCA1MSwgNTUpOworICAgIGJvcmRlci1yaWdodDogNnB4IHNvbGlkIHJnYig0NiwgNTEs
IDU1KTsKK30KKworc2VjdGlvbiNydW5uaW5nICNwcm9ncmVzcy1jb21wbGV0ZWQgeworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6
IDZweDsKKyAgICB3aWR0aDogMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjM1LCAyMzUs
IDIzNSk7Cit9CisKK3NlY3Rpb24jcnVubmluZyA+ICNyZWNvcmQgeworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICBib3R0b206IC0xMzBweDsKKyAgICBsZWZ0OiAwcHg7CisgICAgcmlnaHQ6
IDBweDsKKyAgICBoZWlnaHQ6IDc1cHg7CisgICAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsK
KyAgICBwYWRkaW5nOiAxNXB4OworICAgIGJvcmRlcjogNnB4IHNvbGlkIHJnYigyMzUsIDIzNSwg
MjM1KTsKKyAgICBib3JkZXItcmFkaXVzOiAyMHB4OworfQorCitzZWN0aW9uI3J1bm5pbmcgPiAj
cmVjb3JkID4gdGFibGUsCitzZWN0aW9uI3Jlc3VsdHMgPiB0YWJsZSB7CisgICAgd2lkdGg6IDEw
MCU7Cit9CisKK3NlY3Rpb24jcnVubmluZyA+ICNyZWNvcmQgPiB0YWJsZSB0ZCwgdGgsCitzZWN0
aW9uI3Jlc3VsdHMgPiB0YWJsZSB0ZCwgdGggeworICAgIGZvbnQtc2l6ZTogMTFweDsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZCAjOThiZjIxOworICAgIHBhZGRpbmc6IDNweCA0cHggMnB4IDRweDsK
K30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3NlY3Rpb24j
cnVubmluZyA+ICNyZWNvcmQgPiB0YWJsZSB0ci5hbHQsIHRkCitzZWN0aW9uI3Jlc3VsdHMgPiB0
YWJsZSB0ci5hbHQsIHRkIHsKKyAgICBjb2xvcjogIzAwMDAwMDsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiAjRUFGMkQzOworfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCitzZWN0aW9uI3J1bm5pbmcgPiAjcmVjb3JkID4gdGFibGUgdGgsCitzZWN0aW9uI3Jl
c3VsdHMgPiB0YWJsZSB0aCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0E3Qzk0MjsgCisgICAg
dGV4dC1hbGlnbjogY2VudGVyOworfQorCisub3B0aW9ucyB7CisgICAgbWFyZ2luOjAgYXV0bzsg
ICAgCisgICAgbWFyZ2luLXRvcDogMzBweDsKKyAgICB3aWR0aDogNTAwcHg7CisgICAgYWxpZ246
IGNlbnRlcjsKK30KKworLmNvbHVtbiB7CisgICAgd2lkdGg6IDQ1JTsKKyAgICBmbG9hdDpsZWZ0
OworICAgIGhlaWdodDogMTIwcHg7CisgICAgcGFkZGluZzo1cHg7Cit9CisKK2lucHV0W3R5cGU9
Im51bWJlciJdIHsKKyAgIHdpZHRoOjUwcHg7Cit9CisKKy5idXR0b25zIHsKKyAgICBtYXJnaW4t
dG9wOiAxMHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjbGVhcjogYm90aDsKK30K
KworYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYm9yZGVyOiAz
cHggc29saWQgcmdiKDIzNSwgMjM1LCAyMzUpOworICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Cisg
ICAgbWluLXdpZHRoOiAyMDBweDsKKyAgICBwYWRkaW5nOiA1cHggMjBweDsKKyAgICBtYXJnaW46
IDAgNDBweDsKKyAgICBmb250LXNpemU6IDI1cHg7CisgICAgY29sb3I6IHJnYigyMzUsIDIzNSwg
MjM1KTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKworICAgIC13ZWJraXQt
dXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKK2J1dHRvbjphY3RpdmUgeworICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTsKKyAgICBjb2xvcjogcmdiKDQ2LCA1MSwgNTUpOwor
ICAgIGJvcmRlci1jb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpICFpbXBvcnRhbnQ7Cit9CisKK2J1
dHRvbjpmb2N1cyB7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBib3JkZXItY29sb3I6IHJnYigy
MzIsIDc5LCA3OSk7Cit9CisKKy5zbWFsbC1idXR0b24geworICAgIC13ZWJraXQtYXBwZWFyYW5j
ZTogbm9uZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoOTYsIDk2LCA5Nik7CisgICAgYm9y
ZGVyLXJhZGl1czogMnB4OworICAgIHBhZGRpbmc6IDFweCA0cHg7CisgICAgbWFyZ2luOiAwIDRw
eDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICBjdXJzb3I6IHBvaW50
ZXI7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5v
bmU7Cit9CisKKyNncmFwaENvbnRhaW5lciB7CisgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKKyAg
Y29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTsgIAorfQorCisuYXhpcyBwYXRoLAorLmF4aXMgbGlu
ZSB7CisgIGZpbGw6IG5vbmU7CisgIHN0cm9rZTogcmdiKDIzNSwgMjM1LCAyMzUpOworICBzaGFw
ZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7Cit9CisKKy5sZWZ0LXNhbXBsZXMgeworICBmaWxsOiBu
b25lOworICBzdHJva2U6IHN0ZWVsYmx1ZTsKKyAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKK30KKwor
LnJpZ2h0LXNhbXBsZXMgeworICAgIGZpbGw6IG5vbmU7CisgICAgc3Ryb2tlOiByZWQ7CisgICAg
c3Ryb2tlLXdpZHRoOiAxLjVweDsKK30KKworLnNtYXBsZS10aW1lIHsKKyAgICBmaWxsOiBub25l
OworICAgIHN0cm9rZTogZ3JlZW47CisgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKK30KKworLmxl
ZnQtbWVhbiB7CisgICAgZmlsbDogbm9uZTsKKyAgICBzdHJva2U6IHllbGxvdzsKKyAgICBzdHJv
a2Utd2lkdGg6IDEuNXB4OworfQorCisucmlnaHQtbWVhbiB7CisgICAgZmlsbDogbm9uZTsKKyAg
ICBzdHJva2U6IG1hZ2VudGE7CisgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKK30KSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL2FuaW1vbWV0ZXIuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9yZXNvdXJj
ZXMvYW5pbW9tZXRlci5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci9ydW5uZXIvcmVzb3VyY2VzL2FuaW1vbWV0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDYgQEAKK3dpbmRvdy5iZW5jaG1hcmtSdW5uZXJDbGllbnQgPSB7CisgICAgaXRlcmF0
aW9uQ291bnQ6IDEsCisgICAgdGVzdHNDb3VudDogbnVsbCwKKyAgICBwcm9ncmVzc0JhcjogbnVs
bCwKKyAgICByZWNvcmRUYWJsZTogbnVsbCwKKyAgICBvcHRpb25zOiB7IHRlc3RJbnRlcnZhbDog
MzAwMDAsIGZyYW1lUmF0ZTogNTAsIGVzdGltYXRlZEZyYW1lUmF0ZTogdHJ1ZSwgZml4VGVzdENv
bXBsZXhpdHkgOiBmYWxzZSB9LAorICAgIHNjb3JlOiAwLAorICAgIF9pdGVyYXRpb25zU2FtcGxl
cnM6IFtdLAorICAgIF9yZXN1bHRzVGFibGU6IG51bGwsCisgICAgCisgICAgd2lsbEFkZFRlc3RG
cmFtZTogZnVuY3Rpb24gKGZyYW1lKQorICAgIHsKKyAgICAgICAgdmFyIG1haW4gPSBkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCJtYWluIik7CisgICAgICAgIHZhciBzdHlsZSA9IGdldENvbXB1dGVk
U3R5bGUobWFpbik7CisgICAgICAgIGZyYW1lLnN0eWxlLmxlZnQgPSBtYWluLm9mZnNldExlZnQg
KyBwYXJzZUludChzdHlsZS5ib3JkZXJMZWZ0V2lkdGgpICsgcGFyc2VJbnQoc3R5bGUucGFkZGlu
Z0xlZnQpICsgInB4IjsKKyAgICAgICAgZnJhbWUuc3R5bGUudG9wID0gbWFpbi5vZmZzZXRUb3Ag
KyBwYXJzZUludChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgKyBwYXJzZUludChzdHlsZS5wYWRkaW5n
VG9wKSArICJweCI7CisgICAgfSwKKyAgICAKKyAgICBkaWRSdW5UZXN0OiBmdW5jdGlvbiAoKQor
ICAgIHsKKyAgICAgICAgdGhpcy5wcm9ncmVzc0Jhci5pbmNSYW5nZSgpOworICAgIH0sCisgICAg
CisgICAgd2lsbFN0YXJ0Rmlyc3RJdGVyYXRpb246IGZ1bmN0aW9uICgpCisgICAgeworICAgICAg
ICB0aGlzLl9pdGVyYXRpb25zU2FtcGxlcnMgPSBbXTsKKyAgICAgICAgdGhpcy5fcmVzdWx0c1Rh
YmxlID0gbmV3IFJlY29yZFRhYmxlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZXN1bHRz
LXRhYmxlIilbMF0pOworICAgICAgICAKKyAgICAgICAgdGhpcy5wcm9ncmVzc0JhciA9IG5ldyBQ
cm9ncmVzc0Jhcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZ3Jlc3MtY29tcGxldGVkIiks
IHRoaXMudGVzdHNDb3VudCk7CisgICAgICAgIHRoaXMucmVjb3JkVGFibGUgPSBuZXcgUmVjb3Jk
VGFibGUoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnJlY29yZC10YWJsZSIpWzBdKTsKKyAg
ICB9LAorICAgIAorICAgIGRpZFJ1blN1aXRlczogZnVuY3Rpb24gKHN1aXRlc1NhbXBsZXJzKQor
ICAgIHsKKyAgICAgICAgdGhpcy5faXRlcmF0aW9uc1NhbXBsZXJzLnB1c2goc3VpdGVzU2FtcGxl
cnMpOworICAgIH0sCisgICAgCisgICAgZGlkRmluaXNoTGFzdEl0ZXJhdGlvbjogZnVuY3Rpb24g
KCkKKyAgICB7CisgICAgICAgIHRoaXMuc2NvcmUgPSB0aGlzLl9yZXN1bHRzVGFibGUuc2hvd0l0
ZXJhdGlvbnModGhpcy5faXRlcmF0aW9uc1NhbXBsZXJzLCAiIik7CisgICAgICAgIHNob3dSZXN1
bHRzKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBzaG93U2VjdGlvbihzZWN0aW9uSWRlbnRpZmll
ciwgcHVzaFN0YXRlKQoreworICAgIHZhciBjdXJyZW50U2VjdGlvbkVsZW1lbnQgPSBkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCJzZWN0aW9uLnNlbGVjdGVkIik7CisgICAgY29uc29sZS5hc3NlcnQo
Y3VycmVudFNlY3Rpb25FbGVtZW50KTsKKworICAgIHZhciBuZXdTZWN0aW9uRWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZGVudGlmaWVyKTsKKyAgICBjb25zb2xlLmFz
c2VydChuZXdTZWN0aW9uRWxlbWVudCk7CisKKyAgICBjdXJyZW50U2VjdGlvbkVsZW1lbnQuY2xh
c3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKTsKKyAgICBuZXdTZWN0aW9uRWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJzZWxlY3RlZCIpOworCisgICAgaWYgKHB1c2hTdGF0ZSkKKyAgICAgICAgaGlzdG9y
eS5wdXNoU3RhdGUoe3NlY3Rpb246IHNlY3Rpb25JZGVudGlmaWVyfSwgZG9jdW1lbnQudGl0bGUp
OworfQorCitmdW5jdGlvbiBzdGFydEJlbmNobWFyaygpCit7CisgICAgdmFyIGNoZWNrYm94ZXMg
PSBbIAorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbC1zdWl0ZSIpLCAKKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcy1zdWl0ZSIpLCAKKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN2Zy1zdWl0ZSIpLAorICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGVtcGxhdGUtc3VpdGUiKSwKKyAgICBdOworICAgIHZhciBlbmFibGVk
U3VpdGVzID0gU3VpdGVzLmZpbHRlcihmdW5jdGlvbiAoc3VpdGUsIGluZGV4KSB7IHJldHVybiAh
c3VpdGUuZGlzYWJsZWQgJiYgY2hlY2tib3hlc1tpbmRleF0uY2hlY2tlZDsgfSk7CisgICAgdmFy
IHRlc3RzQ291bnQgPSBlbmFibGVkU3VpdGVzLnJlZHVjZShmdW5jdGlvbiAodGVzdHNDb3VudCwg
c3VpdGUpIHsgcmV0dXJuIHRlc3RzQ291bnQgKyBzdWl0ZS50ZXN0cy5sZW5ndGg7IH0sIDApOwor
ICAgIGJlbmNobWFya1J1bm5lckNsaWVudC50ZXN0c0NvdW50ID0gYmVuY2htYXJrUnVubmVyQ2xp
ZW50Lml0ZXJhdGlvbkNvdW50ICogdGVzdHNDb3VudDsKKyAgICBiZW5jaG1hcmtSdW5uZXJDbGll
bnQub3B0aW9uc1sidGVzdEludGVydmFsIl0gPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGVzdC1pbnRlcnZhbCIpLnZhbHVlKSAqIDEwMDA7CisgICAgYmVuY2htYXJrUnVubmVy
Q2xpZW50Lm9wdGlvbnNbImZyYW1lUmF0ZSJdID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImZyYW1lLXJhdGUiKS52YWx1ZSk7CisgICAgYmVuY2htYXJrUnVubmVyQ2xpZW50Lm9w
dGlvbnNbImVzdGltYXRlZEZyYW1lUmF0ZSJdID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVz
dGltYXRlZC1mcmFtZS1yYXRlIikuY2hlY2tlZDsgICAgCisgICAgYmVuY2htYXJrUnVubmVyQ2xp
ZW50Lm9wdGlvbnNbImZpeFRlc3RDb21wbGV4aXR5Il0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiZml4LXRlc3QtY29tcGxleGl0eSIpLmNoZWNrZWQ7CisgICAgdmFyIHJ1bm5lciA9IG5ldyBC
ZW5jaG1hcmtSdW5uZXIoZW5hYmxlZFN1aXRlcywgYmVuY2htYXJrUnVubmVyQ2xpZW50KTsKKyAg
ICBydW5uZXIucnVuTXVsdGlwbGVJdGVyYXRpb25zKGJlbmNobWFya1J1bm5lckNsaWVudC5pdGVy
YXRpb25Db3VudCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0VGVzdCgpCit7CisgICAgc2hvd1NlY3Rp
b24oInJ1bm5pbmciKTsKKyAgICBzdGFydEJlbmNobWFyaygpOworfQorCitmdW5jdGlvbiBzaG93
UmVzdWx0cyhzY29yZSkKK3sKKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3IoIiNyZXN1bHRzID4gaDEiKTsKKyAgICBlbGVtZW50LnRleHRDb250ZW50ID0gIlJlc3VsdHM6
IgorICAgIAorICAgIHZhciBzY29yZSA9IGJlbmNobWFya1J1bm5lckNsaWVudC5zY29yZS50b0Zp
eGVkKDIpOworICAgIGVsZW1lbnQudGV4dENvbnRlbnQgKz0gIiBbU2NvcmUgPSAiICsgc2NvcmUg
KyAiXSI7CisgICAgICAgIAorICAgIHNob3dTZWN0aW9uKCJyZXN1bHRzIiwgdHJ1ZSk7Cit9CisK
K2Z1bmN0aW9uIHNob3dHcmFwaCh0ZXN0TmFtZSwgYXhlcywgc2FtcGxlcywgc2FtcGxpbmdUaW1l
T2Zmc2V0KQoreworICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2dy
YXBoID4gaDEiKTsKKyAgICBlbGVtZW50LnRleHRDb250ZW50ID0gIkdyYXBoOiIKKworICAgIGlm
ICh0ZXN0TmFtZS5sZW5ndGgpCisgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgKz0gIiBbdGVz
dCA9ICIgKyB0ZXN0TmFtZSArICJdIjsKKyAgICAgICAgICAgIAorICAgIGdyYXBoKCIjZ3JhcGhD
b250YWluZXIiLCBuZXcgUG9pbnQoNzAwLCA0MDApLCBuZXcgSW5zZXRzKDIwLCA1MCwgMjAsIDUw
KSwgYXhlcywgc2FtcGxlcywgc2FtcGxpbmdUaW1lT2Zmc2V0KTsKKyAgICBzaG93U2VjdGlvbigi
Z3JhcGgiLCB0cnVlKTsgICAgCit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIv
cnVubmVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIu
anMJKHJldmlzaW9uIDE5MDI3OCkJKGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qczoxOTAyNzgpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvcnVubmVyL3Jlc291cmNlcy9iZW5jaG1hcmstcnVubmVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjcwIEBACisvLyBGSVhNRTogVXNlIHRoZSByZWFsIHByb21pc2Ug
aWYgYXZhaWxhYmxlLgorLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGludGVyZmFjZSBpcyBjb21w
YXRpYmxlIHdpdGggdGhlIHJlYWwgUHJvbWlzZS4KK2Z1bmN0aW9uIFNpbXBsZVByb21pc2UoKSB7
CisgICAgdGhpcy5fY2hhaW5lZFByb21pc2UgPSBudWxsOworICAgIHRoaXMuX2NhbGxiYWNrID0g
bnVsbDsKK30KKworU2ltcGxlUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChjYWxs
YmFjaykgeworICAgIGlmICh0aGlzLl9jYWxsYmFjaykKKyAgICAgICAgdGhyb3cgIlNpbXBsZVBy
b21pc2UgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGNhbGxzIHRvIHRoZW4iOworICAgIHRoaXMu
X2NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgdGhpcy5fY2hhaW5lZFByb21pc2UgPSBuZXcgU2lt
cGxlUHJvbWlzZTsKKyAgICAKKyAgICBpZiAodGhpcy5fcmVzb2x2ZWQpCisgICAgICAgIHRoaXMu
cmVzb2x2ZSh0aGlzLl9yZXNvbHZlZFZhbHVlKTsKKworICAgIHJldHVybiB0aGlzLl9jaGFpbmVk
UHJvbWlzZTsKK30KKworU2ltcGxlUHJvbWlzZS5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgIGlmICghdGhpcy5fY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fcmVz
b2x2ZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9yZXNvbHZlZFZhbHVlID0gdmFsdWU7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY2FsbGJhY2sodmFs
dWUpOworICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBTaW1wbGVQcm9taXNlKSB7CisgICAgICAg
IHZhciBjaGFpbmVkUHJvbWlzZSA9IHRoaXMuX2NoYWluZWRQcm9taXNlOworICAgICAgICByZXN1
bHQudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7IGNoYWluZWRQcm9taXNlLnJlc29sdmUocmVzdWx0
KTsgfSk7CisgICAgfSBlbHNlCisgICAgICAgIHRoaXMuX2NoYWluZWRQcm9taXNlLnJlc29sdmUo
cmVzdWx0KTsKK30KKworZnVuY3Rpb24gQmVuY2htYXJrVGVzdFN0ZXAodGVzdE5hbWUsIHRlc3RG
dW5jdGlvbikgeworICAgIHRoaXMubmFtZSA9IHRlc3ROYW1lOworICAgIHRoaXMucnVuID0gdGVz
dEZ1bmN0aW9uOworfQorCitmdW5jdGlvbiBCZW5jaG1hcmtSdW5uZXIoc3VpdGVzLCBjbGllbnQp
IHsKKyAgICB0aGlzLl9zdWl0ZXMgPSBzdWl0ZXM7CisgICAgdGhpcy5fcHJlcGFyZVJldHVyblZh
bHVlID0gbnVsbDsKKyAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7Cit9CisKK0JlbmNobWFya1J1
bm5lci5wcm90b3R5cGUud2FpdEZvckVsZW1lbnQgPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHsKKyAg
ICB2YXIgcHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgIHZhciBjb250ZW50RG9jdW1l
bnQgPSB0aGlzLl9mcmFtZS5jb250ZW50RG9jdW1lbnQ7CisKKyAgICBmdW5jdGlvbiByZXNvbHZl
SWZSZWFkeSgpIHsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSBjb250ZW50RG9jdW1lbnQucXVlcnlT
ZWxlY3RvcihzZWxlY3Rvcik7CisgICAgICAgIGlmIChlbGVtZW50KQorICAgICAgICAgICAgcmV0
dXJuIHByb21pc2UucmVzb2x2ZShlbGVtZW50KTsKKyAgICAgICAgc2V0VGltZW91dChyZXNvbHZl
SWZSZWFkeSwgNTApOworICAgIH0KKworICAgIHJlc29sdmVJZlJlYWR5KCk7CisgICAgcmV0dXJu
IHByb21pc2U7Cit9CisKK0JlbmNobWFya1J1bm5lci5wcm90b3R5cGUuX3JlbW92ZUZyYW1lID0g
ZnVuY3Rpb24gKCkgeworICAgIGlmICh0aGlzLl9mcmFtZSkgeworICAgICAgICB0aGlzLl9mcmFt
ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2ZyYW1lKTsKKyAgICAgICAgdGhpcy5fZnJh
bWUgPSBudWxsOworICAgIH0KK30KKworQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS5fYXBwZW5k
RnJhbWUgPSBmdW5jdGlvbiAoc3JjKSB7CisgICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnaWZyYW1lJyk7CisgICAgZnJhbWUuc3R5bGUud2lkdGggPSAnODAwcHgnOworICAg
IGZyYW1lLnN0eWxlLmhlaWdodCA9ICc2MDBweCc7CisgICAgZnJhbWUuc3R5bGUuYm9yZGVyID0g
JzBweCBub25lJzsKKyAgICBmcmFtZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CisgICAg
ZnJhbWUuc2V0QXR0cmlidXRlKCdzY3JvbGxpbmcnLCAnbm8nKTsKKworICAgIHZhciBtYXJnaW5M
ZWZ0ID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5tYXJnaW5MZWZ0
KTsKKyAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVu
dC5ib2R5KS5tYXJnaW5Ub3ApOworICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDgwMCArIG1h
cmdpbkxlZnQgJiYgd2luZG93LmlubmVySGVpZ2h0ID4gNjAwICsgbWFyZ2luVG9wKSB7CisgICAg
ICAgIGZyYW1lLnN0eWxlLmxlZnQgPSBtYXJnaW5MZWZ0ICsgJ3B4JzsKKyAgICAgICAgZnJhbWUu
c3R5bGUudG9wID0gbWFyZ2luVG9wICsgJ3B4JzsKKyAgICB9IGVsc2UgeworICAgICAgICBmcmFt
ZS5zdHlsZS5sZWZ0ID0gJzBweCc7CisgICAgICAgIGZyYW1lLnN0eWxlLnRvcCA9ICcwcHgnOwor
ICAgIH0KKworICAgIGlmICh0aGlzLl9jbGllbnQgJiYgdGhpcy5fY2xpZW50LndpbGxBZGRUZXN0
RnJhbWUpCisgICAgICAgIHRoaXMuX2NsaWVudC53aWxsQWRkVGVzdEZyYW1lKGZyYW1lKTsKKwor
ICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZyYW1lLCBkb2N1bWVudC5ib2R5LmZpcnN0
Q2hpbGQpOworICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7CisgICAgcmV0dXJuIGZyYW1lOworfQor
CitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLl93YWl0QW5kV2FybVVwID0gZnVuY3Rpb24gKCkg
eworICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisgICAgZnVuY3Rpb24gRmlib25h
Y2NpKG4pIHsKKyAgICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAxMDApCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChuIDw9IDApCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgZWxzZSBpZiAobiA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIHJldHVybiBGaWJvbmFjY2kobiAtIDIpICsgRmlib25hY2NpKG4gLSAxKTsKKyAgICB9CisK
KyAgICB2YXIgcHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24gKCkgeworICAgICAgICBGaWJvbmFjY2koMTAwKTsKKyAgICAgICAgcHJvbWlzZS5yZXNv
bHZlKCk7CisgICAgfSwgMjAwKTsKKyAgICByZXR1cm4gcHJvbWlzZTsKK30KKworLy8gVGhpcyBm
dW5jdGlvbiBvdWdodCBiZSBhcyBzaW1wbGUgYXMgcG9zc2libGUuIERvbid0IGV2ZW4gdXNlIFNp
bXBsZVByb21pc2UuCitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLl9ydW5UZXN0ID0gZnVuY3Rp
b24oc3VpdGUsIHRlc3RGdW5jdGlvbiwgcHJlcGFyZVJldHVyblZhbHVlLCBjYWxsYmFjaykKK3sK
KyAgICB2YXIgbm93ID0gd2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5u
b3cgPyBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7IH0gOiBE
YXRlLm5vdzsKKworICAgIHZhciBjb250ZW50V2luZG93ID0gdGhpcy5fZnJhbWUuY29udGVudFdp
bmRvdzsKKyAgICB2YXIgY29udGVudERvY3VtZW50ID0gdGhpcy5fZnJhbWUuY29udGVudERvY3Vt
ZW50OworCisgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAgIHRlc3RGdW5jdGlvbihwcmVw
YXJlUmV0dXJuVmFsdWUsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCk7CisgICAgdmFy
IGVuZFRpbWUgPSBub3coKTsKKyAgICB2YXIgc3luY1RpbWUgPSBlbmRUaW1lIC0gc3RhcnRUaW1l
OworCisgICAgdmFyIHN0YXJ0VGltZSA9IG5vdygpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24g
KCkgeworICAgICAgICB2YXIgZW5kVGltZSA9IG5vdygpOworICAgICAgICBjYWxsYmFjayhzeW5j
VGltZSwgZW5kVGltZSAtIHN0YXJ0VGltZSk7CisgICAgfSwgMCk7Cit9CisKK2Z1bmN0aW9uIEJl
bmNobWFya1N0YXRlKHN1aXRlcykgeworICAgIHRoaXMuX3N1aXRlcyA9IHN1aXRlczsKKyAgICB0
aGlzLl9zdWl0ZUluZGV4ID0gLTE7CisgICAgdGhpcy5fdGVzdEluZGV4ID0gMDsKKyAgICB0aGlz
Lm5leHQoKTsKK30KKworQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLmN1cnJlbnRTdWl0ZSA9IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl9zdWl0ZXNbdGhpcy5fc3VpdGVJbmRleF07Cit9
CisKK0JlbmNobWFya1N0YXRlLnByb3RvdHlwZS5jdXJyZW50VGVzdCA9IGZ1bmN0aW9uICgpIHsK
KyAgICB2YXIgc3VpdGUgPSB0aGlzLmN1cnJlbnRTdWl0ZSgpOworICAgIHJldHVybiBzdWl0ZSA/
IHN1aXRlLnRlc3RzW3RoaXMuX3Rlc3RJbmRleF0gOiBudWxsOworfQorCitCZW5jaG1hcmtTdGF0
ZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLl90ZXN0SW5kZXgrKzsK
KworICAgIHZhciBzdWl0ZSA9IHRoaXMuX3N1aXRlc1t0aGlzLl9zdWl0ZUluZGV4XTsKKyAgICBp
ZiAoc3VpdGUgJiYgdGhpcy5fdGVzdEluZGV4IDwgc3VpdGUudGVzdHMubGVuZ3RoKQorICAgICAg
ICByZXR1cm4gdGhpczsKKworICAgIHRoaXMuX3Rlc3RJbmRleCA9IDA7CisgICAgZG8geworICAg
ICAgICB0aGlzLl9zdWl0ZUluZGV4Kys7CisgICAgfSB3aGlsZSAodGhpcy5fc3VpdGVJbmRleCA8
IHRoaXMuX3N1aXRlcy5sZW5ndGggJiYgdGhpcy5fc3VpdGVzW3RoaXMuX3N1aXRlSW5kZXhdLmRp
c2FibGVkKTsKKworICAgIHJldHVybiB0aGlzOworfQorCitCZW5jaG1hcmtTdGF0ZS5wcm90b3R5
cGUuaXNGaXJzdFRlc3QgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICF0aGlzLl90ZXN0SW5k
ZXg7Cit9CisKK0JlbmNobWFya1N0YXRlLnByb3RvdHlwZS5wcmVwYXJlQ3VycmVudFN1aXRlID0g
ZnVuY3Rpb24gKHJ1bm5lciwgZnJhbWUpIHsKKyAgICB2YXIgc3VpdGUgPSB0aGlzLmN1cnJlbnRT
dWl0ZSgpOworICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7CisgICAgZnJhbWUu
b25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBzdWl0ZS5wcmVwYXJlKHJ1bm5lciwgZnJh
bWUuY29udGVudFdpbmRvdywgZnJhbWUuY29udGVudERvY3VtZW50KS50aGVuKGZ1bmN0aW9uIChy
ZXN1bHQpIHsgcHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7IH0pOworICAgIH0KKyAgICBmcmFtZS5z
cmMgPSAncmVzb3VyY2VzLycgKyBzdWl0ZS51cmw7CisgICAgcmV0dXJuIHByb21pc2U7Cit9CisK
K0JlbmNobWFya1J1bm5lci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uIChzdGF0ZSkgeworICAg
IGlmICghc3RhdGUpIHsKKyAgICAgICAgc3RhdGUgPSBuZXcgQmVuY2htYXJrU3RhdGUodGhpcy5f
c3VpdGVzKTsKKyAgICAgICAgdGhpcy5fbWVhc3VyZWRWYWx1ZXMgPSB7dGVzdHM6IHt9LCB0b3Rh
bDogMH07CisgICAgfQorCisgICAgdmFyIHN1aXRlID0gc3RhdGUuY3VycmVudFN1aXRlKCk7Cisg
ICAgaWYgKCFzdWl0ZSkgeworICAgICAgICB0aGlzLl9maW5hbGl6ZSgpOworICAgICAgICB2YXIg
cHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsK
KyAgICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgfQorCisgICAgaWYgKHN0YXRlLmlzRmlyc3RU
ZXN0KCkpIHsKKyAgICAgICAgdGhpcy5fbWFzdXJlZFZhbHVlc0ZvckN1cnJlbnRTdWl0ZSA9IHt9
OworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHJldHVybiBzdGF0ZS5wcmVwYXJl
Q3VycmVudFN1aXRlKHRoaXMsIHRoaXMuX2FwcGVuZEZyYW1lKCkpLnRoZW4oZnVuY3Rpb24gKHBy
ZXBhcmVSZXR1cm5WYWx1ZSkgeworICAgICAgICAgICAgc2VsZi5fcHJlcGFyZVJldHVyblZhbHVl
ID0gcHJlcGFyZVJldHVyblZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1blRlc3RB
bmRSZWNvcmRSZXN1bHRzKHN0YXRlKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRoaXMuX3J1blRlc3RBbmRSZWNvcmRSZXN1bHRzKHN0YXRlKTsKK30KKworQmVuY2htYXJrUnVu
bmVyLnByb3RvdHlwZS5ydW5BbGxTdGVwcyA9IGZ1bmN0aW9uIChzdGFydGluZ1N0YXRlKSB7Cisg
ICAgdmFyIG5leHRDYWxsZWUgPSB0aGlzLnJ1bkFsbFN0ZXBzLmJpbmQodGhpcyk7CisgICAgdGhp
cy5zdGVwKHN0YXJ0aW5nU3RhdGUpLnRoZW4oZnVuY3Rpb24gKG5leHRTdGF0ZSkgeworICAgICAg
ICBpZiAobmV4dFN0YXRlKQorICAgICAgICAgICAgbmV4dENhbGxlZShuZXh0U3RhdGUpOworICAg
IH0pOworfQorCitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLnJ1bk11bHRpcGxlSXRlcmF0aW9u
cyA9IGZ1bmN0aW9uIChpdGVyYXRpb25Db3VudCkgeworICAgIHZhciBzZWxmID0gdGhpczsKKyAg
ICB2YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7CisKKyAgICB0aGlzLl9ydW5OZXh0SXRlcmF0aW9u
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBjdXJyZW50SXRlcmF0aW9uKys7CisgICAgICAgIGlm
IChjdXJyZW50SXRlcmF0aW9uIDwgaXRlcmF0aW9uQ291bnQpCisgICAgICAgICAgICBzZWxmLnJ1
bkFsbFN0ZXBzKCk7CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NsaWVudCAmJiB0aGlzLl9jbGll
bnQuZGlkRmluaXNoTGFzdEl0ZXJhdGlvbikKKyAgICAgICAgICAgIHRoaXMuX2NsaWVudC5kaWRG
aW5pc2hMYXN0SXRlcmF0aW9uKCk7CisgICAgfQorCisgICAgaWYgKHRoaXMuX2NsaWVudCAmJiB0
aGlzLl9jbGllbnQud2lsbFN0YXJ0Rmlyc3RJdGVyYXRpb24pCisgICAgICAgIHRoaXMuX2NsaWVu
dC53aWxsU3RhcnRGaXJzdEl0ZXJhdGlvbihpdGVyYXRpb25Db3VudCk7CisKKyAgICBzZWxmLnJ1
bkFsbFN0ZXBzKCk7Cit9CisKK0JlbmNobWFya1J1bm5lci5wcm90b3R5cGUuX3J1blRlc3RBbmRS
ZWNvcmRSZXN1bHRzID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgdmFyIHByb21pc2UgPSBuZXcg
U2ltcGxlUHJvbWlzZTsKKyAgICB2YXIgc3VpdGUgPSBzdGF0ZS5jdXJyZW50U3VpdGUoKTsKKyAg
ICB2YXIgdGVzdCA9IHN0YXRlLmN1cnJlbnRUZXN0KCk7CisKKyAgICBpZiAodGhpcy5fY2xpZW50
ICYmIHRoaXMuX2NsaWVudC53aWxsUnVuVGVzdCkKKyAgICAgICAgdGhpcy5fY2xpZW50LndpbGxS
dW5UZXN0KHN1aXRlLCB0ZXN0KTsKKworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2VsZi5fcnVuVGVzdChzdWl0ZSwgdGVzdC5ydW4s
IHNlbGYuX3ByZXBhcmVSZXR1cm5WYWx1ZSwgZnVuY3Rpb24gKHN5bmNUaW1lLCBhc3luY1RpbWUp
IHsKKyAgICAgICAgICAgIHZhciBzdWl0ZVJlc3VsdHMgPSBzZWxmLl9tZWFzdXJlZFZhbHVlcy50
ZXN0c1tzdWl0ZS5uYW1lXSB8fCB7dGVzdHM6e30sIHRvdGFsOiAwfTsKKyAgICAgICAgICAgIHZh
ciB0b3RhbCA9IHN5bmNUaW1lICsgYXN5bmNUaW1lOworICAgICAgICAgICAgc2VsZi5fbWVhc3Vy
ZWRWYWx1ZXMudGVzdHNbc3VpdGUubmFtZV0gPSBzdWl0ZVJlc3VsdHM7CisgICAgICAgICAgICBz
dWl0ZVJlc3VsdHMudGVzdHNbdGVzdC5uYW1lXSA9IHt0ZXN0czogeydTeW5jJzogc3luY1RpbWUs
ICdBc3luYyc6IGFzeW5jVGltZX0sIHRvdGFsOiB0b3RhbH07CisgICAgICAgICAgICBzdWl0ZVJl
c3VsdHMudG90YWwgKz0gdG90YWw7CisgICAgICAgICAgICBzZWxmLl9tZWFzdXJlZFZhbHVlcy50
b3RhbCArPSB0b3RhbDsKKworICAgICAgICAgICAgaWYgKHNlbGYuX2NsaWVudCAmJiBzZWxmLl9j
bGllbnQuZGlkUnVuVGVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jbGllbnQuZGlkUnVuVGVz
dChzdWl0ZSwgdGVzdCk7CisKKyAgICAgICAgICAgIHN0YXRlLm5leHQoKTsKKyAgICAgICAgICAg
IGlmIChzdGF0ZS5jdXJyZW50U3VpdGUoKSAhPSBzdWl0ZSkKKyAgICAgICAgICAgICAgICBzZWxm
Ll9yZW1vdmVGcmFtZSgpOworICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKHN0YXRlKTsKKyAg
ICAgICAgfSk7CisgICAgfSwgMCk7CisgICAgcmV0dXJuIHByb21pc2U7Cit9CisKK0JlbmNobWFy
a1J1bm5lci5wcm90b3R5cGUuX2ZpbmFsaXplID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuX3Jl
bW92ZUZyYW1lKCk7CisKKyAgICBpZiAodGhpcy5fY2xpZW50ICYmIHRoaXMuX2NsaWVudC5kaWRS
dW5TdWl0ZXMpCisgICAgICAgIHRoaXMuX2NsaWVudC5kaWRSdW5TdWl0ZXModGhpcy5fbWVhc3Vy
ZWRWYWx1ZXMpOworCisgICAgaWYgKHRoaXMuX3J1bk5leHRJdGVyYXRpb24pCisgICAgICAgIHRo
aXMuX3J1bk5leHRJdGVyYXRpb24oKTsKK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci9ydW5uZXIvcmVzb3VyY2VzL2JlbmNobWFyay1ydW5uZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1
bm5lci5qcwkod29ya2luZyBjb3B5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1
bm5lci9yZXNvdXJjZXMvYmVuY2htYXJrLXJ1bm5lci5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw0
OSArMSw2MyBAQAotLy8gRklYTUU6IFVzZSB0aGUgcmVhbCBwcm9taXNlIGlmIGF2YWlsYWJsZS4K
LS8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSB3aXRoIHRo
ZSByZWFsIFByb21pc2UuCi1mdW5jdGlvbiBTaW1wbGVQcm9taXNlKCkgewotICAgIHRoaXMuX2No
YWluZWRQcm9taXNlID0gbnVsbDsKLSAgICB0aGlzLl9jYWxsYmFjayA9IG51bGw7CitmdW5jdGlv
biBCZW5jaG1hcmtSdW5uZXJTdGF0ZShzdWl0ZXMpCit7CisgICAgdGhpcy5fc3VpdGVzID0gc3Vp
dGVzOworICAgIHRoaXMuX3N1aXRlSW5kZXggPSAtMTsKKyAgICB0aGlzLl90ZXN0SW5kZXggPSAw
OworICAgIHRoaXMubmV4dCgpOwogfQogCi1TaW1wbGVQcm9taXNlLnByb3RvdHlwZS50aGVuID0g
ZnVuY3Rpb24gKGNhbGxiYWNrKSB7Ci0gICAgaWYgKHRoaXMuX2NhbGxiYWNrKQotICAgICAgICB0
aHJvdyAiU2ltcGxlUHJvbWlzZSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgY2FsbHMgdG8gdGhl
biI7Ci0gICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB0aGlzLl9jaGFpbmVkUHJv
bWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOwotICAgIAotICAgIGlmICh0aGlzLl9yZXNvbHZlZCkK
LSAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuX3Jlc29sdmVkVmFsdWUpOworQmVuY2htYXJrUnVu
bmVyU3RhdGUucHJvdG90eXBlLmN1cnJlbnRTdWl0ZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICByZXR1
cm4gdGhpcy5fc3VpdGVzW3RoaXMuX3N1aXRlSW5kZXhdOworfQogCi0gICAgcmV0dXJuIHRoaXMu
X2NoYWluZWRQcm9taXNlOworQmVuY2htYXJrUnVubmVyU3RhdGUucHJvdG90eXBlLmN1cnJlbnRU
ZXN0ID0gZnVuY3Rpb24oKQoreworICAgIHZhciBzdWl0ZSA9IHRoaXMuY3VycmVudFN1aXRlKCk7
CisgICAgcmV0dXJuIHN1aXRlID8gc3VpdGUudGVzdHNbdGhpcy5fdGVzdEluZGV4XSA6IG51bGw7
CiB9CiAKLVNpbXBsZVByb21pc2UucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUp
IHsKLSAgICBpZiAoIXRoaXMuX2NhbGxiYWNrKSB7Ci0gICAgICAgIHRoaXMuX3Jlc29sdmVkID0g
dHJ1ZTsKLSAgICAgICAgdGhpcy5fcmVzb2x2ZWRWYWx1ZSA9IHZhbHVlOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorQmVuY2htYXJrUnVubmVyU3RhdGUucHJvdG90eXBlLmlzRmlyc3RUZXN0ID0g
ZnVuY3Rpb24oKQoreworICAgIHJldHVybiAhdGhpcy5fdGVzdEluZGV4OworfQorCitCZW5jaG1h
cmtSdW5uZXJTdGF0ZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl90
ZXN0SW5kZXgrKzsKKworICAgIHZhciBzdWl0ZSA9IHRoaXMuX3N1aXRlc1t0aGlzLl9zdWl0ZUlu
ZGV4XTsKKyAgICBpZiAoc3VpdGUgJiYgdGhpcy5fdGVzdEluZGV4IDwgc3VpdGUudGVzdHMubGVu
Z3RoKQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIHRoaXMuX3Rlc3RJbmRleCA9IDA7Cisg
ICAgZG8geworICAgICAgICB0aGlzLl9zdWl0ZUluZGV4Kys7CisgICAgfSB3aGlsZSAodGhpcy5f
c3VpdGVJbmRleCA8IHRoaXMuX3N1aXRlcy5sZW5ndGggJiYgdGhpcy5fc3VpdGVzW3RoaXMuX3N1
aXRlSW5kZXhdLmRpc2FibGVkKTsKIAotICAgIHZhciByZXN1bHQgPSB0aGlzLl9jYWxsYmFjayh2
YWx1ZSk7Ci0gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFNpbXBsZVByb21pc2UpIHsKLSAgICAg
ICAgdmFyIGNoYWluZWRQcm9taXNlID0gdGhpcy5fY2hhaW5lZFByb21pc2U7Ci0gICAgICAgIHJl
c3VsdC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsgY2hhaW5lZFByb21pc2UucmVzb2x2ZShyZXN1
bHQpOyB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGhpcy5fY2hhaW5lZFByb21pc2UucmVzb2x2
ZShyZXN1bHQpOworICAgIHJldHVybiB0aGlzOwogfQogCi1mdW5jdGlvbiBCZW5jaG1hcmtUZXN0
U3RlcCh0ZXN0TmFtZSwgdGVzdEZ1bmN0aW9uKSB7Ci0gICAgdGhpcy5uYW1lID0gdGVzdE5hbWU7
Ci0gICAgdGhpcy5ydW4gPSB0ZXN0RnVuY3Rpb247CitCZW5jaG1hcmtSdW5uZXJTdGF0ZS5wcm90
b3R5cGUucHJlcGFyZUN1cnJlbnRUZXN0ID0gZnVuY3Rpb24ocnVubmVyLCBmcmFtZSkKK3sKKyAg
ICB2YXIgc3VpdGUgPSB0aGlzLmN1cnJlbnRTdWl0ZSgpOworICAgIHZhciB0ZXN0ID0gdGhpcy5j
dXJyZW50VGVzdCgpOworICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7CisgICAg
ZnJhbWUub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHN1aXRlLnByZXBhcmUocnVubmVy
LCBmcmFtZS5jb250ZW50V2luZG93LCBmcmFtZS5jb250ZW50RG9jdW1lbnQpLnRoZW4oZnVuY3Rp
b24ocmVzdWx0KSB7IHByb21pc2UucmVzb2x2ZShyZXN1bHQpOyB9KTsKKyAgICB9CisgICAgZnJh
bWUuc3JjID0gdGVzdC51cmw7CisgICAgcmV0dXJuIHByb21pc2U7CiB9CiAKLWZ1bmN0aW9uIEJl
bmNobWFya1J1bm5lcihzdWl0ZXMsIGNsaWVudCkgeworZnVuY3Rpb24gQmVuY2htYXJrUnVubmVy
KHN1aXRlcywgY2xpZW50KQorewogICAgIHRoaXMuX3N1aXRlcyA9IHN1aXRlczsKLSAgICB0aGlz
Ll9wcmVwYXJlUmV0dXJuVmFsdWUgPSBudWxsOwogICAgIHRoaXMuX2NsaWVudCA9IGNsaWVudDsK
IH0KIAotQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS53YWl0Rm9yRWxlbWVudCA9IGZ1bmN0aW9u
IChzZWxlY3RvcikgeworQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS53YWl0Rm9yRWxlbWVudCA9
IGZ1bmN0aW9uKHNlbGVjdG9yKQorewogICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21p
c2U7CiAgICAgdmFyIGNvbnRlbnREb2N1bWVudCA9IHRoaXMuX2ZyYW1lLmNvbnRlbnREb2N1bWVu
dDsKIApAQCAtNTgsMjkgKzcyLDE5IEBAIEJlbmNobWFya1J1bm5lci5wcm90b3R5cGUud2FpdEZv
ckVsZW1lbnQKICAgICByZXR1cm4gcHJvbWlzZTsKIH0KIAotQmVuY2htYXJrUnVubmVyLnByb3Rv
dHlwZS5fcmVtb3ZlRnJhbWUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKHRoaXMuX2ZyYW1lKSB7
Ci0gICAgICAgIHRoaXMuX2ZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZnJhbWUp
OwotICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7Ci0gICAgfQotfQotCi1CZW5jaG1hcmtSdW5u
ZXIucHJvdG90eXBlLl9hcHBlbmRGcmFtZSA9IGZ1bmN0aW9uIChzcmMpIHsKLSAgICB2YXIgZnJh
bWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKLSAgICBmcmFtZS5zdHlsZS53
aWR0aCA9ICc4MDBweCc7Ci0gICAgZnJhbWUuc3R5bGUuaGVpZ2h0ID0gJzYwMHB4JzsKLSAgICBm
cmFtZS5zdHlsZS5ib3JkZXIgPSAnMHB4IG5vbmUnOwotICAgIGZyYW1lLnN0eWxlLnBvc2l0aW9u
ID0gJ2Fic29sdXRlJzsKLSAgICBmcmFtZS5zZXRBdHRyaWJ1dGUoJ3Njcm9sbGluZycsICdubycp
OworQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS5fYXBwZW5kRnJhbWUgPSBmdW5jdGlvbihzcmMp
Cit7CisgICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Cisg
ICAgZnJhbWUuc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCAibm8iKTsKIAogICAgIHZhciBtYXJn
aW5MZWZ0ID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5tYXJnaW5M
ZWZ0KTsKICAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5ib2R5KS5tYXJnaW5Ub3ApOwogICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDgwMCAr
IG1hcmdpbkxlZnQgJiYgd2luZG93LmlubmVySGVpZ2h0ID4gNjAwICsgbWFyZ2luVG9wKSB7Ci0g
ICAgICAgIGZyYW1lLnN0eWxlLmxlZnQgPSBtYXJnaW5MZWZ0ICsgJ3B4JzsKLSAgICAgICAgZnJh
bWUuc3R5bGUudG9wID0gbWFyZ2luVG9wICsgJ3B4JzsKKyAgICAgICAgZnJhbWUuc3R5bGUubGVm
dCA9IG1hcmdpbkxlZnQgKyAicHgiOworICAgICAgICBmcmFtZS5zdHlsZS50b3AgPSBtYXJnaW5U
b3AgKyAicHgiOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZyYW1lLnN0eWxlLmxlZnQgPSAnMHB4
JzsKLSAgICAgICAgZnJhbWUuc3R5bGUudG9wID0gJzBweCc7CisgICAgICAgIGZyYW1lLnN0eWxl
LmxlZnQgPSAiMHB4IjsKKyAgICAgICAgZnJhbWUuc3R5bGUudG9wID0gIjBweCI7CiAgICAgfQog
CiAgICAgaWYgKHRoaXMuX2NsaWVudCAmJiB0aGlzLl9jbGllbnQud2lsbEFkZFRlc3RGcmFtZSkK
QEAgLTkxLDk2ICs5NSw0OSBAQCBCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLl9hcHBlbmRGcmFt
ZSA9CiAgICAgcmV0dXJuIGZyYW1lOwogfQogCi1CZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLl93
YWl0QW5kV2FybVVwID0gZnVuY3Rpb24gKCkgewotICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5v
dygpOwotCi0gICAgZnVuY3Rpb24gRmlib25hY2NpKG4pIHsKLSAgICAgICAgaWYgKERhdGUubm93
KCkgLSBzdGFydFRpbWUgPiAxMDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChu
IDw9IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZWxzZSBpZiAobiA9PSAxKQot
ICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIHJldHVybiBGaWJvbmFjY2kobiAtIDIpICsg
Rmlib25hY2NpKG4gLSAxKTsKK0JlbmNobWFya1J1bm5lci5wcm90b3R5cGUuX3JlbW92ZUZyYW1l
ID0gZnVuY3Rpb24oKQoreworICAgIGlmICh0aGlzLl9mcmFtZSkgeworICAgICAgICB0aGlzLl9m
cmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2ZyYW1lKTsKKyAgICAgICAgdGhpcy5f
ZnJhbWUgPSBudWxsOwogICAgIH0KLQotICAgIHZhciBwcm9taXNlID0gbmV3IFNpbXBsZVByb21p
c2U7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIEZpYm9uYWNjaSgxMDAp
OwotICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICB9LCAyMDApOwotICAgIHJldHVybiBw
cm9taXNlOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIG91Z2h0IGJlIGFzIHNpbXBsZSBhcyBwb3Nz
aWJsZS4gRG9uJ3QgZXZlbiB1c2UgU2ltcGxlUHJvbWlzZS4KLUJlbmNobWFya1J1bm5lci5wcm90
b3R5cGUuX3J1blRlc3QgPSBmdW5jdGlvbihzdWl0ZSwgdGVzdEZ1bmN0aW9uLCBwcmVwYXJlUmV0
dXJuVmFsdWUsIGNhbGxiYWNrKQorQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS5fcnVuVGVzdEFu
ZFJlY29yZFJlc3VsdHMgPSBmdW5jdGlvbihzdGF0ZSkKIHsKLSAgICB2YXIgbm93ID0gd2luZG93
LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3cgPyBmdW5jdGlvbiAoKSB7IHJl
dHVybiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7IH0gOiBEYXRlLm5vdzsKKyAgICB2YXIgcHJv
bWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgIHZhciBzdWl0ZSA9IHN0YXRlLmN1cnJlbnRT
dWl0ZSgpOworICAgIHZhciB0ZXN0ID0gc3RhdGUuY3VycmVudFRlc3QoKTsKKyAgICAKKyAgICBp
ZiAodGhpcy5fY2xpZW50ICYmIHRoaXMuX2NsaWVudC53aWxsUnVuVGVzdFRlc3QpCisgICAgICAg
IHRoaXMuX2NsaWVudC53aWxsUnVuVGVzdChzdWl0ZSwgdGVzdCk7CiAKICAgICB2YXIgY29udGVu
dFdpbmRvdyA9IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3c7Ci0gICAgdmFyIGNvbnRlbnREb2N1
bWVudCA9IHRoaXMuX2ZyYW1lLmNvbnRlbnREb2N1bWVudDsKLQotICAgIHZhciBzdGFydFRpbWUg
PSBub3coKTsKLSAgICB0ZXN0RnVuY3Rpb24ocHJlcGFyZVJldHVyblZhbHVlLCBjb250ZW50V2lu
ZG93LCBjb250ZW50RG9jdW1lbnQpOwotICAgIHZhciBlbmRUaW1lID0gbm93KCk7Ci0gICAgdmFy
IHN5bmNUaW1lID0gZW5kVGltZSAtIHN0YXJ0VGltZTsKLQotICAgIHZhciBzdGFydFRpbWUgPSBu
b3coKTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGVuZFRpbWUg
PSBub3coKTsKLSAgICAgICAgY2FsbGJhY2soc3luY1RpbWUsIGVuZFRpbWUgLSBzdGFydFRpbWUp
OwotICAgIH0sIDApOwotfQotCi1mdW5jdGlvbiBCZW5jaG1hcmtTdGF0ZShzdWl0ZXMpIHsKLSAg
ICB0aGlzLl9zdWl0ZXMgPSBzdWl0ZXM7Ci0gICAgdGhpcy5fc3VpdGVJbmRleCA9IC0xOwotICAg
IHRoaXMuX3Rlc3RJbmRleCA9IDA7Ci0gICAgdGhpcy5uZXh0KCk7Ci19Ci0KLUJlbmNobWFya1N0
YXRlLnByb3RvdHlwZS5jdXJyZW50U3VpdGUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhp
cy5fc3VpdGVzW3RoaXMuX3N1aXRlSW5kZXhdOwotfQotCi1CZW5jaG1hcmtTdGF0ZS5wcm90b3R5
cGUuY3VycmVudFRlc3QgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIHN1aXRlID0gdGhpcy5jdXJy
ZW50U3VpdGUoKTsKLSAgICByZXR1cm4gc3VpdGUgPyBzdWl0ZS50ZXN0c1t0aGlzLl90ZXN0SW5k
ZXhdIDogbnVsbDsKLX0KLQotQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlv
biAoKSB7Ci0gICAgdGhpcy5fdGVzdEluZGV4Kys7Ci0KLSAgICB2YXIgc3VpdGUgPSB0aGlzLl9z
dWl0ZXNbdGhpcy5fc3VpdGVJbmRleF07Ci0gICAgaWYgKHN1aXRlICYmIHRoaXMuX3Rlc3RJbmRl
eCA8IHN1aXRlLnRlc3RzLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAgICB0aGlz
Ll90ZXN0SW5kZXggPSAwOwotICAgIGRvIHsKLSAgICAgICAgdGhpcy5fc3VpdGVJbmRleCsrOwot
ICAgIH0gd2hpbGUgKHRoaXMuX3N1aXRlSW5kZXggPCB0aGlzLl9zdWl0ZXMubGVuZ3RoICYmIHRo
aXMuX3N1aXRlc1t0aGlzLl9zdWl0ZUluZGV4XS5kaXNhYmxlZCk7Ci0KLSAgICByZXR1cm4gdGhp
czsKLX0KLQotQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLmlzRmlyc3RUZXN0ID0gZnVuY3Rpb24g
KCkgewotICAgIHJldHVybiAhdGhpcy5fdGVzdEluZGV4OwotfQorICAgIHZhciBzZWxmID0gdGhp
czsKIAotQmVuY2htYXJrU3RhdGUucHJvdG90eXBlLnByZXBhcmVDdXJyZW50U3VpdGUgPSBmdW5j
dGlvbiAocnVubmVyLCBmcmFtZSkgewotICAgIHZhciBzdWl0ZSA9IHRoaXMuY3VycmVudFN1aXRl
KCk7Ci0gICAgdmFyIHByb21pc2UgPSBuZXcgU2ltcGxlUHJvbWlzZTsKLSAgICBmcmFtZS5vbmxv
YWQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHN1aXRlLnByZXBhcmUocnVubmVyLCBmcmFtZS5j
b250ZW50V2luZG93LCBmcmFtZS5jb250ZW50RG9jdW1lbnQpLnRoZW4oZnVuY3Rpb24gKHJlc3Vs
dCkgeyBwcm9taXNlLnJlc29sdmUocmVzdWx0KTsgfSk7Ci0gICAgfQotICAgIGZyYW1lLnNyYyA9
ICdyZXNvdXJjZXMvJyArIHN1aXRlLnVybDsKKyAgICBzdWl0ZS5ydW4oY29udGVudFdpbmRvdywg
dGVzdCwgdGhpcy5fY2xpZW50Lm9wdGlvbnMsIHRoaXMuX2NsaWVudC5yZWNvcmRUYWJsZSwgdGhp
cy5fY2xpZW50LnByb2dyZXNzQmFyKS50aGVuKGZ1bmN0aW9uKHNhbXBsZXIpIHsKKyAgICAgICAg
dmFyIHNhbXBsZXJzID0gc2VsZi5fc3VpdGVzU2FtcGxlcnNbc3VpdGUubmFtZV0gfHwgW107Cisg
ICAgICAgIAorICAgICAgICBzYW1wbGVyc1t0ZXN0Lm5hbWVdID0gc2FtcGxlcjsKKyAgICAgICAg
c2VsZi5fc3VpdGVzU2FtcGxlcnNbc3VpdGUubmFtZV0gPSBzYW1wbGVyczsKKworICAgICAgICBp
ZiAoc2VsZi5fY2xpZW50ICYmIHNlbGYuX2NsaWVudC5kaWRSdW5UZXN0KQorICAgICAgICAgICAg
c2VsZi5fY2xpZW50LmRpZFJ1blRlc3Qoc3VpdGUsIHRlc3QpOworICAgICAgICAKKyAgICAgICAg
c3RhdGUubmV4dCgpOworICAgICAgICBpZiAoc3RhdGUuY3VycmVudFN1aXRlKCkgIT0gc3VpdGUp
CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVGcmFtZSgpOworICAgICAgICBwcm9taXNlLnJlc29s
dmUoc3RhdGUpOworICAgIH0pOworICAgIAogICAgIHJldHVybiBwcm9taXNlOwogfQogCi1CZW5j
aG1hcmtSdW5uZXIucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAoc3RhdGUpIHsKK0JlbmNobWFy
a1J1bm5lci5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uKHN0YXRlKQorewogICAgIGlmICghc3Rh
dGUpIHsKLSAgICAgICAgc3RhdGUgPSBuZXcgQmVuY2htYXJrU3RhdGUodGhpcy5fc3VpdGVzKTsK
LSAgICAgICAgdGhpcy5fbWVhc3VyZWRWYWx1ZXMgPSB7dGVzdHM6IHt9LCB0b3RhbDogMH07Cisg
ICAgICAgIHN0YXRlID0gbmV3IEJlbmNobWFya1J1bm5lclN0YXRlKHRoaXMuX3N1aXRlcyk7Cisg
ICAgICAgIHRoaXMuX3N1aXRlc1NhbXBsZXJzID0ge307CiAgICAgfQogCiAgICAgdmFyIHN1aXRl
ID0gc3RhdGUuY3VycmVudFN1aXRlKCk7CkBAIC0xOTMsNzcgKzE1MCw0OCBAQCBCZW5jaG1hcmtS
dW5uZXIucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvCiAKICAgICBpZiAoc3RhdGUuaXNGaXJzdFRl
c3QoKSkgewogICAgICAgICB0aGlzLl9tYXN1cmVkVmFsdWVzRm9yQ3VycmVudFN1aXRlID0ge307
Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgcmV0dXJuIHN0YXRlLnByZXBhcmVD
dXJyZW50U3VpdGUodGhpcywgdGhpcy5fYXBwZW5kRnJhbWUoKSkudGhlbihmdW5jdGlvbiAocHJl
cGFyZVJldHVyblZhbHVlKSB7Ci0gICAgICAgICAgICBzZWxmLl9wcmVwYXJlUmV0dXJuVmFsdWUg
PSBwcmVwYXJlUmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuVGVzdEFu
ZFJlY29yZFJlc3VsdHMoc3RhdGUpOwotICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fYXBwZW5k
RnJhbWUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gdGhpcy5fcnVuVGVzdEFuZFJlY29yZFJlc3Vs
dHMoc3RhdGUpOworICAgIHJldHVybiBzdGF0ZS5wcmVwYXJlQ3VycmVudFRlc3QodGhpcywgdGhp
cy5fZnJhbWUpLnRoZW4oZnVuY3Rpb24ocHJlcGFyZVJldHVyblZhbHVlKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9ydW5UZXN0QW5kUmVjb3JkUmVzdWx0cyhzdGF0ZSk7CisgICAgfS5iaW5kKHRo
aXMpKTsKIH0KIAotQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS5ydW5BbGxTdGVwcyA9IGZ1bmN0
aW9uIChzdGFydGluZ1N0YXRlKSB7CitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLnJ1bkFsbFN0
ZXBzID0gZnVuY3Rpb24oc3RhcnRpbmdTdGF0ZSkKK3sKICAgICB2YXIgbmV4dENhbGxlZSA9IHRo
aXMucnVuQWxsU3RlcHMuYmluZCh0aGlzKTsKLSAgICB0aGlzLnN0ZXAoc3RhcnRpbmdTdGF0ZSku
dGhlbihmdW5jdGlvbiAobmV4dFN0YXRlKSB7CisgICAgdGhpcy5zdGVwKHN0YXJ0aW5nU3RhdGUp
LnRoZW4oZnVuY3Rpb24obmV4dFN0YXRlKSB7CiAgICAgICAgIGlmIChuZXh0U3RhdGUpCiAgICAg
ICAgICAgICBuZXh0Q2FsbGVlKG5leHRTdGF0ZSk7CiAgICAgfSk7CiB9CiAKLUJlbmNobWFya1J1
bm5lci5wcm90b3R5cGUucnVuTXVsdGlwbGVJdGVyYXRpb25zID0gZnVuY3Rpb24gKGl0ZXJhdGlv
bkNvdW50KSB7CitCZW5jaG1hcmtSdW5uZXIucHJvdG90eXBlLnJ1bk11bHRpcGxlSXRlcmF0aW9u
cyA9IGZ1bmN0aW9uKGl0ZXJhdGlvbkNvdW50KQorewogICAgIHZhciBzZWxmID0gdGhpczsKICAg
ICB2YXIgY3VycmVudEl0ZXJhdGlvbiA9IDA7CiAKLSAgICB0aGlzLl9ydW5OZXh0SXRlcmF0aW9u
ID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuX3J1bk5leHRJdGVyYXRpb24gPSBmdW5jdGlvbigp
IHsKICAgICAgICAgY3VycmVudEl0ZXJhdGlvbisrOwogICAgICAgICBpZiAoY3VycmVudEl0ZXJh
dGlvbiA8IGl0ZXJhdGlvbkNvdW50KQogICAgICAgICAgICAgc2VsZi5ydW5BbGxTdGVwcygpOwog
ICAgICAgICBlbHNlIGlmICh0aGlzLl9jbGllbnQgJiYgdGhpcy5fY2xpZW50LmRpZEZpbmlzaExh
c3RJdGVyYXRpb24pCi0gICAgICAgICAgICB0aGlzLl9jbGllbnQuZGlkRmluaXNoTGFzdEl0ZXJh
dGlvbigpOworICAgICAgICAgICAgc2VsZi5fY2xpZW50LmRpZEZpbmlzaExhc3RJdGVyYXRpb24o
KTsKICAgICB9CiAKLSAgICBpZiAodGhpcy5fY2xpZW50ICYmIHRoaXMuX2NsaWVudC53aWxsU3Rh
cnRGaXJzdEl0ZXJhdGlvbikKLSAgICAgICAgdGhpcy5fY2xpZW50LndpbGxTdGFydEZpcnN0SXRl
cmF0aW9uKGl0ZXJhdGlvbkNvdW50KTsKKyAgICBpZiAoc2VsZi5fY2xpZW50ICYmIHNlbGYuX2Ns
aWVudC53aWxsU3RhcnRGaXJzdEl0ZXJhdGlvbikKKyAgICAgICAgc2VsZi5fY2xpZW50LndpbGxT
dGFydEZpcnN0SXRlcmF0aW9uKGl0ZXJhdGlvbkNvdW50KTsKIAogICAgIHNlbGYucnVuQWxsU3Rl
cHMoKTsKIH0KIAotQmVuY2htYXJrUnVubmVyLnByb3RvdHlwZS5fcnVuVGVzdEFuZFJlY29yZFJl
c3VsdHMgPSBmdW5jdGlvbiAoc3RhdGUpIHsKLSAgICB2YXIgcHJvbWlzZSA9IG5ldyBTaW1wbGVQ
cm9taXNlOwotICAgIHZhciBzdWl0ZSA9IHN0YXRlLmN1cnJlbnRTdWl0ZSgpOwotICAgIHZhciB0
ZXN0ID0gc3RhdGUuY3VycmVudFRlc3QoKTsKLQotICAgIGlmICh0aGlzLl9jbGllbnQgJiYgdGhp
cy5fY2xpZW50LndpbGxSdW5UZXN0KQotICAgICAgICB0aGlzLl9jbGllbnQud2lsbFJ1blRlc3Qo
c3VpdGUsIHRlc3QpOwotCi0gICAgdmFyIHNlbGYgPSB0aGlzOwotICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24gKCkgewotICAgICAgICBzZWxmLl9ydW5UZXN0KHN1aXRlLCB0ZXN0LnJ1biwgc2VsZi5f
cHJlcGFyZVJldHVyblZhbHVlLCBmdW5jdGlvbiAoc3luY1RpbWUsIGFzeW5jVGltZSkgewotICAg
ICAgICAgICAgdmFyIHN1aXRlUmVzdWx0cyA9IHNlbGYuX21lYXN1cmVkVmFsdWVzLnRlc3RzW3N1
aXRlLm5hbWVdIHx8IHt0ZXN0czp7fSwgdG90YWw6IDB9OwotICAgICAgICAgICAgdmFyIHRvdGFs
ID0gc3luY1RpbWUgKyBhc3luY1RpbWU7Ci0gICAgICAgICAgICBzZWxmLl9tZWFzdXJlZFZhbHVl
cy50ZXN0c1tzdWl0ZS5uYW1lXSA9IHN1aXRlUmVzdWx0czsKLSAgICAgICAgICAgIHN1aXRlUmVz
dWx0cy50ZXN0c1t0ZXN0Lm5hbWVdID0ge3Rlc3RzOiB7J1N5bmMnOiBzeW5jVGltZSwgJ0FzeW5j
JzogYXN5bmNUaW1lfSwgdG90YWw6IHRvdGFsfTsKLSAgICAgICAgICAgIHN1aXRlUmVzdWx0cy50
b3RhbCArPSB0b3RhbDsKLSAgICAgICAgICAgIHNlbGYuX21lYXN1cmVkVmFsdWVzLnRvdGFsICs9
IHRvdGFsOwotCi0gICAgICAgICAgICBpZiAoc2VsZi5fY2xpZW50ICYmIHNlbGYuX2NsaWVudC5k
aWRSdW5UZXN0KQotICAgICAgICAgICAgICAgIHNlbGYuX2NsaWVudC5kaWRSdW5UZXN0KHN1aXRl
LCB0ZXN0KTsKLQotICAgICAgICAgICAgc3RhdGUubmV4dCgpOwotICAgICAgICAgICAgaWYgKHN0
YXRlLmN1cnJlbnRTdWl0ZSgpICE9IHN1aXRlKQotICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92
ZUZyYW1lKCk7Ci0gICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoc3RhdGUpOwotICAgICAgICB9
KTsKLSAgICB9LCAwKTsKLSAgICByZXR1cm4gcHJvbWlzZTsKLX0KLQotQmVuY2htYXJrUnVubmVy
LnByb3RvdHlwZS5fZmluYWxpemUgPSBmdW5jdGlvbiAoKSB7CitCZW5jaG1hcmtSdW5uZXIucHJv
dG90eXBlLl9maW5hbGl6ZSA9IGZ1bmN0aW9uKCkKK3sKICAgICB0aGlzLl9yZW1vdmVGcmFtZSgp
OwotCisgICAgICAgIAogICAgIGlmICh0aGlzLl9jbGllbnQgJiYgdGhpcy5fY2xpZW50LmRpZFJ1
blN1aXRlcykKLSAgICAgICAgdGhpcy5fY2xpZW50LmRpZFJ1blN1aXRlcyh0aGlzLl9tZWFzdXJl
ZFZhbHVlcyk7CisgICAgICAgIHRoaXMuX2NsaWVudC5kaWRSdW5TdWl0ZXModGhpcy5fc3VpdGVz
U2FtcGxlcnMpOwogCiAgICAgaWYgKHRoaXMuX3J1bk5leHRJdGVyYXRpb24pCiAgICAgICAgIHRo
aXMuX3J1bk5leHRJdGVyYXRpb24oKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRl
ci9ydW5uZXIvcmVzb3VyY2VzL2QzLm1pbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRl
c3RzL0FuaW1vbWV0ZXIvcnVubmVyL3Jlc291cmNlcy9kMy5taW4uanMJKHJldmlzaW9uIDE5MDI3
OCkJKGZyb20gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9kMy9kMy5taW4u
anM6MTkwMjc4KQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3J1bm5lci9yZXNvdXJj
ZXMvZDMubWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAorIWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gbihuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH1mdW5jdGlvbiB0
KG4pe3JldHVybiBudWxsIT1uJiYhaXNOYU4obil9ZnVuY3Rpb24gZShuKXtyZXR1cm57bGVmdDpm
dW5jdGlvbih0LGUscix1KXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0wKSxhcmd1bWVudHMu
bGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1PnI7KXt2YXIgaT1yK3U+Pj4xO24odFtpXSxlKTwwP3I9
aSsxOnU9aX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5s
ZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFy
IGk9cit1Pj4+MTtuKHRbaV0sZSk+MD91PWk6cj1pKzF9cmV0dXJuIHJ9fX1mdW5jdGlvbiByKG4p
e3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiB1KG4pe2Zvcih2YXIgdD0xO24qdCUxOyl0Kj0xMDty
ZXR1cm4gdH1mdW5jdGlvbiBpKG4sdCl7dHJ5e2Zvcih2YXIgZSBpbiB0KU9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShuLnByb3RvdHlwZSxlLHt2YWx1ZTp0W2VdLGVudW1lcmFibGU6ITF9KX1jYXRjaChy
KXtuLnByb3RvdHlwZT10fX1mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEobil7cmV0dXJuIGlhK24g
aW4gdGhpc31mdW5jdGlvbiBjKG4pe3JldHVybiBuPWlhK24sbiBpbiB0aGlzJiZkZWxldGUgdGhp
c1tuXX1mdW5jdGlvbiBzKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0
KXtuLnB1c2godCl9KSxufWZ1bmN0aW9uIGwoKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXQu
Y2hhckNvZGVBdCgwKT09PW9hJiYrK247cmV0dXJuIG59ZnVuY3Rpb24gZigpe2Zvcih2YXIgbiBp
biB0aGlzKWlmKG4uY2hhckNvZGVBdCgwKT09PW9hKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9u
IGgoKXt9ZnVuY3Rpb24gZyhuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0
LGFyZ3VtZW50cyk7cmV0dXJuIHI9PT10P246cn19ZnVuY3Rpb24gcChuLHQpe2lmKHQgaW4gbily
ZXR1cm4gdDt0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSk7Zm9yKHZh
ciBlPTAscj1hYS5sZW5ndGg7cj5lOysrZSl7dmFyIHU9YWFbZV0rdDtpZih1IGluIG4pcmV0dXJu
IHV9fWZ1bmN0aW9uIHYoKXt9ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBtKG4pe2Z1bmN0aW9uIHQo
KXtmb3IodmFyIHQscj1lLHU9LTEsaT1yLmxlbmd0aDsrK3U8aTspKHQ9clt1XS5vbikmJnQuYXBw
bHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBufXZhciBlPVtdLHI9bmV3IG87cmV0dXJuIHQub249
ZnVuY3Rpb24odCx1KXt2YXIgaSxvPXIuZ2V0KHQpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/
byYmby5vbjoobyYmKG8ub249bnVsbCxlPWUuc2xpY2UoMCxpPWUuaW5kZXhPZihvKSkuY29uY2F0
KGUuc2xpY2UoaSsxKSksci5yZW1vdmUodCkpLHUmJmUucHVzaChyLnNldCh0LHtvbjp1fSkpLG4p
fSx0fWZ1bmN0aW9uIHkoKXtaby5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIHgoKXtm
b3IodmFyIG4sdD1aby5ldmVudDtuPXQuc291cmNlRXZlbnQ7KXQ9bjtyZXR1cm4gdH1mdW5jdGlv
biBNKG4pe2Zvcih2YXIgdD1uZXcgZCxlPTAscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2Fy
Z3VtZW50c1tlXV09bSh0KTtyZXR1cm4gdC5vZj1mdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlv
bih1KXt0cnl7dmFyIGk9dS5zb3VyY2VFdmVudD1aby5ldmVudDt1LnRhcmdldD1uLFpvLmV2ZW50
PXUsdFt1LnR5cGVdLmFwcGx5KGUscil9ZmluYWxseXtaby5ldmVudD1pfX19LHR9ZnVuY3Rpb24g
XyhuKXtyZXR1cm4gc2EobixwYSksbn1mdW5jdGlvbiBiKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5
cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gbGEobix0aGlzKX19ZnVuY3Rpb24gdyhuKXtyZXR1
cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZhKG4sdGhpcyl9fWZ1
bmN0aW9uIFMobix0KXtmdW5jdGlvbiBlKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9ZnVuY3Rp
b24gcigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX1mdW5jdGlvbiB1
KCl7dGhpcy5zZXRBdHRyaWJ1dGUobix0KX1mdW5jdGlvbiBpKCl7dGhpcy5zZXRBdHRyaWJ1dGVO
UyhuLnNwYWNlLG4ubG9jYWwsdCl9ZnVuY3Rpb24gbygpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1
bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUo
bixlKX1mdW5jdGlvbiBhKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90
aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVO
UyhuLnNwYWNlLG4ubG9jYWwsZSl9cmV0dXJuIG49Wm8ubnMucXVhbGlmeShuKSxudWxsPT10P24u
bG9jYWw/cjplOiJmdW5jdGlvbiI9PXR5cGVvZiB0P24ubG9jYWw/YTpvOm4ubG9jYWw/aTp1fWZ1
bmN0aW9uIGsobil7cmV0dXJuIG4udHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24g
RShuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrWm8ucmVxdW90ZShuKSsiKD86XFxz
K3wkKSIsImciKX1mdW5jdGlvbiBBKG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMr
Lyl9ZnVuY3Rpb24gQyhuLHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9LTE7KytlPHU7KW5bZV0o
dGhpcyx0KX1mdW5jdGlvbiByKCl7Zm9yKHZhciBlPS0xLHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50
cyk7KytlPHU7KW5bZV0odGhpcyxyKX1uPUEobikubWFwKE4pO3ZhciB1PW4ubGVuZ3RoO3JldHVy
biJmdW5jdGlvbiI9PXR5cGVvZiB0P3I6ZX1mdW5jdGlvbiBOKG4pe3ZhciB0PUUobik7cmV0dXJu
IGZ1bmN0aW9uKGUscil7aWYodT1lLmNsYXNzTGlzdClyZXR1cm4gcj91LmFkZChuKTp1LnJlbW92
ZShuKTt2YXIgdT1lLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7cj8odC5sYXN0SW5kZXg9MCx0
LnRlc3QodSl8fGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsayh1KyIgIituKSkpOmUuc2V0QXR0cmli
dXRlKCJjbGFzcyIsayh1LnJlcGxhY2UodCwiICIpKSl9fWZ1bmN0aW9uIHoobix0LGUpe2Z1bmN0
aW9uIHIoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfWZ1bmN0aW9uIHUoKXt0aGlzLnN0
eWxlLnNldFByb3BlcnR5KG4sdCxlKX1mdW5jdGlvbiBpKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFy
Z3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUu
c2V0UHJvcGVydHkobixyLGUpfXJldHVybiBudWxsPT10P3I6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/
aTp1fWZ1bmN0aW9uIEwobix0KXtmdW5jdGlvbiBlKCl7ZGVsZXRlIHRoaXNbbl19ZnVuY3Rpb24g
cigpe3RoaXNbbl09dH1mdW5jdGlvbiB1KCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7
bnVsbD09ZT9kZWxldGUgdGhpc1tuXTp0aGlzW25dPWV9cmV0dXJuIG51bGw9PXQ/ZToiZnVuY3Rp
b24iPT10eXBlb2YgdD91OnJ9ZnVuY3Rpb24gVChuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg
bj9uOihuPVpvLm5zLnF1YWxpZnkobikpLmxvY2FsP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3du
ZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX06ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVS
SSxuKX19ZnVuY3Rpb24gcShuKXtyZXR1cm57X19kYXRhX186bn19ZnVuY3Rpb24gUihuKXtyZXR1
cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2EodGhpcyxuKX19ZnVuY3Rpb24gRCh0KXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aHx8KHQ9biksZnVuY3Rpb24obixlKXtyZXR1cm4gbiYmZT90KG4uX19kYXRh
X18sZS5fX2RhdGFfXyk6IW4tIWV9fWZ1bmN0aW9uIFAobix0KXtmb3IodmFyIGU9MCxyPW4ubGVu
Z3RoO3I+ZTtlKyspZm9yKHZhciB1LGk9bltlXSxvPTAsYT1pLmxlbmd0aDthPm87bysrKSh1PWlb
b10pJiZ0KHUsbyxlKTtyZXR1cm4gbn1mdW5jdGlvbiBVKG4pe3JldHVybiBzYShuLGRhKSxufWZ1
bmN0aW9uIGoobil7dmFyIHQsZTtyZXR1cm4gZnVuY3Rpb24ocix1LGkpe3ZhciBvLGE9bltpXS51
cGRhdGUsYz1hLmxlbmd0aDtmb3IoaSE9ZSYmKGU9aSx0PTApLHU+PXQmJih0PXUrMSk7IShvPWFb
dF0pJiYrK3Q8YzspO3JldHVybiBvfX1mdW5jdGlvbiBIKCl7dmFyIG49dGhpcy5fX3RyYW5zaXRp
b25fXztuJiYrK24uYWN0aXZlfWZ1bmN0aW9uIEYobix0LGUpe2Z1bmN0aW9uIHIoKXt2YXIgdD10
aGlzW29dO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobix0LHQuJCksZGVsZXRlIHRoaXNb
b10pfWZ1bmN0aW9uIHUoKXt2YXIgdT1jKHQsWG8oYXJndW1lbnRzKSk7ci5jYWxsKHRoaXMpLHRo
aXMuYWRkRXZlbnRMaXN0ZW5lcihuLHRoaXNbb109dSx1LiQ9ZSksdS5fPXR9ZnVuY3Rpb24gaSgp
e3ZhciB0LGU9bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIitaby5yZXF1b3RlKG4pKyIkIik7Zm9y
KHZhciByIGluIHRoaXMpaWYodD1yLm1hdGNoKGUpKXt2YXIgdT10aGlzW3JdO3RoaXMucmVtb3Zl
RXZlbnRMaXN0ZW5lcih0WzFdLHUsdS4kKSxkZWxldGUgdGhpc1tyXX19dmFyIG89Il9fb24iK24s
YT1uLmluZGV4T2YoIi4iKSxjPU87YT4wJiYobj1uLnN1YnN0cmluZygwLGEpKTt2YXIgcz15YS5n
ZXQobik7cmV0dXJuIHMmJihuPXMsYz1ZKSxhP3Q/dTpyOnQ/djppfWZ1bmN0aW9uIE8obix0KXty
ZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Wm8uZXZlbnQ7Wm8uZXZlbnQ9ZSx0WzBdPXRoaXMuX19k
YXRhX187dHJ5e24uYXBwbHkodGhpcyx0KX1maW5hbGx5e1pvLmV2ZW50PXJ9fX1mdW5jdGlvbiBZ
KG4sdCl7dmFyIGU9TyhuLHQpO3JldHVybiBmdW5jdGlvbihuKXt2YXIgdD10aGlzLHI9bi5yZWxh
dGVkVGFyZ2V0O3ImJihyPT09dHx8OCZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKXx8ZS5j
YWxsKHQsbil9fWZ1bmN0aW9uIEkoKXt2YXIgbj0iLmRyYWdzdXBwcmVzcy0iKyArK01hLHQ9ImNs
aWNrIituLGU9Wm8uc2VsZWN0KFdvKS5vbigidG91Y2htb3ZlIituLHkpLm9uKCJkcmFnc3RhcnQi
K24seSkub24oInNlbGVjdHN0YXJ0IituLHkpO2lmKHhhKXt2YXIgcj1Cby5zdHlsZSx1PXJbeGFd
O3JbeGFdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24oaSl7ZnVuY3Rpb24gbygpe2Uub24odCxudWxs
KX1lLm9uKG4sbnVsbCkseGEmJihyW3hhXT11KSxpJiYoZS5vbih0LGZ1bmN0aW9uKCl7eSgpLG8o
KX0sITApLHNldFRpbWVvdXQobywwKSl9fWZ1bmN0aW9uIFoobix0KXt0LmNoYW5nZWRUb3VjaGVz
JiYodD10LmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgZT1uLm93bmVyU1ZHRWxlbWVudHx8bjtpZihl
LmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1lLmNyZWF0ZVNWR1BvaW50KCk7aWYoMD5fYSYmKFdvLnNj
cm9sbFh8fFdvLnNjcm9sbFkpKXtlPVpvLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgic3ZnIikuc3R5
bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG1hcmdpbjowLHBhZGRpbmc6MCxi
b3JkZXI6Im5vbmUifSwiaW1wb3J0YW50Iik7dmFyIHU9ZVswXVswXS5nZXRTY3JlZW5DVE0oKTtf
YT0hKHUuZnx8dS5lKSxlLnJlbW92ZSgpfXJldHVybiBfYT8oci54PXQucGFnZVgsci55PXQucGFn
ZVkpOihyLng9dC5jbGllbnRYLHIueT10LmNsaWVudFkpLHI9ci5tYXRyaXhUcmFuc2Zvcm0obi5n
ZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtyLngsci55XX12YXIgaT1uLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LW4uY2xpZW50TGVmdCx0LmNsaWVudFkt
aS50b3Atbi5jbGllbnRUb3BdfWZ1bmN0aW9uIFYoKXtyZXR1cm4gWm8uZXZlbnQuY2hhbmdlZFRv
dWNoZXNbMF0uaWRlbnRpZmllcn1mdW5jdGlvbiBYKCl7cmV0dXJuIFpvLmV2ZW50LnRhcmdldH1m
dW5jdGlvbiAkKCl7cmV0dXJuIFdvfWZ1bmN0aW9uIEIobil7cmV0dXJuIG4+MD8xOjA+bj8tMTow
fWZ1bmN0aW9uIFcobix0LGUpe3JldHVybih0WzBdLW5bMF0pKihlWzFdLW5bMV0pLSh0WzFdLW5b
MV0pKihlWzBdLW5bMF0pfWZ1bmN0aW9uIEoobil7cmV0dXJuIG4+MT8wOi0xPm4/YmE6TWF0aC5h
Y29zKG4pfWZ1bmN0aW9uIEcobil7cmV0dXJuIG4+MT9TYTotMT5uPy1TYTpNYXRoLmFzaW4obil9
ZnVuY3Rpb24gSyhuKXtyZXR1cm4oKG49TWF0aC5leHAobikpLTEvbikvMn1mdW5jdGlvbiBRKG4p
e3JldHVybigobj1NYXRoLmV4cChuKSkrMS9uKS8yfWZ1bmN0aW9uIG50KG4pe3JldHVybigobj1N
YXRoLmV4cCgyKm4pKS0xKS8obisxKX1mdW5jdGlvbiB0dChuKXtyZXR1cm4obj1NYXRoLnNpbihu
LzIpKSpufWZ1bmN0aW9uIGV0KCl7fWZ1bmN0aW9uIHJ0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0
YW5jZW9mIHJ0Pyh0aGlzLmg9K24sdGhpcy5zPSt0LHZvaWQodGhpcy5sPStlKSk6YXJndW1lbnRz
Lmxlbmd0aDwyP24gaW5zdGFuY2VvZiBydD9uZXcgcnQobi5oLG4ucyxuLmwpOm10KCIiK24seXQs
cnQpOm5ldyBydChuLHQsZSl9ZnVuY3Rpb24gdXQobix0LGUpe2Z1bmN0aW9uIHIobil7cmV0dXJu
IG4+MzYwP24tPTM2MDowPm4mJihuKz0zNjApLDYwPm4/aSsoby1pKSpuLzYwOjE4MD5uP286MjQw
Pm4/aSsoby1pKSooMjQwLW4pLzYwOml9ZnVuY3Rpb24gdShuKXtyZXR1cm4gTWF0aC5yb3VuZCgy
NTUqcihuKSl9dmFyIGksbztyZXR1cm4gbj1pc05hTihuKT8wOihuJT0zNjApPDA/biszNjA6bix0
PWlzTmFOKHQpPzA6MD50PzA6dD4xPzE6dCxlPTA+ZT8wOmU+MT8xOmUsbz0uNT49ZT9lKigxK3Qp
OmUrdC1lKnQsaT0yKmUtbyxuZXcgZ3QodShuKzEyMCksdShuKSx1KG4tMTIwKSl9ZnVuY3Rpb24g
aXQobix0LGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaXQ/KHRoaXMuaD0rbix0aGlzLmM9K3Qs
dm9pZCh0aGlzLmw9K2UpKTphcmd1bWVudHMubGVuZ3RoPDI/biBpbnN0YW5jZW9mIGl0P25ldyBp
dChuLmgsbi5jLG4ubCk6biBpbnN0YW5jZW9mIGF0P3N0KG4ubCxuLmEsbi5iKTpzdCgobj14dCgo
bj1aby5yZ2IobikpLnIsbi5nLG4uYikpLmwsbi5hLG4uYik6bmV3IGl0KG4sdCxlKX1mdW5jdGlv
biBvdChuLHQsZSl7cmV0dXJuIGlzTmFOKG4pJiYobj0wKSxpc05hTih0KSYmKHQ9MCksbmV3IGF0
KGUsTWF0aC5jb3Mobio9QWEpKnQsTWF0aC5zaW4obikqdCl9ZnVuY3Rpb24gYXQobix0LGUpe3Jl
dHVybiB0aGlzIGluc3RhbmNlb2YgYXQ/KHRoaXMubD0rbix0aGlzLmE9K3Qsdm9pZCh0aGlzLmI9
K2UpKTphcmd1bWVudHMubGVuZ3RoPDI/biBpbnN0YW5jZW9mIGF0P25ldyBhdChuLmwsbi5hLG4u
Yik6biBpbnN0YW5jZW9mIGl0P290KG4ubCxuLmMsbi5oKTp4dCgobj1ndChuKSkucixuLmcsbi5i
KTpuZXcgYXQobix0LGUpfWZ1bmN0aW9uIGN0KG4sdCxlKXt2YXIgcj0obisxNikvMTE2LHU9cit0
LzUwMCxpPXItZS8yMDA7cmV0dXJuIHU9bHQodSkqamEscj1sdChyKSpIYSxpPWx0KGkpKkZhLG5l
dyBndChodCgzLjI0MDQ1NDIqdS0xLjUzNzEzODUqci0uNDk4NTMxNCppKSxodCgtLjk2OTI2Nip1
KzEuODc2MDEwOCpyKy4wNDE1NTYqaSksaHQoLjA1NTY0MzQqdS0uMjA0MDI1OSpyKzEuMDU3MjI1
MippKSl9ZnVuY3Rpb24gc3Qobix0LGUpe3JldHVybiBuPjA/bmV3IGl0KE1hdGguYXRhbjIoZSx0
KSpDYSxNYXRoLnNxcnQodCp0K2UqZSksbik6bmV3IGl0KDAvMCwwLzAsbil9ZnVuY3Rpb24gbHQo
bil7cmV0dXJuIG4+LjIwNjg5MzAzND9uKm4qbjoobi00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBm
dChuKXtyZXR1cm4gbj4uMDA4ODU2P01hdGgucG93KG4sMS8zKTo3Ljc4NzAzNypuKzQvMjl9ZnVu
Y3Rpb24gaHQobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KiguMDAzMDQ+PW4/MTIuOTIqbjoxLjA1
NSpNYXRoLnBvdyhuLDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gZ3Qobix0LGUpe3JldHVybiB0aGlz
IGluc3RhbmNlb2YgZ3Q/KHRoaXMucj1+fm4sdGhpcy5nPX5+dCx2b2lkKHRoaXMuYj1+fmUpKTph
cmd1bWVudHMubGVuZ3RoPDI/biBpbnN0YW5jZW9mIGd0P25ldyBndChuLnIsbi5nLG4uYik6bXQo
IiIrbixndCx1dCk6bmV3IGd0KG4sdCxlKX1mdW5jdGlvbiBwdChuKXtyZXR1cm4gbmV3IGd0KG4+
PjE2LDI1NSZuPj44LDI1NSZuKX1mdW5jdGlvbiB2dChuKXtyZXR1cm4gcHQobikrIiJ9ZnVuY3Rp
b24gZHQobil7cmV0dXJuIDE2Pm4/IjAiK01hdGgubWF4KDAsbikudG9TdHJpbmcoMTYpOk1hdGgu
bWluKDI1NSxuKS50b1N0cmluZygxNil9ZnVuY3Rpb24gbXQobix0LGUpe3ZhciByLHUsaSxvPTAs
YT0wLGM9MDtpZihyPS8oW2Etel0rKVwoKC4qKVwpL2kuZXhlYyhuKSlzd2l0Y2godT1yWzJdLnNw
bGl0KCIsIiksclsxXSl7Y2FzZSJoc2wiOnJldHVybiBlKHBhcnNlRmxvYXQodVswXSkscGFyc2VG
bG9hdCh1WzFdKS8xMDAscGFyc2VGbG9hdCh1WzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gdChf
dCh1WzBdKSxfdCh1WzFdKSxfdCh1WzJdKSl9cmV0dXJuKGk9SWEuZ2V0KG4pKT90KGkucixpLmcs
aS5iKToobnVsbD09bnx8IiMiIT09bi5jaGFyQXQoMCl8fGlzTmFOKGk9cGFyc2VJbnQobi5zdWJz
dHJpbmcoMSksMTYpKXx8KDQ9PT1uLmxlbmd0aD8obz0oMzg0MCZpKT4+NCxvPW8+PjR8byxhPTI0
MCZpLGE9YT4+NHxhLGM9MTUmaSxjPWM8PDR8Yyk6Nz09PW4ubGVuZ3RoJiYobz0oMTY3MTE2ODAm
aSk+PjE2LGE9KDY1MjgwJmkpPj44LGM9MjU1JmkpKSx0KG8sYSxjKSl9ZnVuY3Rpb24geXQobix0
LGUpe3ZhciByLHUsaT1NYXRoLm1pbihuLz0yNTUsdC89MjU1LGUvPTI1NSksbz1NYXRoLm1heChu
LHQsZSksYT1vLWksYz0obytpKS8yO3JldHVybiBhPyh1PS41PmM/YS8obytpKTphLygyLW8taSks
cj1uPT1vPyh0LWUpL2ErKGU+dD82OjApOnQ9PW8/KGUtbikvYSsyOihuLXQpL2ErNCxyKj02MCk6
KHI9MC8wLHU9Yz4wJiYxPmM/MDpyKSxuZXcgcnQocix1LGMpfWZ1bmN0aW9uIHh0KG4sdCxlKXtu
PU10KG4pLHQ9TXQodCksZT1NdChlKTt2YXIgcj1mdCgoLjQxMjQ1NjQqbisuMzU3NTc2MSp0Ky4x
ODA0Mzc1KmUpL2phKSx1PWZ0KCguMjEyNjcyOSpuKy43MTUxNTIyKnQrLjA3MjE3NSplKS9IYSks
aT1mdCgoLjAxOTMzMzkqbisuMTE5MTkyKnQrLjk1MDMwNDEqZSkvRmEpO3JldHVybiBhdCgxMTYq
dS0xNiw1MDAqKHItdSksMjAwKih1LWkpKX1mdW5jdGlvbiBNdChuKXtyZXR1cm4obi89MjU1KTw9
LjA0MDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBfdChu
KXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0KG4ubGVuZ3RoLTEpP01h
dGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIGJ0KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv
ZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd3Qobil7cmV0dXJuIG59ZnVuY3Rp
b24gU3Qobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5n
dGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksa3QodCxlLG4scil9fWZ1bmN0
aW9uIGt0KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVzO2lmKCF0JiZjLnJl
c3BvbnNlVGV4dHx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5jYWxsKGksYyl9Y2F0
Y2gocil7cmV0dXJuIG8uZXJyb3IuY2FsbChpLHIpLHZvaWQgMH1vLmxvYWQuY2FsbChpLG4pfWVs
c2Ugby5lcnJvci5jYWxsKGksYyl9dmFyIGk9e30sbz1aby5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIs
InByb2dyZXNzIiwibG9hZCIsImVycm9yIiksYT17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCxzPW51
bGw7cmV0dXJuIVdvLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXiho
dHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJp
biBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7
Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PVpvLmV2
ZW50O1pvLmV2ZW50PW47dHJ5e28ucHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7Wm8uZXZlbnQ9
dH19LGkuaGVhZGVyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCks
YXJndW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10KyIiLGkp
fSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9
PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhzPW4saSk6c30saS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1u
LGl9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3Jl
dHVybiBpLnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KFhvKGFyZ3VtZW50cykpKX19KSxpLnNlbmQ9
ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBl
b2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51bGw9PXR8fCJhY2NlcHQiaW4gYXx8
KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBsIGluIGEpYy5z
ZXRSZXF1ZXN0SGVhZGVyKGwsYVtsXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlw
ZSYmYy5vdmVycmlkZU1pbWVUeXBlKHQpLG51bGwhPXMmJihjLnJlc3BvbnNlVHlwZT1zKSxudWxs
IT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVsbCxuKX0pLG8u
YmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVsbDpyKSxpfSxpLmFib3J0PWZ1
bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSxaby5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/
aTppLmdldChFdChyKSl9ZnVuY3Rpb24gRXQobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlv
bih0LGUpe24obnVsbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIEF0KCl7dmFyIG49Q3QoKSx0PU50
KCktbjt0PjI0Pyhpc0Zpbml0ZSh0KSYmKGNsZWFyVGltZW91dCgkYSksJGE9c2V0VGltZW91dChB
dCx0KSksWGE9MCk6KFhhPTEsV2EoQXQpKX1mdW5jdGlvbiBDdCgpe3ZhciBuPURhdGUubm93KCk7
Zm9yKEJhPVphO0JhOyluPj1CYS50JiYoQmEuZj1CYS5jKG4tQmEudCkpLEJhPUJhLm47cmV0dXJu
IG59ZnVuY3Rpb24gTnQoKXtmb3IodmFyIG4sdD1aYSxlPTEvMDt0Oyl0LmY/dD1uP24ubj10Lm46
WmE9dC5uOih0LnQ8ZSYmKGU9dC50KSx0PShuPXQpLm4pO3JldHVybiBWYT1uLGV9ZnVuY3Rpb24g
enQobix0KXtyZXR1cm4gdC0obj9NYXRoLmNlaWwoTWF0aC5sb2cobikvTWF0aC5MTjEwKToxKX1m
dW5jdGlvbiBMdChuLHQpe3ZhciBlPU1hdGgucG93KDEwLDMqdWEoOC10KSk7cmV0dXJue3NjYWxl
OnQ+OD9mdW5jdGlvbihuKXtyZXR1cm4gbi9lfTpmdW5jdGlvbihuKXtyZXR1cm4gbiplfSxzeW1i
b2w6bn19ZnVuY3Rpb24gVHQobil7dmFyIHQ9bi5kZWNpbWFsLGU9bi50aG91c2FuZHMscj1uLmdy
b3VwaW5nLHU9bi5jdXJyZW5jeSxpPXI/ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4ubGVuZ3RoLHU9
W10saT0wLG89clswXTt0PjAmJm8+MDspdS5wdXNoKG4uc3Vic3RyaW5nKHQtPW8sdCtvKSksbz1y
W2k9KGkrMSklci5sZW5ndGhdO3JldHVybiB1LnJldmVyc2UoKS5qb2luKGUpfTp3dDtyZXR1cm4g
ZnVuY3Rpb24obil7dmFyIGU9R2EuZXhlYyhuKSxyPWVbMV18fCIgIixvPWVbMl18fCI+IixhPWVb
M118fCIiLGM9ZVs0XXx8IiIscz1lWzVdLGw9K2VbNl0sZj1lWzddLGg9ZVs4XSxnPWVbOV0scD0x
LHY9IiIsZD0iIixtPSExO3N3aXRjaChoJiYoaD0raC5zdWJzdHJpbmcoMSkpLChzfHwiMCI9PT1y
JiYiPSI9PT1vKSYmKHM9cj0iMCIsbz0iPSIsZiYmKGwtPU1hdGguZmxvb3IoKGwtMSkvNCkpKSxn
KXtjYXNlIm4iOmY9ITAsZz0iZyI7YnJlYWs7Y2FzZSIlIjpwPTEwMCxkPSIlIixnPSJmIjticmVh
aztjYXNlInAiOnA9MTAwLGQ9IiUiLGc9InIiO2JyZWFrO2Nhc2UiYiI6Y2FzZSJvIjpjYXNlIngi
OmNhc2UiWCI6IiMiPT09YyYmKHY9IjAiK2cudG9Mb3dlckNhc2UoKSk7Y2FzZSJjIjpjYXNlImQi
Om09ITAsaD0wO2JyZWFrO2Nhc2UicyI6cD0tMSxnPSJyIn0iJCI9PT1jJiYodj11WzBdLGQ9dVsx
XSksInIiIT1nfHxofHwoZz0iZyIpLG51bGwhPWgmJigiZyI9PWc/aD1NYXRoLm1heCgxLE1hdGgu
bWluKDIxLGgpKTooImUiPT1nfHwiZiI9PWcpJiYoaD1NYXRoLm1heCgwLE1hdGgubWluKDIwLGgp
KSkpLGc9S2EuZ2V0KGcpfHxxdDt2YXIgeT1zJiZmO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1k
O2lmKG0mJm4lMSlyZXR1cm4iIjt2YXIgdT0wPm58fDA9PT1uJiYwPjEvbj8obj0tbiwiLSIpOmE7
aWYoMD5wKXt2YXIgYz1aby5mb3JtYXRQcmVmaXgobixoKTtuPWMuc2NhbGUobiksZT1jLnN5bWJv
bCtkfWVsc2Ugbio9cDtuPWcobixoKTt2YXIgeD1uLmxhc3RJbmRleE9mKCIuIiksTT0wPng/bjpu
LnN1YnN0cmluZygwLHgpLF89MD54PyIiOnQrbi5zdWJzdHJpbmcoeCsxKTshcyYmZiYmKE09aShN
KSk7dmFyIGI9di5sZW5ndGgrTS5sZW5ndGgrXy5sZW5ndGgrKHk/MDp1Lmxlbmd0aCksdz1sPmI/
bmV3IEFycmF5KGI9bC1iKzEpLmpvaW4ocik6IiI7cmV0dXJuIHkmJihNPWkodytNKSksdSs9dixu
PU0rXywoIjwiPT09bz91K24rdzoiPiI9PT1vP3crdStuOiJeIj09PW8/dy5zdWJzdHJpbmcoMCxi
Pj49MSkrdStuK3cuc3Vic3RyaW5nKGIpOnUrKHk/bjp3K24pKStlfX19ZnVuY3Rpb24gcXQobil7
cmV0dXJuIG4rIiJ9ZnVuY3Rpb24gUnQoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0
aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfWZ1bmN0aW9u
IER0KG4sdCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPW4odCkscj1pKGUsMSk7cmV0dXJuIHItdD50
LWU/ZTpyfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHQoZT1uKG5ldyBuYyhlLTEpKSwxKSxlfWZ1bmN0
aW9uIGkobixlKXtyZXR1cm4gdChuPW5ldyBuYygrbiksZSksbn1mdW5jdGlvbiBvKG4scixpKXt2
YXIgbz11KG4pLGE9W107aWYoaT4xKWZvcig7cj5vOyllKG8pJWl8fGEucHVzaChuZXcgRGF0ZSgr
bykpLHQobywxKTtlbHNlIGZvcig7cj5vOylhLnB1c2gobmV3IERhdGUoK28pKSx0KG8sMSk7cmV0
dXJuIGF9ZnVuY3Rpb24gYShuLHQsZSl7dHJ5e25jPVJ0O3ZhciByPW5ldyBSdDtyZXR1cm4gci5f
PW4sbyhyLHQsZSl9ZmluYWxseXtuYz1EYXRlfX1uLmZsb29yPW4sbi5yb3VuZD1yLG4uY2VpbD11
LG4ub2Zmc2V0PWksbi5yYW5nZT1vO3ZhciBjPW4udXRjPVB0KG4pO3JldHVybiBjLmZsb29yPWMs
Yy5yb3VuZD1QdChyKSxjLmNlaWw9UHQodSksYy5vZmZzZXQ9UHQoaSksYy5yYW5nZT1hLG59ZnVu
Y3Rpb24gUHQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dHJ5e25jPVJ0O3ZhciByPW5ldyBSdDty
ZXR1cm4gci5fPXQsbihyLGUpLl99ZmluYWxseXtuYz1EYXRlfX19ZnVuY3Rpb24gVXQobil7ZnVu
Y3Rpb24gdChuKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgZSx1LGksbz1bXSxhPS0xLGM9MDsrK2E8
cjspMzc9PT1uLmNoYXJDb2RlQXQoYSkmJihvLnB1c2gobi5zdWJzdHJpbmcoYyxhKSksbnVsbCE9
KHU9ZWNbZT1uLmNoYXJBdCgrK2EpXSkmJihlPW4uY2hhckF0KCsrYSkpLChpPUNbZV0pJiYoZT1p
KHQsbnVsbD09dT8iZSI9PT1lPyIgIjoiMCI6dSkpLG8ucHVzaChlKSxjPWErMSk7cmV0dXJuIG8u
cHVzaChuLnN1YnN0cmluZyhjLGEpKSxvLmpvaW4oIiIpfXZhciByPW4ubGVuZ3RoO3JldHVybiB0
LnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAs
WjpudWxsfSx1PWUocixuLHQsMCk7aWYodSE9dC5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4gciYm
KHIuSD1yLkglMTIrMTIqci5wKTt2YXIgaT1udWxsIT1yLlomJm5jIT09UnQsbz1uZXcoaT9SdDpu
Yyk7cmV0dXJuImoiaW4gcj9vLnNldEZ1bGxZZWFyKHIueSwwLHIuaik6InciaW4gciYmKCJXImlu
IHJ8fCJVImluIHIpPyhvLnNldEZ1bGxZZWFyKHIueSwwLDEpLG8uc2V0RnVsbFllYXIoci55LDAs
IlciaW4gcj8oci53KzYpJTcrNypyLlctKG8uZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKG8uZ2V0
RGF5KCkrNiklNykpOm8uc2V0RnVsbFllYXIoci55LHIubSxyLmQpLG8uc2V0SG91cnMoci5IK01h
dGguZmxvb3Ioci5aLzEwMCksci5NK3IuWiUxMDAsci5TLHIuTCksaT9vLl86b30sdC50b1N0cmlu
Zz1mdW5jdGlvbigpe3JldHVybiBufSx0fWZ1bmN0aW9uIGUobix0LGUscil7Zm9yKHZhciB1LGks
byxhPTAsYz10Lmxlbmd0aCxzPWUubGVuZ3RoO2M+YTspe2lmKHI+PXMpcmV0dXJuLTE7aWYodT10
LmNoYXJDb2RlQXQoYSsrKSwzNz09PXUpe2lmKG89dC5jaGFyQXQoYSsrKSxpPU5bbyBpbiBlYz90
LmNoYXJBdChhKyspOm9dLCFpfHwocj1pKG4sZSxyKSk8MClyZXR1cm4tMX1lbHNlIGlmKHUhPWUu
Y2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfWZ1bmN0aW9uIHIobix0LGUpe2IubGFz
dEluZGV4PTA7dmFyIHI9Yi5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi53PXcuZ2V0
KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdShuLHQsZSl7
TS5sYXN0SW5kZXg9MDt2YXIgcj1NLmV4ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhuLnc9
Xy5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpKG4s
dCxlKXtFLmxhc3RJbmRleD0wO3ZhciByPUUuZXhlYyh0LnN1YnN0cmluZyhlKSk7cmV0dXJuIHI/
KG4ubT1BLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9u
IG8obix0LGUpe1MubGFzdEluZGV4PTA7dmFyIHI9Uy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1
cm4gcj8obi5tPWsuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVu
Y3Rpb24gYShuLHQscil7cmV0dXJuIGUobixDLmMudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIGMo
bix0LHIpe3JldHVybiBlKG4sQy54LnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBzKG4sdCxyKXty
ZXR1cm4gZShuLEMuWC50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gbChuLHQsZSl7dmFyIHI9eC5n
ZXQodC5zdWJzdHJpbmcoZSxlKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09cj8tMToo
bi5wPXIsZSl9dmFyIGY9bi5kYXRlVGltZSxoPW4uZGF0ZSxnPW4udGltZSxwPW4ucGVyaW9kcyx2
PW4uZGF5cyxkPW4uc2hvcnREYXlzLG09bi5tb250aHMseT1uLnNob3J0TW9udGhzO3QudXRjPWZ1
bmN0aW9uKG4pe2Z1bmN0aW9uIGUobil7dHJ5e25jPVJ0O3ZhciB0PW5ldyBuYztyZXR1cm4gdC5f
PW4scih0KX1maW5hbGx5e25jPURhdGV9fXZhciByPXQobik7cmV0dXJuIGUucGFyc2U9ZnVuY3Rp
b24obil7dHJ5e25jPVJ0O3ZhciB0PXIucGFyc2Uobik7cmV0dXJuIHQmJnQuX31maW5hbGx5e25j
PURhdGV9fSxlLnRvU3RyaW5nPXIudG9TdHJpbmcsZX0sdC5tdWx0aT10LnV0Yy5tdWx0aT1yZTt2
YXIgeD1aby5tYXAoKSxNPUh0KHYpLF89RnQodiksYj1IdChkKSx3PUZ0KGQpLFM9SHQobSksaz1G
dChtKSxFPUh0KHkpLEE9RnQoeSk7cC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7eC5zZXQobi50b0xv
d2VyQ2FzZSgpLHQpfSk7dmFyIEM9e2E6ZnVuY3Rpb24obil7cmV0dXJuIGRbbi5nZXREYXkoKV19
LEE6ZnVuY3Rpb24obil7cmV0dXJuIHZbbi5nZXREYXkoKV19LGI6ZnVuY3Rpb24obil7cmV0dXJu
IHlbbi5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihuKXtyZXR1cm4gbVtuLmdldE1vbnRoKCldfSxj
OnQoZiksZDpmdW5jdGlvbihuLHQpe3JldHVybiBqdChuLmdldERhdGUoKSx0LDIpfSxlOmZ1bmN0
aW9uKG4sdCl7cmV0dXJuIGp0KG4uZ2V0RGF0ZSgpLHQsMil9LEg6ZnVuY3Rpb24obix0KXtyZXR1
cm4ganQobi5nZXRIb3VycygpLHQsMil9LEk6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQobi5nZXRI
b3VycygpJTEyfHwxMix0LDIpfSxqOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGp0KDErUWEuZGF5T2ZZ
ZWFyKG4pLHQsMyl9LEw6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQobi5nZXRNaWxsaXNlY29uZHMo
KSx0LDMpfSxtOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGp0KG4uZ2V0TW9udGgoKSsxLHQsMil9LE06
ZnVuY3Rpb24obix0KXtyZXR1cm4ganQobi5nZXRNaW51dGVzKCksdCwyKX0scDpmdW5jdGlvbihu
KXtyZXR1cm4gcFsrKG4uZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbihuLHQpe3JldHVybiBq
dChuLmdldFNlY29uZHMoKSx0LDIpfSxVOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGp0KFFhLnN1bmRh
eU9mWWVhcihuKSx0LDIpfSx3OmZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpfSxXOmZ1bmN0
aW9uKG4sdCl7cmV0dXJuIGp0KFFhLm1vbmRheU9mWWVhcihuKSx0LDIpfSx4OnQoaCksWDp0KGcp
LHk6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQobi5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfSxZOmZ1
bmN0aW9uKG4sdCl7cmV0dXJuIGp0KG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX0sWjp0ZSwiJSI6
ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxOPXthOnIsQTp1LGI6aSxCOm8sYzphLGQ6V3QsZTpXdCxI
Okd0LEk6R3QsajpKdCxMOm5lLG06QnQsTTpLdCxwOmwsUzpRdCxVOll0LHc6T3QsVzpJdCx4OmMs
WDpzLHk6VnQsWTpadCxaOlh0LCIlIjplZX07cmV0dXJuIHR9ZnVuY3Rpb24ganQobix0LGUpe3Zh
ciByPTA+bj8iLSI6IiIsdT0ocj8tbjpuKSsiIixpPXUubGVuZ3RoO3JldHVybiByKyhlPmk/bmV3
IEFycmF5KGUtaSsxKS5qb2luKHQpK3U6dSl9ZnVuY3Rpb24gSHQobil7cmV0dXJuIG5ldyBSZWdF
eHAoIl4oPzoiK24ubWFwKFpvLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBG
dChuKXtmb3IodmFyIHQ9bmV3IG8sZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnNldChuW2VdLnRv
TG93ZXJDYXNlKCksZSk7cmV0dXJuIHR9ZnVuY3Rpb24gT3Qobix0LGUpe3JjLmxhc3RJbmRleD0w
O3ZhciByPXJjLmV4ZWModC5zdWJzdHJpbmcoZSxlKzEpKTtyZXR1cm4gcj8obi53PStyWzBdLGUr
clswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFl0KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1y
Yy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclswXS5sZW5ndGgp
Oi0xfWZ1bmN0aW9uIEl0KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1yYy5leGVjKHQuc3Vi
c3RyaW5nKGUpKTtyZXR1cm4gcj8obi5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9u
IFp0KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1yYy5leGVjKHQuc3Vic3RyaW5nKGUsZSs0
KSk7cmV0dXJuIHI/KG4ueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBWdChuLHQs
ZSl7cmMubGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVy
biByPyhuLnk9JHQoK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFh0KG4sdCxlKXty
ZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QodD10LnN1YnN0cmluZyhlLGUrNSkpPyhuLlo9LXQsZSs1
KTotMX1mdW5jdGlvbiAkdChuKXtyZXR1cm4gbisobj42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gQnQo
bix0LGUpe3JjLmxhc3RJbmRleD0wO3ZhciByPXJjLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTty
ZXR1cm4gcj8obi5tPXJbMF0tMSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdChuLHQsZSl7
cmMubGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiBy
PyhuLmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnQobix0LGUpe3JjLmxhc3RJ
bmRleD0wO3ZhciByPXJjLmV4ZWModC5zdWJzdHJpbmcoZSxlKzMpKTtyZXR1cm4gcj8obi5qPSty
WzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEd0KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2
YXIgcj1yYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsyKSk7cmV0dXJuIHI/KG4uSD0rclswXSxlK3Jb
MF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLdChuLHQsZSl7cmMubGFzdEluZGV4PTA7dmFyIHI9cmMu
ZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLk09K3JbMF0sZStyWzBdLmxlbmd0
aCk6LTF9ZnVuY3Rpb24gUXQobix0LGUpe3JjLmxhc3RJbmRleD0wO3ZhciByPXJjLmV4ZWModC5z
dWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1
bmN0aW9uIG5lKG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1yYy5leGVjKHQuc3Vic3RyaW5n
KGUsZSszKSk7cmV0dXJuIHI/KG4uTD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0
ZShuKXt2YXIgdD1uLmdldFRpbWV6b25lT2Zmc2V0KCksZT10PjA/Ii0iOiIrIixyPX5+KHVhKHQp
LzYwKSx1PXVhKHQpJTYwO3JldHVybiBlK2p0KHIsIjAiLDIpK2p0KHUsIjAiLDIpfWZ1bmN0aW9u
IGVlKG4sdCxlKXt1Yy5sYXN0SW5kZXg9MDt2YXIgcj11Yy5leGVjKHQuc3Vic3RyaW5nKGUsZSsx
KSk7cmV0dXJuIHI/ZStyWzBdLmxlbmd0aDotMX1mdW5jdGlvbiByZShuKXtmb3IodmFyIHQ9bi5s
ZW5ndGgsZT0tMTsrK2U8dDspbltlXVswXT10aGlzKG5bZV1bMF0pO3JldHVybiBmdW5jdGlvbih0
KXtmb3IodmFyIGU9MCxyPW5bZV07IXJbMV0odCk7KXI9blsrK2VdO3JldHVybiByWzBdKHQpfX1m
dW5jdGlvbiB1ZSgpe31mdW5jdGlvbiBpZShuLHQsZSl7dmFyIHI9ZS5zPW4rdCx1PXItbixpPXIt
dTtlLnQ9bi1pKyh0LXUpfWZ1bmN0aW9uIG9lKG4sdCl7biYmY2MuaGFzT3duUHJvcGVydHkobi50
eXBlKSYmY2Nbbi50eXBlXShuLHQpfWZ1bmN0aW9uIGFlKG4sdCxlKXt2YXIgcix1PS0xLGk9bi5s
ZW5ndGgtZTtmb3IodC5saW5lU3RhcnQoKTsrK3U8aTspcj1uW3VdLHQucG9pbnQoclswXSxyWzFd
LHJbMl0pO3QubGluZUVuZCgpfWZ1bmN0aW9uIGNlKG4sdCl7dmFyIGU9LTEscj1uLmxlbmd0aDtm
b3IodC5wb2x5Z29uU3RhcnQoKTsrK2U8cjspYWUobltlXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1
bmN0aW9uIHNlKCl7ZnVuY3Rpb24gbihuLHQpe24qPUFhLHQ9dCpBYS8yK2JhLzQ7dmFyIGU9bi1y
LG89ZT49MD8xOi0xLGE9byplLGM9TWF0aC5jb3ModCkscz1NYXRoLnNpbih0KSxsPWkqcyxmPXUq
YytsKk1hdGguY29zKGEpLGg9bCpvKk1hdGguc2luKGEpO2xjLmFkZChNYXRoLmF0YW4yKGgsZikp
LHI9bix1PWMsaT1zfXZhciB0LGUscix1LGk7ZmMucG9pbnQ9ZnVuY3Rpb24obyxhKXtmYy5wb2lu
dD1uLHI9KHQ9bykqQWEsdT1NYXRoLmNvcyhhPShlPWEpKkFhLzIrYmEvNCksaT1NYXRoLnNpbihh
KX0sZmMubGluZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gbGUobil7dmFyIHQ9blsw
XSxlPW5bMV0scj1NYXRoLmNvcyhlKTtyZXR1cm5bcipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQp
LE1hdGguc2luKGUpXX1mdW5jdGlvbiBmZShuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFd
K25bMl0qdFsyXX1mdW5jdGlvbiBoZShuLHQpe3JldHVybltuWzFdKnRbMl0tblsyXSp0WzFdLG5b
Ml0qdFswXS1uWzBdKnRbMl0sblswXSp0WzFdLW5bMV0qdFswXV19ZnVuY3Rpb24gZ2Uobix0KXtu
WzBdKz10WzBdLG5bMV0rPXRbMV0sblsyXSs9dFsyXX1mdW5jdGlvbiBwZShuLHQpe3JldHVybltu
WzBdKnQsblsxXSp0LG5bMl0qdF19ZnVuY3Rpb24gdmUobil7dmFyIHQ9TWF0aC5zcXJ0KG5bMF0q
blswXStuWzFdKm5bMV0rblsyXSpuWzJdKTtuWzBdLz10LG5bMV0vPXQsblsyXS89dH1mdW5jdGlv
biBkZShuKXtyZXR1cm5bTWF0aC5hdGFuMihuWzFdLG5bMF0pLEcoblsyXSldfWZ1bmN0aW9uIG1l
KG4sdCl7cmV0dXJuIHVhKG5bMF0tdFswXSk8a2EmJnVhKG5bMV0tdFsxXSk8a2F9ZnVuY3Rpb24g
eWUobix0KXtuKj1BYTt2YXIgZT1NYXRoLmNvcyh0Kj1BYSk7eGUoZSpNYXRoLmNvcyhuKSxlKk1h
dGguc2luKG4pLE1hdGguc2luKHQpKX1mdW5jdGlvbiB4ZShuLHQsZSl7KytoYyxwYys9KG4tcGMp
L2hjLHZjKz0odC12YykvaGMsZGMrPShlLWRjKS9oY31mdW5jdGlvbiBNZSgpe2Z1bmN0aW9uIG4o
bix1KXtuKj1BYTt2YXIgaT1NYXRoLmNvcyh1Kj1BYSksbz1pKk1hdGguY29zKG4pLGE9aSpNYXRo
LnNpbihuKSxjPU1hdGguc2luKHUpLHM9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9ZSpjLXIqYSkq
cysocz1yKm8tdCpjKSpzKyhzPXQqYS1lKm8pKnMpLHQqbytlKmErcipjKTtnYys9cyxtYys9cyoo
dCsodD1vKSkseWMrPXMqKGUrKGU9YSkpLHhjKz1zKihyKyhyPWMpKSx4ZSh0LGUscil9dmFyIHQs
ZSxyO3djLnBvaW50PWZ1bmN0aW9uKHUsaSl7dSo9QWE7dmFyIG89TWF0aC5jb3MoaSo9QWEpO3Q9
bypNYXRoLmNvcyh1KSxlPW8qTWF0aC5zaW4odSkscj1NYXRoLnNpbihpKSx3Yy5wb2ludD1uLHhl
KHQsZSxyKX19ZnVuY3Rpb24gX2UoKXt3Yy5wb2ludD15ZX1mdW5jdGlvbiBiZSgpe2Z1bmN0aW9u
IG4obix0KXtuKj1BYTt2YXIgZT1NYXRoLmNvcyh0Kj1BYSksbz1lKk1hdGguY29zKG4pLGE9ZSpN
YXRoLnNpbihuKSxjPU1hdGguc2luKHQpLHM9dSpjLWkqYSxsPWkqby1yKmMsZj1yKmEtdSpvLGg9
TWF0aC5zcXJ0KHMqcytsKmwrZipmKSxnPXIqbyt1KmEraSpjLHA9aCYmLUooZykvaCx2PU1hdGgu
YXRhbjIoaCxnKTtNYys9cCpzLF9jKz1wKmwsYmMrPXAqZixnYys9dixtYys9dioocisocj1vKSks
eWMrPXYqKHUrKHU9YSkpLHhjKz12KihpKyhpPWMpKSx4ZShyLHUsaSl9dmFyIHQsZSxyLHUsaTt3
Yy5wb2ludD1mdW5jdGlvbihvLGEpe3Q9byxlPWEsd2MucG9pbnQ9bixvKj1BYTt2YXIgYz1NYXRo
LmNvcyhhKj1BYSk7cj1jKk1hdGguY29zKG8pLHU9YypNYXRoLnNpbihvKSxpPU1hdGguc2luKGEp
LHhlKHIsdSxpKX0sd2MubGluZUVuZD1mdW5jdGlvbigpe24odCxlKSx3Yy5saW5lRW5kPV9lLHdj
LnBvaW50PXllfX1mdW5jdGlvbiB3ZSgpe3JldHVybiEwfWZ1bmN0aW9uIFNlKG4sdCxlLHIsdSl7
dmFyIGk9W10sbz1bXTtpZihuLmZvckVhY2goZnVuY3Rpb24obil7aWYoISgodD1uLmxlbmd0aC0x
KTw9MCkpe3ZhciB0LGU9blswXSxyPW5bdF07aWYobWUoZSxyKSl7dS5saW5lU3RhcnQoKTtmb3Io
dmFyIGE9MDt0PmE7KythKXUucG9pbnQoKGU9blthXSlbMF0sZVsxXSk7cmV0dXJuIHUubGluZUVu
ZCgpLHZvaWQgMH12YXIgYz1uZXcgRWUoZSxuLG51bGwsITApLHM9bmV3IEVlKGUsbnVsbCxjLCEx
KTtjLm89cyxpLnB1c2goYyksby5wdXNoKHMpLGM9bmV3IEVlKHIsbixudWxsLCExKSxzPW5ldyBF
ZShyLG51bGwsYywhMCksYy5vPXMsaS5wdXNoKGMpLG8ucHVzaChzKX19KSxvLnNvcnQodCksa2Uo
aSksa2UobyksaS5sZW5ndGgpe2Zvcih2YXIgYT0wLGM9ZSxzPW8ubGVuZ3RoO3M+YTsrK2Epb1th
XS5lPWM9IWM7Zm9yKHZhciBsLGYsaD1pWzBdOzspe2Zvcih2YXIgZz1oLHA9ITA7Zy52OylpZigo
Zz1nLm4pPT09aClyZXR1cm47bD1nLnosdS5saW5lU3RhcnQoKTtkb3tpZihnLnY9Zy5vLnY9ITAs
Zy5lKXtpZihwKWZvcih2YXIgYT0wLHM9bC5sZW5ndGg7cz5hOysrYSl1LnBvaW50KChmPWxbYV0p
WzBdLGZbMV0pO2Vsc2UgcihnLngsZy5uLngsMSx1KTtnPWcubn1lbHNle2lmKHApe2w9Zy5wLno7
Zm9yKHZhciBhPWwubGVuZ3RoLTE7YT49MDstLWEpdS5wb2ludCgoZj1sW2FdKVswXSxmWzFdKX1l
bHNlIHIoZy54LGcucC54LC0xLHUpO2c9Zy5wfWc9Zy5vLGw9Zy56LHA9IXB9d2hpbGUoIWcudik7
dS5saW5lRW5kKCl9fX1mdW5jdGlvbiBrZShuKXtpZih0PW4ubGVuZ3RoKXtmb3IodmFyIHQsZSxy
PTAsdT1uWzBdOysrcjx0Oyl1Lm49ZT1uW3JdLGUucD11LHU9ZTt1Lm49ZT1uWzBdLGUucD11fX1m
dW5jdGlvbiBFZShuLHQsZSxyKXt0aGlzLng9bix0aGlzLno9dCx0aGlzLm89ZSx0aGlzLmU9cix0
aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIEFlKG4sdCxlLHIpe3JldHVybiBm
dW5jdGlvbih1LGkpe2Z1bmN0aW9uIG8odCxlKXt2YXIgcj11KHQsZSk7bih0PXJbMF0sZT1yWzFd
KSYmaS5wb2ludCh0LGUpfWZ1bmN0aW9uIGEobix0KXt2YXIgZT11KG4sdCk7ZC5wb2ludChlWzBd
LGVbMV0pfWZ1bmN0aW9uIGMoKXt5LnBvaW50PWEsZC5saW5lU3RhcnQoKX1mdW5jdGlvbiBzKCl7
eS5wb2ludD1vLGQubGluZUVuZCgpfWZ1bmN0aW9uIGwobix0KXt2LnB1c2goW24sdF0pO3ZhciBl
PXUobix0KTtNLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gZigpe00ubGluZVN0YXJ0KCksdj1b
XX1mdW5jdGlvbiBoKCl7bCh2WzBdWzBdLHZbMF1bMV0pLE0ubGluZUVuZCgpO3ZhciBuLHQ9TS5j
bGVhbigpLGU9eC5idWZmZXIoKSxyPWUubGVuZ3RoO2lmKHYucG9wKCkscC5wdXNoKHYpLHY9bnVs
bCxyKWlmKDEmdCl7bj1lWzBdO3ZhciB1LHI9bi5sZW5ndGgtMSxvPS0xO2lmKHI+MCl7Zm9yKF98
fChpLnBvbHlnb25TdGFydCgpLF89ITApLGkubGluZVN0YXJ0KCk7KytvPHI7KWkucG9pbnQoKHU9
bltvXSlbMF0sdVsxXSk7aS5saW5lRW5kKCl9fWVsc2Ugcj4xJiYyJnQmJmUucHVzaChlLnBvcCgp
LmNvbmNhdChlLnNoaWZ0KCkpKSxnLnB1c2goZS5maWx0ZXIoQ2UpKX12YXIgZyxwLHYsZD10KGkp
LG09dS5pbnZlcnQoclswXSxyWzFdKSx5PXtwb2ludDpvLGxpbmVTdGFydDpjLGxpbmVFbmQ6cyxw
b2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt5LnBvaW50PWwseS5saW5lU3RhcnQ9Zix5LmxpbmVFbmQ9
aCxnPVtdLHA9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt5LnBvaW50PW8seS5saW5lU3RhcnQ9
Yyx5LmxpbmVFbmQ9cyxnPVpvLm1lcmdlKGcpO3ZhciBuPUxlKG0scCk7Zy5sZW5ndGg/KF98fChp
LnBvbHlnb25TdGFydCgpLF89ITApLFNlKGcsemUsbixlLGkpKTpuJiYoX3x8KGkucG9seWdvblN0
YXJ0KCksXz0hMCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxf
JiYoaS5wb2x5Z29uRW5kKCksXz0hMSksZz1wPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9s
eWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGku
cG9seWdvbkVuZCgpfX0seD1OZSgpLE09dCh4KSxfPSExO3JldHVybiB5fX1mdW5jdGlvbiBDZShu
KXtyZXR1cm4gbi5sZW5ndGg+MX1mdW5jdGlvbiBOZSgpe3ZhciBuLHQ9W107cmV0dXJue2xpbmVT
dGFydDpmdW5jdGlvbigpe3QucHVzaChuPVtdKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtuLnB1c2go
W3QsZV0pfSxsaW5lRW5kOnYsYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIGU9dDtyZXR1cm4gdD1bXSxu
PW51bGwsZX0scmVqb2luOmZ1bmN0aW9uKCl7dC5sZW5ndGg+MSYmdC5wdXNoKHQucG9wKCkuY29u
Y2F0KHQuc2hpZnQoKSkpfX19ZnVuY3Rpb24gemUobix0KXtyZXR1cm4oKG49bi54KVswXTwwP25b
MV0tU2Eta2E6U2EtblsxXSktKCh0PXQueClbMF08MD90WzFdLVNhLWthOlNhLXRbMV0pfWZ1bmN0
aW9uIExlKG4sdCl7dmFyIGU9blswXSxyPW5bMV0sdT1bTWF0aC5zaW4oZSksLU1hdGguY29zKGUp
LDBdLGk9MCxvPTA7bGMucmVzZXQoKTtmb3IodmFyIGE9MCxjPXQubGVuZ3RoO2M+YTsrK2Epe3Zh
ciBzPXRbYV0sbD1zLmxlbmd0aDtpZihsKWZvcih2YXIgZj1zWzBdLGg9ZlswXSxnPWZbMV0vMiti
YS80LHA9TWF0aC5zaW4oZyksdj1NYXRoLmNvcyhnKSxkPTE7Oyl7ZD09PWwmJihkPTApLG49c1tk
XTt2YXIgbT1uWzBdLHk9blsxXS8yK2JhLzQseD1NYXRoLnNpbih5KSxNPU1hdGguY29zKHkpLF89
bS1oLGI9Xz49MD8xOi0xLHc9YipfLFM9dz5iYSxrPXAqeDtpZihsYy5hZGQoTWF0aC5hdGFuMihr
KmIqTWF0aC5zaW4odyksdipNK2sqTWF0aC5jb3ModykpKSxpKz1TP18rYip3YTpfLFNeaD49ZV5t
Pj1lKXt2YXIgRT1oZShsZShmKSxsZShuKSk7dmUoRSk7dmFyIEE9aGUodSxFKTt2ZShBKTt2YXIg
Qz0oU15fPj0wPy0xOjEpKkcoQVsyXSk7KHI+Q3x8cj09PUMmJihFWzBdfHxFWzFdKSkmJihvKz1T
Xl8+PTA/MTotMSl9aWYoIWQrKylicmVhaztoPW0scD14LHY9TSxmPW59fXJldHVybigta2E+aXx8
a2E+aSYmMD5sYyleMSZvfWZ1bmN0aW9uIFRlKG4pe3ZhciB0LGU9MC8wLHI9MC8wLHU9MC8wO3Jl
dHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpLHQ9MX0scG9pbnQ6ZnVuY3Rp
b24oaSxvKXt2YXIgYT1pPjA/YmE6LWJhLGM9dWEoaS1lKTt1YShjLWJhKTxrYT8obi5wb2ludChl
LHI9KHIrbykvMj4wP1NhOi1TYSksbi5wb2ludCh1LHIpLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0
KCksbi5wb2ludChhLHIpLG4ucG9pbnQoaSxyKSx0PTApOnUhPT1hJiZjPj1iYSYmKHVhKGUtdSk8
a2EmJihlLT11KmthKSx1YShpLWEpPGthJiYoaS09YSprYSkscj1xZShlLHIsaSxvKSxuLnBvaW50
KHUsciksbi5saW5lRW5kKCksbi5saW5lU3RhcnQoKSxuLnBvaW50KGEsciksdD0wKSxuLnBvaW50
KGU9aSxyPW8pLHU9YX0sbGluZUVuZDpmdW5jdGlvbigpe24ubGluZUVuZCgpLGU9cj0wLzB9LGNs
ZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItdH19fWZ1bmN0aW9uIHFlKG4sdCxlLHIpe3ZhciB1LGks
bz1NYXRoLnNpbihuLWUpO3JldHVybiB1YShvKT5rYT9NYXRoLmF0YW4oKE1hdGguc2luKHQpKihp
PU1hdGguY29zKHIpKSpNYXRoLnNpbihlKS1NYXRoLnNpbihyKSoodT1NYXRoLmNvcyh0KSkqTWF0
aC5zaW4obikpLyh1KmkqbykpOih0K3IpLzJ9ZnVuY3Rpb24gUmUobix0LGUscil7dmFyIHU7aWYo
bnVsbD09bil1PWUqU2Esci5wb2ludCgtYmEsdSksci5wb2ludCgwLHUpLHIucG9pbnQoYmEsdSks
ci5wb2ludChiYSwwKSxyLnBvaW50KGJhLC11KSxyLnBvaW50KDAsLXUpLHIucG9pbnQoLWJhLC11
KSxyLnBvaW50KC1iYSwwKSxyLnBvaW50KC1iYSx1KTtlbHNlIGlmKHVhKG5bMF0tdFswXSk+a2Ep
e3ZhciBpPW5bMF08dFswXT9iYTotYmE7dT1lKmkvMixyLnBvaW50KC1pLHUpLHIucG9pbnQoMCx1
KSxyLnBvaW50KGksdSl9ZWxzZSByLnBvaW50KHRbMF0sdFsxXSl9ZnVuY3Rpb24gRGUobil7ZnVu
Y3Rpb24gdChuLHQpe3JldHVybiBNYXRoLmNvcyhuKSpNYXRoLmNvcyh0KT5pfWZ1bmN0aW9uIGUo
bil7dmFyIGUsaSxjLHMsbDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7cz1jPSExLGw9MX0s
cG9pbnQ6ZnVuY3Rpb24oZixoKXt2YXIgZyxwPVtmLGhdLHY9dChmLGgpLGQ9bz92PzA6dShmLGgp
OnY/dShmKygwPmY/YmE6LWJhKSxoKTowO2lmKCFlJiYocz1jPXYpJiZuLmxpbmVTdGFydCgpLHYh
PT1jJiYoZz1yKGUscCksKG1lKGUsZyl8fG1lKHAsZykpJiYocFswXSs9a2EscFsxXSs9a2Esdj10
KHBbMF0scFsxXSkpKSx2IT09YylsPTAsdj8obi5saW5lU3RhcnQoKSxnPXIocCxlKSxuLnBvaW50
KGdbMF0sZ1sxXSkpOihnPXIoZSxwKSxuLnBvaW50KGdbMF0sZ1sxXSksbi5saW5lRW5kKCkpLGU9
ZztlbHNlIGlmKGEmJmUmJm9edil7dmFyIG07ZCZpfHwhKG09cihwLGUsITApKXx8KGw9MCxvPyhu
LmxpbmVTdGFydCgpLG4ucG9pbnQobVswXVswXSxtWzBdWzFdKSxuLnBvaW50KG1bMV1bMF0sbVsx
XVsxXSksbi5saW5lRW5kKCkpOihuLnBvaW50KG1bMV1bMF0sbVsxXVsxXSksbi5saW5lRW5kKCks
bi5saW5lU3RhcnQoKSxuLnBvaW50KG1bMF1bMF0sbVswXVsxXSkpKX0hdnx8ZSYmbWUoZSxwKXx8
bi5wb2ludChwWzBdLHBbMV0pLGU9cCxjPXYsaT1kfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmbi5s
aW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBsfChzJiZjKTw8MX19fWZ1
bmN0aW9uIHIobix0LGUpe3ZhciByPWxlKG4pLHU9bGUodCksbz1bMSwwLDBdLGE9aGUocix1KSxj
PWZlKGEsYSkscz1hWzBdLGw9Yy1zKnM7aWYoIWwpcmV0dXJuIWUmJm47dmFyIGY9aSpjL2wsaD0t
aSpzL2wsZz1oZShvLGEpLHA9cGUobyxmKSx2PXBlKGEsaCk7Z2UocCx2KTt2YXIgZD1nLG09ZmUo
cCxkKSx5PWZlKGQsZCkseD1tKm0teSooZmUocCxwKS0xKTtpZighKDA+eCkpe3ZhciBNPU1hdGgu
c3FydCh4KSxfPXBlKGQsKC1tLU0pL3kpO2lmKGdlKF8scCksXz1kZShfKSwhZSlyZXR1cm4gXzt2
YXIgYix3PW5bMF0sUz10WzBdLGs9blsxXSxFPXRbMV07dz5TJiYoYj13LHc9UyxTPWIpO3ZhciBB
PVMtdyxDPXVhKEEtYmEpPGthLE49Q3x8a2E+QTtpZighQyYmaz5FJiYoYj1rLGs9RSxFPWIpLE4/
Qz9rK0U+MF5fWzFdPCh1YShfWzBdLXcpPGthP2s6RSk6azw9X1sxXSYmX1sxXTw9RTpBPmJhXih3
PD1fWzBdJiZfWzBdPD1TKSl7dmFyIHo9cGUoZCwoLW0rTSkveSk7cmV0dXJuIGdlKHoscCksW18s
ZGUoeildfX19ZnVuY3Rpb24gdSh0LGUpe3ZhciByPW8/bjpiYS1uLHU9MDtyZXR1cm4tcj50P3V8
PTE6dD5yJiYodXw9MiksLXI+ZT91fD00OmU+ciYmKHV8PTgpLHV9dmFyIGk9TWF0aC5jb3Mobiks
bz1pPjAsYT11YShpKT5rYSxjPXNyKG4sNipBYSk7cmV0dXJuIEFlKHQsZSxjLG8/WzAsLW5dOlst
YmEsbi1iYV0pfWZ1bmN0aW9uIFBlKG4sdCxlLHIpe3JldHVybiBmdW5jdGlvbih1KXt2YXIgaSxv
PXUuYSxhPXUuYixjPW8ueCxzPW8ueSxsPWEueCxmPWEueSxoPTAsZz0xLHA9bC1jLHY9Zi1zO2lm
KGk9bi1jLHB8fCEoaT4wKSl7aWYoaS89cCwwPnApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1l
bHNlIGlmKHA+MCl7aWYoaT5nKXJldHVybjtpPmgmJihoPWkpfWlmKGk9ZS1jLHB8fCEoMD5pKSl7
aWYoaS89cCwwPnApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1lbHNlIGlmKHA+MCl7aWYoaD5p
KXJldHVybjtnPmkmJihnPWkpfWlmKGk9dC1zLHZ8fCEoaT4wKSl7aWYoaS89diwwPnYpe2lmKGg+
aSlyZXR1cm47Zz5pJiYoZz1pKX1lbHNlIGlmKHY+MCl7aWYoaT5nKXJldHVybjtpPmgmJihoPWkp
fWlmKGk9ci1zLHZ8fCEoMD5pKSl7aWYoaS89diwwPnYpe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1p
KX1lbHNlIGlmKHY+MCl7aWYoaD5pKXJldHVybjtnPmkmJihnPWkpfXJldHVybiBoPjAmJih1LmE9
e3g6YytoKnAseTpzK2gqdn0pLDE+ZyYmKHUuYj17eDpjK2cqcCx5OnMrZyp2fSksdX19fX19fWZ1
bmN0aW9uIFVlKG4sdCxlLHIpe2Z1bmN0aW9uIHUocix1KXtyZXR1cm4gdWEoclswXS1uKTxrYT91
PjA/MDozOnVhKHJbMF0tZSk8a2E/dT4wPzI6MTp1YShyWzFdLXQpPGthP3U+MD8xOjA6dT4wPzM6
Mn1mdW5jdGlvbiBpKG4sdCl7cmV0dXJuIG8obi54LHQueCl9ZnVuY3Rpb24gbyhuLHQpe3ZhciBl
PXUobiwxKSxyPXUodCwxKTtyZXR1cm4gZSE9PXI/ZS1yOjA9PT1lP3RbMV0tblsxXToxPT09ZT9u
WzBdLXRbMF06Mj09PWU/blsxXS10WzFdOnRbMF0tblswXX1yZXR1cm4gZnVuY3Rpb24oYSl7ZnVu
Y3Rpb24gYyhuKXtmb3IodmFyIHQ9MCxlPWQubGVuZ3RoLHI9blsxXSx1PTA7ZT51OysrdSlmb3Io
dmFyIGksbz0xLGE9ZFt1XSxjPWEubGVuZ3RoLHM9YVswXTtjPm87KytvKWk9YVtvXSxzWzFdPD1y
P2lbMV0+ciYmVyhzLGksbik+MCYmKyt0OmlbMV08PXImJlcocyxpLG4pPDAmJi0tdCxzPWk7cmV0
dXJuIDAhPT10fWZ1bmN0aW9uIHMoaSxhLGMscyl7dmFyIGw9MCxmPTA7aWYobnVsbD09aXx8KGw9
dShpLGMpKSE9PShmPXUoYSxjKSl8fG8oaSxhKTwwXmM+MCl7ZG8gcy5wb2ludCgwPT09bHx8Mz09
PWw/bjplLGw+MT9yOnQpO3doaWxlKChsPShsK2MrNCklNCkhPT1mKX1lbHNlIHMucG9pbnQoYVsw
XSxhWzFdKX1mdW5jdGlvbiBsKHUsaSl7cmV0dXJuIHU+PW4mJmU+PXUmJmk+PXQmJnI+PWl9ZnVu
Y3Rpb24gZihuLHQpe2wobix0KSYmYS5wb2ludChuLHQpfWZ1bmN0aW9uIGgoKXtOLnBvaW50PXAs
ZCYmZC5wdXNoKG09W10pLFM9ITAsdz0hMSxfPWI9MC8wfWZ1bmN0aW9uIGcoKXt2JiYocCh5LHgp
LE0mJncmJkEucmVqb2luKCksdi5wdXNoKEEuYnVmZmVyKCkpKSxOLnBvaW50PWYsdyYmYS5saW5l
RW5kKCl9ZnVuY3Rpb24gcChuLHQpe249TWF0aC5tYXgoLWtjLE1hdGgubWluKGtjLG4pKSx0PU1h
dGgubWF4KC1rYyxNYXRoLm1pbihrYyx0KSk7dmFyIGU9bChuLHQpO2lmKGQmJm0ucHVzaChbbix0
XSksUyl5PW4seD10LE09ZSxTPSExLGUmJihhLmxpbmVTdGFydCgpLGEucG9pbnQobix0KSk7ZWxz
ZSBpZihlJiZ3KWEucG9pbnQobix0KTtlbHNle3ZhciByPXthOnt4Ol8seTpifSxiOnt4Om4seTp0
fX07QyhyKT8od3x8KGEubGluZVN0YXJ0KCksYS5wb2ludChyLmEueCxyLmEueSkpLGEucG9pbnQo
ci5iLngsci5iLnkpLGV8fGEubGluZUVuZCgpLGs9ITEpOmUmJihhLmxpbmVTdGFydCgpLGEucG9p
bnQobix0KSxrPSExKX1fPW4sYj10LHc9ZX12YXIgdixkLG0seSx4LE0sXyxiLHcsUyxrLEU9YSxB
PU5lKCksQz1QZShuLHQsZSxyKSxOPXtwb2ludDpmLGxpbmVTdGFydDpoLGxpbmVFbmQ6Zyxwb2x5
Z29uU3RhcnQ6ZnVuY3Rpb24oKXthPUEsdj1bXSxkPVtdLGs9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rp
b24oKXthPUUsdj1aby5tZXJnZSh2KTt2YXIgdD1jKFtuLHJdKSxlPWsmJnQsdT12Lmxlbmd0aDso
ZXx8dSkmJihhLnBvbHlnb25TdGFydCgpLGUmJihhLmxpbmVTdGFydCgpLHMobnVsbCxudWxsLDEs
YSksYS5saW5lRW5kKCkpLHUmJlNlKHYsaSx0LHMsYSksYS5wb2x5Z29uRW5kKCkpLHY9ZD1tPW51
bGx9fTtyZXR1cm4gTn19ZnVuY3Rpb24gamUobix0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGU9
bihlLHIpLHQoZVswXSxlWzFdKX1yZXR1cm4gbi5pbnZlcnQmJnQuaW52ZXJ0JiYoZS5pbnZlcnQ9
ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT10LmludmVydChlLHIpLGUmJm4uaW52ZXJ0KGVbMF0sZVsx
XSl9KSxlfWZ1bmN0aW9uIEhlKG4pe3ZhciB0PTAsZT1iYS8zLHI9dHIobiksdT1yKHQsZSk7cmV0
dXJuIHUucGFyYWxsZWxzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD1u
WzBdKmJhLzE4MCxlPW5bMV0qYmEvMTgwKTpbMTgwKih0L2JhKSwxODAqKGUvYmEpXX0sdX1mdW5j
dGlvbiBGZShuLHQpe2Z1bmN0aW9uIGUobix0KXt2YXIgZT1NYXRoLnNxcnQoaS0yKnUqTWF0aC5z
aW4odCkpL3U7cmV0dXJuW2UqTWF0aC5zaW4obio9dSksby1lKk1hdGguY29zKG4pXX12YXIgcj1N
YXRoLnNpbihuKSx1PShyK01hdGguc2luKHQpKS8yLGk9MStyKigyKnUtciksbz1NYXRoLnNxcnQo
aSkvdTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1vLXQ7cmV0dXJuW01hdGgu
YXRhbjIobixlKS91LEcoKGktKG4qbitlKmUpKnUqdSkvKDIqdSkpXX0sZX1mdW5jdGlvbiBPZSgp
e2Z1bmN0aW9uIG4obix0KXtBYys9dSpuLXIqdCxyPW4sdT10fXZhciB0LGUscix1O1RjLnBvaW50
PWZ1bmN0aW9uKGksbyl7VGMucG9pbnQ9bix0PXI9aSxlPXU9b30sVGMubGluZUVuZD1mdW5jdGlv
bigpe24odCxlKX19ZnVuY3Rpb24gWWUobix0KXtDYz5uJiYoQ2M9biksbj56YyYmKHpjPW4pLE5j
PnQmJihOYz10KSx0PkxjJiYoTGM9dCl9ZnVuY3Rpb24gSWUoKXtmdW5jdGlvbiBuKG4sdCl7by5w
dXNoKCJNIixuLCIsIix0LGkpfWZ1bmN0aW9uIHQobix0KXtvLnB1c2goIk0iLG4sIiwiLHQpLGEu
cG9pbnQ9ZX1mdW5jdGlvbiBlKG4sdCl7by5wdXNoKCJMIixuLCIsIix0KX1mdW5jdGlvbiByKCl7
YS5wb2ludD1ufWZ1bmN0aW9uIHUoKXtvLnB1c2goIloiKX12YXIgaT1aZSg0LjUpLG89W10sYT17
cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PXR9LGxpbmVFbmQ6cixwb2x5Z29u
U3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2EubGlu
ZUVuZD1yLGEucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24obil7cmV0dXJuIGk9WmUobiks
YX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYoby5sZW5ndGgpe3ZhciBuPW8uam9pbigiIik7cmV0dXJu
IG89W10sbn19fTtyZXR1cm4gYX1mdW5jdGlvbiBaZShuKXtyZXR1cm4ibTAsIituKyJhIituKyIs
IituKyIgMCAxLDEgMCwiKy0yKm4rImEiK24rIiwiK24rIiAwIDEsMSAwLCIrMipuKyJ6In1mdW5j
dGlvbiBWZShuLHQpe3BjKz1uLHZjKz10LCsrZGN9ZnVuY3Rpb24gWGUoKXtmdW5jdGlvbiBuKG4s
cil7dmFyIHU9bi10LGk9ci1lLG89TWF0aC5zcXJ0KHUqdStpKmkpO21jKz1vKih0K24pLzIseWMr
PW8qKGUrcikvMix4Yys9byxWZSh0PW4sZT1yKX12YXIgdCxlO1JjLnBvaW50PWZ1bmN0aW9uKHIs
dSl7UmMucG9pbnQ9bixWZSh0PXIsZT11KX19ZnVuY3Rpb24gJGUoKXtSYy5wb2ludD1WZX1mdW5j
dGlvbiBCZSgpe2Z1bmN0aW9uIG4obix0KXt2YXIgZT1uLXIsaT10LXUsbz1NYXRoLnNxcnQoZSpl
K2kqaSk7bWMrPW8qKHIrbikvMix5Yys9byoodSt0KS8yLHhjKz1vLG89dSpuLXIqdCxNYys9byoo
cituKSxfYys9byoodSt0KSxiYys9MypvLFZlKHI9bix1PXQpfXZhciB0LGUscix1O1JjLnBvaW50
PWZ1bmN0aW9uKGksbyl7UmMucG9pbnQ9bixWZSh0PXI9aSxlPXU9byl9LFJjLmxpbmVFbmQ9ZnVu
Y3Rpb24oKXtuKHQsZSl9fWZ1bmN0aW9uIFdlKG4pe2Z1bmN0aW9uIHQodCxlKXtuLm1vdmVUbyh0
LGUpLG4uYXJjKHQsZSxvLDAsd2EpfWZ1bmN0aW9uIGUodCxlKXtuLm1vdmVUbyh0LGUpLGEucG9p
bnQ9cn1mdW5jdGlvbiByKHQsZSl7bi5saW5lVG8odCxlKX1mdW5jdGlvbiB1KCl7YS5wb2ludD10
fWZ1bmN0aW9uIGkoKXtuLmNsb3NlUGF0aCgpfXZhciBvPTQuNSxhPXtwb2ludDp0LGxpbmVTdGFy
dDpmdW5jdGlvbigpe2EucG9pbnQ9ZX0sbGluZUVuZDp1LHBvbHlnb25TdGFydDpmdW5jdGlvbigp
e2EubGluZUVuZD1pfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YS5saW5lRW5kPXUsYS5wb2ludD10
fSxwb2ludFJhZGl1czpmdW5jdGlvbihuKXtyZXR1cm4gbz1uLGF9LHJlc3VsdDp2fTtyZXR1cm4g
YX1mdW5jdGlvbiBKZShuKXtmdW5jdGlvbiB0KG4pe3JldHVybihhP3I6ZSkobil9ZnVuY3Rpb24g
ZSh0KXtyZXR1cm4gUWUodCxmdW5jdGlvbihlLHIpe2U9bihlLHIpLHQucG9pbnQoZVswXSxlWzFd
KX0pfWZ1bmN0aW9uIHIodCl7ZnVuY3Rpb24gZShlLHIpe2U9bihlLHIpLHQucG9pbnQoZVswXSxl
WzFdKX1mdW5jdGlvbiByKCl7eD0wLzAsUy5wb2ludD1pLHQubGluZVN0YXJ0KCl9ZnVuY3Rpb24g
aShlLHIpe3ZhciBpPWxlKFtlLHJdKSxvPW4oZSxyKTt1KHgsTSx5LF8sYix3LHg9b1swXSxNPW9b
MV0seT1lLF89aVswXSxiPWlbMV0sdz1pWzJdLGEsdCksdC5wb2ludCh4LE0pfWZ1bmN0aW9uIG8o
KXtTLnBvaW50PWUsdC5saW5lRW5kKCl9ZnVuY3Rpb24gYygpe3IoKSxTLnBvaW50PXMsUy5saW5l
RW5kPWx9ZnVuY3Rpb24gcyhuLHQpe2koZj1uLGg9dCksZz14LHA9TSx2PV8sZD1iLG09dyxTLnBv
aW50PWl9ZnVuY3Rpb24gbCgpe3UoeCxNLHksXyxiLHcsZyxwLGYsdixkLG0sYSx0KSxTLmxpbmVF
bmQ9byxvKCl9dmFyIGYsaCxnLHAsdixkLG0seSx4LE0sXyxiLHcsUz17cG9pbnQ6ZSxsaW5lU3Rh
cnQ6cixsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQoKSxT
LmxpbmVTdGFydD1jfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCksUy5saW5l
U3RhcnQ9cn19O3JldHVybiBTfWZ1bmN0aW9uIHUodCxlLHIsYSxjLHMsbCxmLGgsZyxwLHYsZCxt
KXt2YXIgeT1sLXQseD1mLWUsTT15KnkreCp4O2lmKE0+NCppJiZkLS0pe3ZhciBfPWErZyxiPWMr
cCx3PXMrdixTPU1hdGguc3FydChfKl8rYipiK3cqdyksaz1NYXRoLmFzaW4ody89UyksRT11YSh1
YSh3KS0xKTxrYXx8dWEoci1oKTxrYT8ocitoKS8yOk1hdGguYXRhbjIoYixfKSxBPW4oRSxrKSxD
PUFbMF0sTj1BWzFdLHo9Qy10LEw9Ti1lLFQ9eCp6LXkqTDsoVCpUL00+aXx8dWEoKHkqeit4Kkwp
L00tLjUpPi4zfHxvPmEqZytjKnArcyp2KSYmKHUodCxlLHIsYSxjLHMsQyxOLEUsXy89UyxiLz1T
LHcsZCxtKSxtLnBvaW50KEMsTiksdShDLE4sRSxfLGIsdyxsLGYsaCxnLHAsdixkLG0pKX19dmFy
IGk9LjUsbz1NYXRoLmNvcygzMCpBYSksYT0xNjsKK3JldHVybiB0LnByZWNpc2lvbj1mdW5jdGlv
bihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0oaT1uKm4pPjAmJjE2LHQpOk1hdGguc3Fy
dChpKX0sdH1mdW5jdGlvbiBHZShuKXt2YXIgdD1KZShmdW5jdGlvbih0LGUpe3JldHVybiBuKFt0
KkNhLGUqQ2FdKX0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZXIodChuKSl9fWZ1bmN0aW9u
IEtlKG4pe3RoaXMuc3RyZWFtPW59ZnVuY3Rpb24gUWUobix0KXtyZXR1cm57cG9pbnQ6dCxzcGhl
cmU6ZnVuY3Rpb24oKXtuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFy
dCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlv
bigpe24ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQo
KX19fWZ1bmN0aW9uIG5yKG4pe3JldHVybiB0cihmdW5jdGlvbigpe3JldHVybiBufSkoKX1mdW5j
dGlvbiB0cihuKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPWEoblswXSpBYSxuWzFdKkFhKSxbblsw
XSpoK2Mscy1uWzFdKmhdfWZ1bmN0aW9uIGUobil7cmV0dXJuIG49YS5pbnZlcnQoKG5bMF0tYykv
aCwocy1uWzFdKS9oKSxuJiZbblswXSpDYSxuWzFdKkNhXX1mdW5jdGlvbiByKCl7YT1qZShvPWly
KG0seSx4KSxpKTt2YXIgbj1pKHYsZCk7cmV0dXJuIGM9Zy1uWzBdKmgscz1wK25bMV0qaCx1KCl9
ZnVuY3Rpb24gdSgpe3JldHVybiBsJiYobC52YWxpZD0hMSxsPW51bGwpLHR9dmFyIGksbyxhLGMs
cyxsLGY9SmUoZnVuY3Rpb24obix0KXtyZXR1cm4gbj1pKG4sdCksW25bMF0qaCtjLHMtblsxXSpo
XX0pLGg9MTUwLGc9NDgwLHA9MjUwLHY9MCxkPTAsbT0wLHk9MCx4PTAsTT1TYyxfPXd0LGI9bnVs
bCx3PW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiBsJiYobC52YWxpZD0h
MSksbD1lcihNKG8sZihfKG4pKSkpLGwudmFsaWQ9ITAsbH0sdC5jbGlwQW5nbGU9ZnVuY3Rpb24o
bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09bnVsbD09bj8oYj1uLFNjKTpEZSgoYj0rbikq
QWEpLHUoKSk6Yn0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoPyh3PW4sXz1uP1VlKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0pOnd0LHUoKSk6
d30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rbixyKCkp
Omh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStu
WzBdLHA9K25bMV0scigpKTpbZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KHY9blswXSUzNjAqQWEsZD1uWzFdJTM2MCpBYSxyKCkpOlt2KkNhLGQqQ2Fd
fSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uWzBdJTM2
MCpBYSx5PW5bMV0lMzYwKkFhLHg9bi5sZW5ndGg+Mj9uWzJdJTM2MCpBYTowLHIoKSk6W20qQ2Es
eSpDYSx4KkNhXX0sWm8ucmViaW5kKHQsZiwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4g
aT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0
aW9uIGVyKG4pe3JldHVybiBRZShuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KkFhLGUqQWEpfSl9
ZnVuY3Rpb24gcnIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiB1cihuLHQpe3JldHVybltuPmJh
P24td2E6LWJhPm4/bit3YTpuLHRdfWZ1bmN0aW9uIGlyKG4sdCxlKXtyZXR1cm4gbj90fHxlP2pl
KGFyKG4pLGNyKHQsZSkpOmFyKG4pOnR8fGU/Y3IodCxlKTp1cn1mdW5jdGlvbiBvcihuKXtyZXR1
cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gdCs9bixbdD5iYT90LXdhOi1iYT50P3Qrd2E6dCxlXX19
ZnVuY3Rpb24gYXIobil7dmFyIHQ9b3Iobik7cmV0dXJuIHQuaW52ZXJ0PW9yKC1uKSx0fWZ1bmN0
aW9uIGNyKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5jb3Mo
bikqZSxjPU1hdGguc2luKG4pKmUscz1NYXRoLnNpbih0KSxsPXMqcithKnU7cmV0dXJuW01hdGgu
YXRhbjIoYyppLWwqbyxhKnItcyp1KSxHKGwqaStjKm8pXX12YXIgcj1NYXRoLmNvcyhuKSx1PU1h
dGguc2luKG4pLGk9TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVu
Y3Rpb24obix0KXt2YXIgZT1NYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihu
KSplLHM9TWF0aC5zaW4odCksbD1zKmktYypvO3JldHVybltNYXRoLmF0YW4yKGMqaStzKm8sYSpy
K2wqdSksRyhsKnItYSp1KV19LGV9ZnVuY3Rpb24gc3Iobix0KXt2YXIgZT1NYXRoLmNvcyhuKSxy
PU1hdGguc2luKG4pO3JldHVybiBmdW5jdGlvbih1LGksbyxhKXt2YXIgYz1vKnQ7bnVsbCE9dT8o
dT1scihlLHUpLGk9bHIoZSxpKSwobz4wP2k+dTp1PmkpJiYodSs9byp3YSkpOih1PW4rbyp3YSxp
PW4tLjUqYyk7Zm9yKHZhciBzLGw9dTtvPjA/bD5pOmk+bDtsLT1jKWEucG9pbnQoKHM9ZGUoW2Us
LXIqTWF0aC5jb3MobCksLXIqTWF0aC5zaW4obCldKSlbMF0sc1sxXSl9fWZ1bmN0aW9uIGxyKG4s
dCl7dmFyIGU9bGUodCk7ZVswXS09bix2ZShlKTt2YXIgcj1KKC1lWzFdKTtyZXR1cm4oKC1lWzJd
PDA/LXI6cikrMipNYXRoLlBJLWthKSUoMipNYXRoLlBJKX1mdW5jdGlvbiBmcihuLHQsZSl7dmFy
IHI9Wm8ucmFuZ2Uobix0LWthLGUpLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJu
IHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIGhyKG4sdCxlKXt2YXIg
cj1aby5yYW5nZShuLHQta2EsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4g
ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gZ3Iobil7cmV0dXJuIG4u
c291cmNlfWZ1bmN0aW9uIHByKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlvbiB2cihuLHQsZSxy
KXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89TWF0aC5jb3MociksYT1NYXRoLnNp
bihyKSxjPXUqTWF0aC5jb3Mobikscz11Kk1hdGguc2luKG4pLGw9bypNYXRoLmNvcyhlKSxmPW8q
TWF0aC5zaW4oZSksaD0yKk1hdGguYXNpbihNYXRoLnNxcnQodHQoci10KSt1Km8qdHQoZS1uKSkp
LGc9MS9NYXRoLnNpbihoKSxwPWg/ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zaW4obio9aCkqZyxl
PU1hdGguc2luKGgtbikqZyxyPWUqYyt0KmwsdT1lKnMrdCpmLG89ZSppK3QqYTtyZXR1cm5bTWF0
aC5hdGFuMih1LHIpKkNhLE1hdGguYXRhbjIobyxNYXRoLnNxcnQocipyK3UqdSkpKkNhXX06ZnVu
Y3Rpb24oKXtyZXR1cm5bbipDYSx0KkNhXX07cmV0dXJuIHAuZGlzdGFuY2U9aCxwfWZ1bmN0aW9u
IGRyKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBpPU1hdGguc2luKHUqPUFhKSxvPU1hdGguY29zKHUp
LGE9dWEoKG4qPUFhKS10KSxjPU1hdGguY29zKGEpO0RjKz1NYXRoLmF0YW4yKE1hdGguc3FydCgo
YT1vKk1hdGguc2luKGEpKSphKyhhPXIqaS1lKm8qYykqYSksZSppK3IqbypjKSx0PW4sZT1pLHI9
b312YXIgdCxlLHI7UGMucG9pbnQ9ZnVuY3Rpb24odSxpKXt0PXUqQWEsZT1NYXRoLnNpbihpKj1B
YSkscj1NYXRoLmNvcyhpKSxQYy5wb2ludD1ufSxQYy5saW5lRW5kPWZ1bmN0aW9uKCl7UGMucG9p
bnQ9UGMubGluZUVuZD12fX1mdW5jdGlvbiBtcihuLHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1N
YXRoLmNvcyh0KSx1PU1hdGguY29zKGUpLGk9bihyKnUpO3JldHVybltpKnUqTWF0aC5zaW4odCks
aSpNYXRoLnNpbihlKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sZSl7dmFyIHI9TWF0aC5z
cXJ0KG4qbitlKmUpLHU9dChyKSxpPU1hdGguc2luKHUpLG89TWF0aC5jb3ModSk7cmV0dXJuW01h
dGguYXRhbjIobippLHIqbyksTWF0aC5hc2luKHImJmUqaS9yKV19LGV9ZnVuY3Rpb24geXIobix0
KXtmdW5jdGlvbiBlKG4sdCl7bz4wPy1TYStrYT50JiYodD0tU2Era2EpOnQ+U2Eta2EmJih0PVNh
LWthKTt2YXIgZT1vL01hdGgucG93KHUodCksaSk7cmV0dXJuW2UqTWF0aC5zaW4oaSpuKSxvLWUq
TWF0aC5jb3MoaSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1mdW5jdGlvbihuKXtyZXR1cm4gTWF0
aC50YW4oYmEvNCtuLzIpfSxpPW49PT10P01hdGguc2luKG4pOk1hdGgubG9nKHIvTWF0aC5jb3Mo
dCkpL01hdGgubG9nKHUodCkvdShuKSksbz1yKk1hdGgucG93KHUobiksaSkvaTtyZXR1cm4gaT8o
ZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1vLXQscj1CKGkpKk1hdGguc3FydChuKm4rZSpl
KTtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coby9yLDEvaSkp
LVNhXX0sZSk6TXJ9ZnVuY3Rpb24geHIobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9aS10O3Jl
dHVybltlKk1hdGguc2luKHUqbiksaS1lKk1hdGguY29zKHUqbildfXZhciByPU1hdGguY29zKG4p
LHU9bj09PXQ/TWF0aC5zaW4obik6KHItTWF0aC5jb3ModCkpLyh0LW4pLGk9ci91K247cmV0dXJu
IHVhKHUpPGthP3JyOihlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPWktdDtyZXR1cm5bTWF0
aC5hdGFuMihuLGUpL3UsaS1CKHUpKk1hdGguc3FydChuKm4rZSplKV19LGUpfWZ1bmN0aW9uIE1y
KG4sdCl7cmV0dXJuW24sTWF0aC5sb2coTWF0aC50YW4oYmEvNCt0LzIpKV19ZnVuY3Rpb24gX3Io
bil7dmFyIHQsZT1ucihuKSxyPWUuc2NhbGUsdT1lLnRyYW5zbGF0ZSxpPWUuY2xpcEV4dGVudDty
ZXR1cm4gZS5zY2FsZT1mdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVy
biBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7
dmFyIG49dS5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51
bGwpOmU6bn0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3ZhciBvPWkuYXBwbHkoZSxhcmd1bWVu
dHMpO2lmKG89PT1lKXtpZih0PW51bGw9PW4pe3ZhciBhPWJhKnIoKSxjPXUoKTtpKFtbY1swXS1h
LGNbMV0tYV0sW2NbMF0rYSxjWzFdK2FdXSl9fWVsc2UgdCYmKG89bnVsbCk7cmV0dXJuIG99LGUu
Y2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBicihuLHQpe3JldHVybltNYXRoLmxvZyhNYXRoLnRh
bihiYS80K3QvMikpLC1uXX1mdW5jdGlvbiB3cihuKXtyZXR1cm4gblswXX1mdW5jdGlvbiBTcihu
KXtyZXR1cm4gblsxXX1mdW5jdGlvbiBrcihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1bMCwxXSxy
PTIsdT0yO3Q+dTt1Kyspe2Zvcig7cj4xJiZXKG5bZVtyLTJdXSxuW2Vbci0xXV0sblt1XSk8PTA7
KS0tcjtlW3IrK109dX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIEVyKG4sdCl7cmV0dXJu
IG5bMF0tdFswXXx8blsxXS10WzFdfWZ1bmN0aW9uIEFyKG4sdCxlKXtyZXR1cm4oZVswXS10WzBd
KSooblsxXS10WzFdKTwoZVsxXS10WzFdKSooblswXS10WzBdKX1mdW5jdGlvbiBDcihuLHQsZSxy
KXt2YXIgdT1uWzBdLGk9ZVswXSxvPXRbMF0tdSxhPXJbMF0taSxjPW5bMV0scz1lWzFdLGw9dFsx
XS1jLGY9clsxXS1zLGg9KGEqKGMtcyktZioodS1pKSkvKGYqby1hKmwpO3JldHVyblt1K2gqbyxj
K2gqbF19ZnVuY3Rpb24gTnIobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJuISh0
WzBdLWVbMF18fHRbMV0tZVsxXSl9ZnVuY3Rpb24genIoKXtHcih0aGlzKSx0aGlzLmVkZ2U9dGhp
cy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gTHIobil7dmFyIHQ9QmMucG9wKCl8fG5l
dyB6cjtyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBUcihuKXtZcihuKSxWYy5yZW1vdmUobiks
QmMucHVzaChuKSxHcihuKX1mdW5jdGlvbiBxcihuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxyPXQu
Y3ksdT17eDplLHk6cn0saT1uLlAsbz1uLk4sYT1bbl07VHIobik7Zm9yKHZhciBjPWk7Yy5jaXJj
bGUmJnVhKGUtYy5jaXJjbGUueCk8a2EmJnVhKHItYy5jaXJjbGUuY3kpPGthOylpPWMuUCxhLnVu
c2hpZnQoYyksVHIoYyksYz1pO2EudW5zaGlmdChjKSxZcihjKTtmb3IodmFyIHM9bztzLmNpcmNs
ZSYmdWEoZS1zLmNpcmNsZS54KTxrYSYmdWEoci1zLmNpcmNsZS5jeSk8a2E7KW89cy5OLGEucHVz
aChzKSxUcihzKSxzPW87YS5wdXNoKHMpLFlyKHMpO3ZhciBsLGY9YS5sZW5ndGg7Zm9yKGw9MTtm
Pmw7KytsKXM9YVtsXSxjPWFbbC0xXSxCcihzLmVkZ2UsYy5zaXRlLHMuc2l0ZSx1KTtjPWFbMF0s
cz1hW2YtMV0scy5lZGdlPVhyKGMuc2l0ZSxzLnNpdGUsbnVsbCx1KSxPcihjKSxPcihzKX1mdW5j
dGlvbiBScihuKXtmb3IodmFyIHQsZSxyLHUsaT1uLngsbz1uLnksYT1WYy5fO2E7KWlmKHI9RHIo
YSxvKS1pLHI+a2EpYT1hLkw7ZWxzZXtpZih1PWktUHIoYSxvKSwhKHU+a2EpKXtyPi1rYT8odD1h
LlAsZT1hKTp1Pi1rYT8odD1hLGU9YS5OKTp0PWU9YTticmVha31pZighYS5SKXt0PWE7YnJlYWt9
YT1hLlJ9dmFyIGM9THIobik7aWYoVmMuaW5zZXJ0KHQsYyksdHx8ZSl7aWYodD09PWUpcmV0dXJu
IFlyKHQpLGU9THIodC5zaXRlKSxWYy5pbnNlcnQoYyxlKSxjLmVkZ2U9ZS5lZGdlPVhyKHQuc2l0
ZSxjLnNpdGUpLE9yKHQpLE9yKGUpLHZvaWQgMDtpZighZSlyZXR1cm4gYy5lZGdlPVhyKHQuc2l0
ZSxjLnNpdGUpLHZvaWQgMDtZcih0KSxZcihlKTt2YXIgcz10LnNpdGUsbD1zLngsZj1zLnksaD1u
LngtbCxnPW4ueS1mLHA9ZS5zaXRlLHY9cC54LWwsZD1wLnktZixtPTIqKGgqZC1nKnYpLHk9aCpo
K2cqZyx4PXYqditkKmQsTT17eDooZCp5LWcqeCkvbStsLHk6KGgqeC12KnkpL20rZn07QnIoZS5l
ZGdlLHMscCxNKSxjLmVkZ2U9WHIocyxuLG51bGwsTSksZS5lZGdlPVhyKG4scCxudWxsLE0pLE9y
KHQpLE9yKGUpfX1mdW5jdGlvbiBEcihuLHQpe3ZhciBlPW4uc2l0ZSxyPWUueCx1PWUueSxpPXUt
dDtpZighaSlyZXR1cm4gcjt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIg
YT1lLngsYz1lLnkscz1jLXQ7aWYoIXMpcmV0dXJuIGE7dmFyIGw9YS1yLGY9MS9pLTEvcyxoPWwv
cztyZXR1cm4gZj8oLWgrTWF0aC5zcXJ0KGgqaC0yKmYqKGwqbC8oLTIqcyktYytzLzIrdS1pLzIp
KSkvZityOihyK2EpLzJ9ZnVuY3Rpb24gUHIobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gRHIo
ZSx0KTt2YXIgcj1uLnNpdGU7cmV0dXJuIHIueT09PXQ/ci54OjEvMH1mdW5jdGlvbiBVcihuKXt0
aGlzLnNpdGU9bix0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIGpyKG4pe2Zvcih2YXIgdCxlLHIsdSxp
LG8sYSxjLHMsbCxmPW5bMF1bMF0saD1uWzFdWzBdLGc9blswXVsxXSxwPW5bMV1bMV0sdj1aYyxk
PXYubGVuZ3RoO2QtLTspaWYoaT12W2RdLGkmJmkucHJlcGFyZSgpKWZvcihhPWkuZWRnZXMsYz1h
Lmxlbmd0aCxvPTA7Yz5vOylsPWFbb10uZW5kKCkscj1sLngsdT1sLnkscz1hWysrbyVjXS5zdGFy
dCgpLHQ9cy54LGU9cy55LCh1YShyLXQpPmthfHx1YSh1LWUpPmthKSYmKGEuc3BsaWNlKG8sMCxu
ZXcgV3IoJHIoaS5zaXRlLGwsdWEoci1mKTxrYSYmcC11PmthP3t4OmYseTp1YSh0LWYpPGthP2U6
cH06dWEodS1wKTxrYSYmaC1yPmthP3t4OnVhKGUtcCk8a2E/dDpoLHk6cH06dWEoci1oKTxrYSYm
dS1nPmthP3t4OmgseTp1YSh0LWgpPGthP2U6Z306dWEodS1nKTxrYSYmci1mPmthP3t4OnVhKGUt
Zyk8a2E/dDpmLHk6Z306bnVsbCksaS5zaXRlLG51bGwpKSwrK2MpfWZ1bmN0aW9uIEhyKG4sdCl7
cmV0dXJuIHQuYW5nbGUtbi5hbmdsZX1mdW5jdGlvbiBGcigpe0dyKHRoaXMpLHRoaXMueD10aGlz
Lnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBPcihuKXt2YXIgdD1u
LlAsZT1uLk47aWYodCYmZSl7dmFyIHI9dC5zaXRlLHU9bi5zaXRlLGk9ZS5zaXRlO2lmKHIhPT1p
KXt2YXIgbz11LngsYT11LnksYz1yLngtbyxzPXIueS1hLGw9aS54LW8sZj1pLnktYSxoPTIqKGMq
Zi1zKmwpO2lmKCEoaD49LUVhKSl7dmFyIGc9YypjK3MqcyxwPWwqbCtmKmYsdj0oZipnLXMqcCkv
aCxkPShjKnAtbCpnKS9oLGY9ZCthLG09V2MucG9wKCl8fG5ldyBGcjttLmFyYz1uLG0uc2l0ZT11
LG0ueD12K28sbS55PWYrTWF0aC5zcXJ0KHYqditkKmQpLG0uY3k9ZixuLmNpcmNsZT1tO2Zvcih2
YXIgeT1udWxsLHg9JGMuXzt4OylpZihtLnk8eC55fHxtLnk9PT14LnkmJm0ueDw9eC54KXtpZigh
eC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4LlIpe3k9eDticmVha314PXguUn0kYy5p
bnNlcnQoeSxtKSx5fHwoWGM9bSl9fX19ZnVuY3Rpb24gWXIobil7dmFyIHQ9bi5jaXJjbGU7dCYm
KHQuUHx8KFhjPXQuTiksJGMucmVtb3ZlKHQpLFdjLnB1c2godCksR3IodCksbi5jaXJjbGU9bnVs
bCl9ZnVuY3Rpb24gSXIobil7Zm9yKHZhciB0LGU9SWMscj1QZShuWzBdWzBdLG5bMF1bMV0sblsx
XVswXSxuWzFdWzFdKSx1PWUubGVuZ3RoO3UtLTspdD1lW3VdLCghWnIodCxuKXx8IXIodCl8fHVh
KHQuYS54LXQuYi54KTxrYSYmdWEodC5hLnktdC5iLnkpPGthKSYmKHQuYT10LmI9bnVsbCxlLnNw
bGljZSh1LDEpKX1mdW5jdGlvbiBacihuLHQpe3ZhciBlPW4uYjtpZihlKXJldHVybiEwO3ZhciBy
LHUsaT1uLmEsbz10WzBdWzBdLGE9dFsxXVswXSxjPXRbMF1bMV0scz10WzFdWzFdLGw9bi5sLGY9
bi5yLGg9bC54LGc9bC55LHA9Zi54LHY9Zi55LGQ9KGgrcCkvMixtPShnK3YpLzI7aWYodj09PWcp
e2lmKG8+ZHx8ZD49YSlyZXR1cm47aWYoaD5wKXtpZihpKXtpZihpLnk+PXMpcmV0dXJufWVsc2Ug
aT17eDpkLHk6Y307ZT17eDpkLHk6c319ZWxzZXtpZihpKXtpZihpLnk8YylyZXR1cm59ZWxzZSBp
PXt4OmQseTpzfTtlPXt4OmQseTpjfX19ZWxzZSBpZihyPShoLXApLyh2LWcpLHU9bS1yKmQsLTE+
cnx8cj4xKWlmKGg+cCl7aWYoaSl7aWYoaS55Pj1zKXJldHVybn1lbHNlIGk9e3g6KGMtdSkvcix5
OmN9O2U9e3g6KHMtdSkvcix5OnN9fWVsc2V7aWYoaSl7aWYoaS55PGMpcmV0dXJufWVsc2UgaT17
eDoocy11KS9yLHk6c307ZT17eDooYy11KS9yLHk6Y319ZWxzZSBpZih2Pmcpe2lmKGkpe2lmKGku
eD49YSlyZXR1cm59ZWxzZSBpPXt4Om8seTpyKm8rdX07ZT17eDphLHk6ciphK3V9fWVsc2V7aWYo
aSl7aWYoaS54PG8pcmV0dXJufWVsc2UgaT17eDphLHk6ciphK3V9O2U9e3g6byx5OnIqbyt1fX1y
ZXR1cm4gbi5hPWksbi5iPWUsITB9ZnVuY3Rpb24gVnIobix0KXt0aGlzLmw9bix0aGlzLnI9dCx0
aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gWHIobix0LGUscil7dmFyIHU9bmV3IFZyKG4sdCk7
cmV0dXJuIEljLnB1c2godSksZSYmQnIodSxuLHQsZSksciYmQnIodSx0LG4sciksWmNbbi5pXS5l
ZGdlcy5wdXNoKG5ldyBXcih1LG4sdCkpLFpjW3QuaV0uZWRnZXMucHVzaChuZXcgV3IodSx0LG4p
KSx1fWZ1bmN0aW9uICRyKG4sdCxlKXt2YXIgcj1uZXcgVnIobixudWxsKTtyZXR1cm4gci5hPXQs
ci5iPWUsSWMucHVzaChyKSxyfWZ1bmN0aW9uIEJyKG4sdCxlLHIpe24uYXx8bi5iP24ubD09PWU/
bi5iPXI6bi5hPXI6KG4uYT1yLG4ubD10LG4ucj1lKX1mdW5jdGlvbiBXcihuLHQsZSl7dmFyIHI9
bi5hLHU9bi5iO3RoaXMuZWRnZT1uLHRoaXMuc2l0ZT10LHRoaXMuYW5nbGU9ZT9NYXRoLmF0YW4y
KGUueS10LnksZS54LXQueCk6bi5sPT09dD9NYXRoLmF0YW4yKHUueC1yLngsci55LXUueSk6TWF0
aC5hdGFuMihyLngtdS54LHUueS1yLnkpfWZ1bmN0aW9uIEpyKCl7dGhpcy5fPW51bGx9ZnVuY3Rp
b24gR3Iobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1mdW5jdGlvbiBLcihuLHQpe3Zh
ciBlPXQscj10LlIsdT1lLlU7dT91Lkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1y
LGUuUj1yLkwsZS5SJiYoZS5SLlU9ZSksci5MPWV9ZnVuY3Rpb24gUXIobix0KXt2YXIgZT10LHI9
dC5MLHU9ZS5VO3U/dS5MPT09ZT91Lkw9cjp1LlI9cjpuLl89cixyLlU9dSxlLlU9cixlLkw9ci5S
LGUuTCYmKGUuTC5VPWUpLHIuUj1lfWZ1bmN0aW9uIG51KG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1
cm4gbn1mdW5jdGlvbiB0dShuLHQpe3ZhciBlLHIsdSxpPW4uc29ydChldSkucG9wKCk7Zm9yKElj
PVtdLFpjPW5ldyBBcnJheShuLmxlbmd0aCksVmM9bmV3IEpyLCRjPW5ldyBKcjs7KWlmKHU9WGMs
aSYmKCF1fHxpLnk8dS55fHxpLnk9PT11LnkmJmkueDx1LngpKShpLnghPT1lfHxpLnkhPT1yKSYm
KFpjW2kuaV09bmV3IFVyKGkpLFJyKGkpLGU9aS54LHI9aS55KSxpPW4ucG9wKCk7ZWxzZXtpZigh
dSlicmVhaztxcih1LmFyYyl9dCYmKElyKHQpLGpyKHQpKTt2YXIgbz17Y2VsbHM6WmMsZWRnZXM6
SWN9O3JldHVybiBWYz0kYz1JYz1aYz1udWxsLG99ZnVuY3Rpb24gZXUobix0KXtyZXR1cm4gdC55
LW4ueXx8dC54LW4ueH1mdW5jdGlvbiBydShuLHQsZSl7cmV0dXJuKG4ueC1lLngpKih0Lnktbi55
KS0obi54LXQueCkqKGUueS1uLnkpfWZ1bmN0aW9uIHV1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24g
aXUobil7cmV0dXJuIG4ueX1mdW5jdGlvbiBvdSgpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBv
aW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gYXUobix0LGUscix1LGkpe2lmKCFuKHQs
ZSxyLHUsaSkpe3ZhciBvPS41KihlK3UpLGE9LjUqKHIraSksYz10Lm5vZGVzO2NbMF0mJmF1KG4s
Y1swXSxlLHIsbyxhKSxjWzFdJiZhdShuLGNbMV0sbyxyLHUsYSksY1syXSYmYXUobixjWzJdLGUs
YSxvLGkpLGNbM10mJmF1KG4sY1szXSxvLGEsdSxpKX19ZnVuY3Rpb24gY3Uobix0KXtuPVpvLnJn
YihuKSx0PVpvLnJnYih0KTt2YXIgZT1uLnIscj1uLmcsdT1uLmIsaT10LnItZSxvPXQuZy1yLGE9
dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiIjIitkdChNYXRoLnJvdW5kKGUraSpuKSkr
ZHQoTWF0aC5yb3VuZChyK28qbikpK2R0KE1hdGgucm91bmQodSthKm4pKX19ZnVuY3Rpb24gc3Uo
bix0KXt2YXIgZSxyPXt9LHU9e307Zm9yKGUgaW4gbillIGluIHQ/cltlXT1odShuW2VdLHRbZV0p
OnVbZV09bltlXTtmb3IoZSBpbiB0KWUgaW4gbnx8KHVbZV09dFtlXSk7cmV0dXJuIGZ1bmN0aW9u
KG4pe2ZvcihlIGluIHIpdVtlXT1yW2VdKG4pO3JldHVybiB1fX1mdW5jdGlvbiBsdShuLHQpe3Jl
dHVybiB0LT1uPStuLGZ1bmN0aW9uKGUpe3JldHVybiBuK3QqZX19ZnVuY3Rpb24gZnUobix0KXt2
YXIgZSxyLHUsaT1HYy5sYXN0SW5kZXg9S2MubGFzdEluZGV4PTAsbz0tMSxhPVtdLGM9W107Zm9y
KG4rPSIiLHQrPSIiOyhlPUdjLmV4ZWMobikpJiYocj1LYy5leGVjKHQpKTspKHU9ci5pbmRleCk+
aSYmKHU9dC5zdWJzdHJpbmcoaSx1KSxhW29dP2Fbb10rPXU6YVsrK29dPXUpLChlPWVbMF0pPT09
KHI9clswXSk/YVtvXT9hW29dKz1yOmFbKytvXT1yOihhWysrb109bnVsbCxjLnB1c2goe2k6byx4
Omx1KGUscil9KSksaT1LYy5sYXN0SW5kZXg7cmV0dXJuIGk8dC5sZW5ndGgmJih1PXQuc3Vic3Ry
aW5nKGkpLGFbb10/YVtvXSs9dTphWysrb109dSksYS5sZW5ndGg8Mj9jWzBdPyh0PWNbMF0ueCxm
dW5jdGlvbihuKXtyZXR1cm4gdChuKSsiIn0pOmZ1bmN0aW9uKCl7cmV0dXJuIHR9Oih0PWMubGVu
Z3RoLGZ1bmN0aW9uKG4pe2Zvcih2YXIgZSxyPTA7dD5yOysrcilhWyhlPWNbcl0pLmldPWUueChu
KTtyZXR1cm4gYS5qb2luKCIiKX0pfWZ1bmN0aW9uIGh1KG4sdCl7Zm9yKHZhciBlLHI9Wm8uaW50
ZXJwb2xhdG9ycy5sZW5ndGg7LS1yPj0wJiYhKGU9Wm8uaW50ZXJwb2xhdG9yc1tyXShuLHQpKTsp
O3JldHVybiBlfWZ1bmN0aW9uIGd1KG4sdCl7dmFyIGUscj1bXSx1PVtdLGk9bi5sZW5ndGgsbz10
Lmxlbmd0aCxhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKTtmb3IoZT0wO2E+ZTsrK2Upci5w
dXNoKGh1KG5bZV0sdFtlXSkpO2Zvcig7aT5lOysrZSl1W2VdPW5bZV07Zm9yKDtvPmU7KytlKXVb
ZV09dFtlXTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKGU9MDthPmU7KytlKXVbZV09cltlXShuKTty
ZXR1cm4gdX19ZnVuY3Rpb24gcHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAwPj10PzA6
dD49MT8xOm4odCl9fWZ1bmN0aW9uIHZ1KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMS1u
KDEtdCl9fWZ1bmN0aW9uIGR1KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4uNSooLjU+dD9u
KDIqdCk6Mi1uKDItMip0KSl9fWZ1bmN0aW9uIG11KG4pe3JldHVybiBuKm59ZnVuY3Rpb24geXUo
bil7cmV0dXJuIG4qbipufWZ1bmN0aW9uIHh1KG4pe2lmKDA+PW4pcmV0dXJuIDA7aWYobj49MSly
ZXR1cm4gMTt2YXIgdD1uKm4sZT10Km47cmV0dXJuIDQqKC41Pm4/ZTozKihuLXQpK2UtLjc1KX1m
dW5jdGlvbiBNdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQsbil9fWZ1
bmN0aW9uIF91KG4pe3JldHVybiAxLU1hdGguY29zKG4qU2EpfWZ1bmN0aW9uIGJ1KG4pe3JldHVy
biBNYXRoLnBvdygyLDEwKihuLTEpKX1mdW5jdGlvbiB3dShuKXtyZXR1cm4gMS1NYXRoLnNxcnQo
MS1uKm4pfWZ1bmN0aW9uIFN1KG4sdCl7dmFyIGU7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYm
KHQ9LjQ1KSxhcmd1bWVudHMubGVuZ3RoP2U9dC93YSpNYXRoLmFzaW4oMS9uKToobj0xLGU9dC80
KSxmdW5jdGlvbihyKXtyZXR1cm4gMStuKk1hdGgucG93KDIsLTEwKnIpKk1hdGguc2luKChyLWUp
KndhL3QpfX1mdW5jdGlvbiBrdShuKXtyZXR1cm4gbnx8KG49MS43MDE1OCksZnVuY3Rpb24odCl7
cmV0dXJuIHQqdCooKG4rMSkqdC1uKX19ZnVuY3Rpb24gRXUobil7cmV0dXJuIDEvMi43NT5uPzcu
NTYyNSpuKm46Mi8yLjc1Pm4/Ny41NjI1KihuLT0xLjUvMi43NSkqbisuNzU6Mi41LzIuNzU+bj83
LjU2MjUqKG4tPTIuMjUvMi43NSkqbisuOTM3NTo3LjU2MjUqKG4tPTIuNjI1LzIuNzUpKm4rLjk4
NDM3NX1mdW5jdGlvbiBBdShuLHQpe249Wm8uaGNsKG4pLHQ9Wm8uaGNsKHQpO3ZhciBlPW4uaCxy
PW4uYyx1PW4ubCxpPXQuaC1lLG89dC5jLXIsYT10LmwtdTtyZXR1cm4gaXNOYU4obykmJihvPTAs
cj1pc05hTihyKT90LmM6ciksaXNOYU4oaSk/KGk9MCxlPWlzTmFOKGUpP3QuaDplKTppPjE4MD9p
LT0zNjA6LTE4MD5pJiYoaSs9MzYwKSxmdW5jdGlvbihuKXtyZXR1cm4gb3QoZStpKm4scitvKm4s
dSthKm4pKyIifX1mdW5jdGlvbiBDdShuLHQpe249Wm8uaHNsKG4pLHQ9Wm8uaHNsKHQpO3ZhciBl
PW4uaCxyPW4ucyx1PW4ubCxpPXQuaC1lLG89dC5zLXIsYT10LmwtdTtyZXR1cm4gaXNOYU4obykm
JihvPTAscj1pc05hTihyKT90LnM6ciksaXNOYU4oaSk/KGk9MCxlPWlzTmFOKGUpP3QuaDplKTpp
PjE4MD9pLT0zNjA6LTE4MD5pJiYoaSs9MzYwKSxmdW5jdGlvbihuKXtyZXR1cm4gdXQoZStpKm4s
citvKm4sdSthKm4pKyIifX1mdW5jdGlvbiBOdShuLHQpe249Wm8ubGFiKG4pLHQ9Wm8ubGFiKHQp
O3ZhciBlPW4ubCxyPW4uYSx1PW4uYixpPXQubC1lLG89dC5hLXIsYT10LmItdTtyZXR1cm4gZnVu
Y3Rpb24obil7cmV0dXJuIGN0KGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24genUobix0
KXtyZXR1cm4gdC09bixmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChuK3QqZSl9fWZ1bmN0
aW9uIEx1KG4pe3ZhciB0PVtuLmEsbi5iXSxlPVtuLmMsbi5kXSxyPXF1KHQpLHU9VHUodCxlKSxp
PXF1KFJ1KGUsdCwtdSkpfHwwO3RbMF0qZVsxXTxlWzBdKnRbMV0mJih0WzBdKj0tMSx0WzFdKj0t
MSxyKj0tMSx1Kj0tMSksdGhpcy5yb3RhdGU9KHI/TWF0aC5hdGFuMih0WzFdLHRbMF0pOk1hdGgu
YXRhbjIoLWVbMF0sZVsxXSkpKkNhLHRoaXMudHJhbnNsYXRlPVtuLmUsbi5mXSx0aGlzLnNjYWxl
PVtyLGldLHRoaXMuc2tldz1pP01hdGguYXRhbjIodSxpKSpDYTowfWZ1bmN0aW9uIFR1KG4sdCl7
cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV19ZnVuY3Rpb24gcXUobil7dmFyIHQ9TWF0aC5zcXJ0
KFR1KG4sbikpO3JldHVybiB0JiYoblswXS89dCxuWzFdLz10KSx0fWZ1bmN0aW9uIFJ1KG4sdCxl
KXtyZXR1cm4gblswXSs9ZSp0WzBdLG5bMV0rPWUqdFsxXSxufWZ1bmN0aW9uIER1KG4sdCl7dmFy
IGUscj1bXSx1PVtdLGk9Wm8udHJhbnNmb3JtKG4pLG89Wm8udHJhbnNmb3JtKHQpLGE9aS50cmFu
c2xhdGUsYz1vLnRyYW5zbGF0ZSxzPWkucm90YXRlLGw9by5yb3RhdGUsZj1pLnNrZXcsaD1vLnNr
ZXcsZz1pLnNjYWxlLHA9by5zY2FsZTtyZXR1cm4gYVswXSE9Y1swXXx8YVsxXSE9Y1sxXT8oci5w
dXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIiksdS5wdXNoKHtpOjEseDpsdShhWzBd
LGNbMF0pfSx7aTozLHg6bHUoYVsxXSxjWzFdKX0pKTpjWzBdfHxjWzFdP3IucHVzaCgidHJhbnNs
YXRlKCIrYysiKSIpOnIucHVzaCgiIikscyE9bD8ocy1sPjE4MD9sKz0zNjA6bC1zPjE4MCYmKHMr
PTM2MCksdS5wdXNoKHtpOnIucHVzaChyLnBvcCgpKyJyb3RhdGUoIixudWxsLCIpIiktMix4Omx1
KHMsbCl9KSk6bCYmci5wdXNoKHIucG9wKCkrInJvdGF0ZSgiK2wrIikiKSxmIT1oP3UucHVzaCh7
aTpyLnB1c2goci5wb3AoKSsic2tld1goIixudWxsLCIpIiktMix4Omx1KGYsaCl9KTpoJiZyLnB1
c2goci5wb3AoKSsic2tld1goIitoKyIpIiksZ1swXSE9cFswXXx8Z1sxXSE9cFsxXT8oZT1yLnB1
c2goci5wb3AoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIiksdS5wdXNoKHtpOmUtNCx4Omx1
KGdbMF0scFswXSl9LHtpOmUtMix4Omx1KGdbMV0scFsxXSl9KSk6KDEhPXBbMF18fDEhPXBbMV0p
JiZyLnB1c2goci5wb3AoKSsic2NhbGUoIitwKyIpIiksZT11Lmxlbmd0aCxmdW5jdGlvbihuKXtm
b3IodmFyIHQsaT0tMTsrK2k8ZTspclsodD11W2ldKS5pXT10Lngobik7cmV0dXJuIHIuam9pbigi
Iil9fWZ1bmN0aW9uIFB1KG4sdCl7cmV0dXJuIHQ9dC0obj0rbik/MS8odC1uKTowLGZ1bmN0aW9u
KGUpe3JldHVybihlLW4pKnR9fWZ1bmN0aW9uIFV1KG4sdCl7cmV0dXJuIHQ9dC0obj0rbik/MS8o
dC1uKTowLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKGUtbikqdCkp
fX1mdW5jdGlvbiBqdShuKXtmb3IodmFyIHQ9bi5zb3VyY2UsZT1uLnRhcmdldCxyPUZ1KHQsZSks
dT1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsdS5wdXNoKHQpO2Zvcih2YXIgaT11Lmxlbmd0aDtlIT09
cjspdS5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIHV9ZnVuY3Rpb24gSHUobil7Zm9y
KHZhciB0PVtdLGU9bi5wYXJlbnQ7bnVsbCE9ZTspdC5wdXNoKG4pLG49ZSxlPWUucGFyZW50O3Jl
dHVybiB0LnB1c2gobiksdH1mdW5jdGlvbiBGdShuLHQpe2lmKG49PT10KXJldHVybiBuO2Zvcih2
YXIgZT1IdShuKSxyPUh1KHQpLHU9ZS5wb3AoKSxpPXIucG9wKCksbz1udWxsO3U9PT1pOylvPXUs
dT1lLnBvcCgpLGk9ci5wb3AoKTtyZXR1cm4gb31mdW5jdGlvbiBPdShuKXtuLmZpeGVkfD0yfWZ1
bmN0aW9uIFl1KG4pe24uZml4ZWQmPS03fWZ1bmN0aW9uIEl1KG4pe24uZml4ZWR8PTQsbi5weD1u
Lngsbi5weT1uLnl9ZnVuY3Rpb24gWnUobil7bi5maXhlZCY9LTV9ZnVuY3Rpb24gVnUobix0LGUp
e3ZhciByPTAsdT0wO2lmKG4uY2hhcmdlPTAsIW4ubGVhZilmb3IodmFyIGksbz1uLm5vZGVzLGE9
by5sZW5ndGgsYz0tMTsrK2M8YTspaT1vW2NdLG51bGwhPWkmJihWdShpLHQsZSksbi5jaGFyZ2Ur
PWkuY2hhcmdlLHIrPWkuY2hhcmdlKmkuY3gsdSs9aS5jaGFyZ2UqaS5jeSk7aWYobi5wb2ludCl7
bi5sZWFmfHwobi5wb2ludC54Kz1NYXRoLnJhbmRvbSgpLS41LG4ucG9pbnQueSs9TWF0aC5yYW5k
b20oKS0uNSk7dmFyIHM9dCplW24ucG9pbnQuaW5kZXhdO24uY2hhcmdlKz1uLnBvaW50Q2hhcmdl
PXMscis9cypuLnBvaW50LngsdSs9cypuLnBvaW50Lnl9bi5jeD1yL24uY2hhcmdlLG4uY3k9dS9u
LmNoYXJnZX1mdW5jdGlvbiBYdShuLHQpe3JldHVybiBaby5yZWJpbmQobix0LCJzb3J0IiwiY2hp
bGRyZW4iLCJ2YWx1ZSIpLG4ubm9kZXM9bixuLmxpbmtzPUt1LG59ZnVuY3Rpb24gJHUobix0KXtm
b3IodmFyIGU9W25dO251bGwhPShuPWUucG9wKCkpOylpZih0KG4pLCh1PW4uY2hpbGRyZW4pJiYo
cj11Lmxlbmd0aCkpZm9yKHZhciByLHU7LS1yPj0wOyllLnB1c2godVtyXSl9ZnVuY3Rpb24gQnUo
bix0KXtmb3IodmFyIGU9W25dLHI9W107bnVsbCE9KG49ZS5wb3AoKSk7KWlmKHIucHVzaChuKSwo
aT1uLmNoaWxkcmVuKSYmKHU9aS5sZW5ndGgpKWZvcih2YXIgdSxpLG89LTE7KytvPHU7KWUucHVz
aChpW29dKTtmb3IoO251bGwhPShuPXIucG9wKCkpOyl0KG4pfWZ1bmN0aW9uIFd1KG4pe3JldHVy
biBuLmNoaWxkcmVufWZ1bmN0aW9uIEp1KG4pe3JldHVybiBuLnZhbHVlfWZ1bmN0aW9uIEd1KG4s
dCl7cmV0dXJuIHQudmFsdWUtbi52YWx1ZX1mdW5jdGlvbiBLdShuKXtyZXR1cm4gWm8ubWVyZ2Uo
bi5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4uY2hpbGRyZW58fFtdKS5tYXAoZnVuY3Rpb24odCl7
cmV0dXJue3NvdXJjZTpuLHRhcmdldDp0fX0pfSkpfWZ1bmN0aW9uIFF1KG4pe3JldHVybiBuLnh9
ZnVuY3Rpb24gbmkobil7cmV0dXJuIG4ueX1mdW5jdGlvbiB0aShuLHQsZSl7bi55MD10LG4ueT1l
fWZ1bmN0aW9uIGVpKG4pe3JldHVybiBaby5yYW5nZShuLmxlbmd0aCl9ZnVuY3Rpb24gcmkobil7
Zm9yKHZhciB0PS0xLGU9blswXS5sZW5ndGgscj1bXTsrK3Q8ZTspclt0XT0wO3JldHVybiByfWZ1
bmN0aW9uIHVpKG4pe2Zvcih2YXIgdCxlPTEscj0wLHU9blswXVsxXSxpPW4ubGVuZ3RoO2k+ZTsr
K2UpKHQ9bltlXVsxXSk+dSYmKHI9ZSx1PXQpO3JldHVybiByfWZ1bmN0aW9uIGlpKG4pe3JldHVy
biBuLnJlZHVjZShvaSwwKX1mdW5jdGlvbiBvaShuLHQpe3JldHVybiBuK3RbMV19ZnVuY3Rpb24g
YWkobix0KXtyZXR1cm4gY2kobixNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4y
KzEpKX1mdW5jdGlvbiBjaShuLHQpe2Zvcih2YXIgZT0tMSxyPStuWzBdLHU9KG5bMV0tcikvdCxp
PVtdOysrZTw9dDspaVtlXT11KmUrcjtyZXR1cm4gaX1mdW5jdGlvbiBzaShuKXtyZXR1cm5bWm8u
bWluKG4pLFpvLm1heChuKV19ZnVuY3Rpb24gbGkobix0KXtyZXR1cm4gbi52YWx1ZS10LnZhbHVl
fWZ1bmN0aW9uIGZpKG4sdCl7dmFyIGU9bi5fcGFja19uZXh0O24uX3BhY2tfbmV4dD10LHQuX3Bh
Y2tfcHJldj1uLHQuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10fWZ1bmN0aW9uIGhpKG4sdCl7
bi5fcGFja19uZXh0PXQsdC5fcGFja19wcmV2PW59ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10Lngt
bi54LHI9dC55LW4ueSx1PW4ucit0LnI7cmV0dXJuLjk5OSp1KnU+ZSplK3Iqcn1mdW5jdGlvbiBw
aShuKXtmdW5jdGlvbiB0KG4pe2w9TWF0aC5taW4obi54LW4ucixsKSxmPU1hdGgubWF4KG4ueCtu
LnIsZiksaD1NYXRoLm1pbihuLnktbi5yLGgpLGc9TWF0aC5tYXgobi55K24ucixnKX1pZigoZT1u
LmNoaWxkcmVuKSYmKHM9ZS5sZW5ndGgpKXt2YXIgZSxyLHUsaSxvLGEsYyxzLGw9MS8wLGY9LTEv
MCxoPTEvMCxnPS0xLzA7aWYoZS5mb3JFYWNoKHZpKSxyPWVbMF0sci54PS1yLnIsci55PTAsdChy
KSxzPjEmJih1PWVbMV0sdS54PXUucix1Lnk9MCx0KHUpLHM+MikpZm9yKGk9ZVsyXSx5aShyLHUs
aSksdChpKSxmaShyLGkpLHIuX3BhY2tfcHJldj1pLGZpKGksdSksdT1yLl9wYWNrX25leHQsbz0z
O3M+bztvKyspe3lpKHIsdSxpPWVbb10pO3ZhciBwPTAsdj0xLGQ9MTtmb3IoYT11Ll9wYWNrX25l
eHQ7YSE9PXU7YT1hLl9wYWNrX25leHQsdisrKWlmKGdpKGEsaSkpe3A9MTticmVha31pZigxPT1w
KWZvcihjPXIuX3BhY2tfcHJldjtjIT09YS5fcGFja19wcmV2JiYhZ2koYyxpKTtjPWMuX3BhY2tf
cHJldixkKyspO3A/KGQ+dnx8dj09ZCYmdS5yPHIucj9oaShyLHU9YSk6aGkocj1jLHUpLG8tLSk6
KGZpKHIsaSksdT1pLHQoaSkpfXZhciBtPShsK2YpLzIseT0oaCtnKS8yLHg9MDtmb3Iobz0wO3M+
bztvKyspaT1lW29dLGkueC09bSxpLnktPXkseD1NYXRoLm1heCh4LGkucitNYXRoLnNxcnQoaS54
KmkueCtpLnkqaS55KSk7bi5yPXgsZS5mb3JFYWNoKGRpKX19ZnVuY3Rpb24gdmkobil7bi5fcGFj
a19uZXh0PW4uX3BhY2tfcHJldj1ufWZ1bmN0aW9uIGRpKG4pe2RlbGV0ZSBuLl9wYWNrX25leHQs
ZGVsZXRlIG4uX3BhY2tfcHJldn1mdW5jdGlvbiBtaShuLHQsZSxyKXt2YXIgdT1uLmNoaWxkcmVu
O2lmKG4ueD10Kz1yKm4ueCxuLnk9ZSs9cipuLnksbi5yKj1yLHUpZm9yKHZhciBpPS0xLG89dS5s
ZW5ndGg7KytpPG87KW1pKHVbaV0sdCxlLHIpfWZ1bmN0aW9uIHlpKG4sdCxlKXt2YXIgcj1uLnIr
ZS5yLHU9dC54LW4ueCxpPXQueS1uLnk7aWYociYmKHV8fGkpKXt2YXIgbz10LnIrZS5yLGE9dSp1
K2kqaTtvKj1vLHIqPXI7dmFyIGM9LjUrKHItbykvKDIqYSkscz1NYXRoLnNxcnQoTWF0aC5tYXgo
MCwyKm8qKHIrYSktKHItPWEpKnItbypvKSkvKDIqYSk7ZS54PW4ueCtjKnUrcyppLGUueT1uLnkr
YyppLXMqdX1lbHNlIGUueD1uLngrcixlLnk9bi55fWZ1bmN0aW9uIHhpKG4sdCl7cmV0dXJuIG4u
cGFyZW50PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5jaGlsZHJlbjtyZXR1
cm4gdC5sZW5ndGg/dFswXTpuLnR9ZnVuY3Rpb24gX2kobil7dmFyIHQsZT1uLmNoaWxkcmVuO3Jl
dHVybih0PWUubGVuZ3RoKT9lW3QtMV06bi50fWZ1bmN0aW9uIGJpKG4sdCxlKXt2YXIgcj1lLyh0
Lmktbi5pKTt0LmMtPXIsdC5zKz1lLG4uYys9cix0LnorPWUsdC5tKz1lfWZ1bmN0aW9uIHdpKG4p
e2Zvcih2YXIgdCxlPTAscj0wLHU9bi5jaGlsZHJlbixpPXUubGVuZ3RoOy0taT49MDspdD11W2ld
LHQueis9ZSx0Lm0rPWUsZSs9dC5zKyhyKz10LmMpfWZ1bmN0aW9uIFNpKG4sdCxlKXtyZXR1cm4g
bi5hLnBhcmVudD09PXQucGFyZW50P24uYTplfWZ1bmN0aW9uIGtpKG4pe3JldHVybiAxK1pvLm1h
eChuLGZ1bmN0aW9uKG4pe3JldHVybiBuLnl9KX1mdW5jdGlvbiBFaShuKXtyZXR1cm4gbi5yZWR1
Y2UoZnVuY3Rpb24obix0KXtyZXR1cm4gbit0Lnh9LDApL24ubGVuZ3RofWZ1bmN0aW9uIEFpKG4p
e3ZhciB0PW4uY2hpbGRyZW47cmV0dXJuIHQmJnQubGVuZ3RoP0FpKHRbMF0pOm59ZnVuY3Rpb24g
Q2kobil7dmFyIHQsZT1uLmNoaWxkcmVuO3JldHVybiBlJiYodD1lLmxlbmd0aCk/Q2koZVt0LTFd
KTpufWZ1bmN0aW9uIE5pKG4pe3JldHVybnt4Om4ueCx5Om4ueSxkeDpuLmR4LGR5Om4uZHl9fWZ1
bmN0aW9uIHppKG4sdCl7dmFyIGU9bi54K3RbM10scj1uLnkrdFswXSx1PW4uZHgtdFsxXS10WzNd
LGk9bi5keS10WzBdLXRbMl07cmV0dXJuIDA+dSYmKGUrPXUvMix1PTApLDA+aSYmKHIrPWkvMixp
PTApLHt4OmUseTpyLGR4OnUsZHk6aX19ZnVuY3Rpb24gTGkobil7dmFyIHQ9blswXSxlPW5bbi5s
ZW5ndGgtMV07cmV0dXJuIGU+dD9bdCxlXTpbZSx0XX1mdW5jdGlvbiBUaShuKXtyZXR1cm4gbi5y
YW5nZUV4dGVudD9uLnJhbmdlRXh0ZW50KCk6TGkobi5yYW5nZSgpKX1mdW5jdGlvbiBxaShuLHQs
ZSxyKXt2YXIgdT1lKG5bMF0sblsxXSksaT1yKHRbMF0sdFsxXSk7cmV0dXJuIGZ1bmN0aW9uKG4p
e3JldHVybiBpKHUobikpfX1mdW5jdGlvbiBSaShuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLTEs
aT1uW3JdLG89blt1XTtyZXR1cm4gaT5vJiYoZT1yLHI9dSx1PWUsZT1pLGk9byxvPWUpLG5bcl09
dC5mbG9vcihpKSxuW3VdPXQuY2VpbChvKSxufWZ1bmN0aW9uIERpKG4pe3JldHVybiBuP3tmbG9v
cjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5mbG9vcih0L24pKm59LGNlaWw6ZnVuY3Rpb24odCl7
cmV0dXJuIE1hdGguY2VpbCh0L24pKm59fTpzc31mdW5jdGlvbiBQaShuLHQsZSxyKXt2YXIgdT1b
XSxpPVtdLG89MCxhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xO2ZvcihuW2FdPG5bMF0m
JihuPW4uc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK288PWE7KXUu
cHVzaChlKG5bby0xXSxuW29dKSksaS5wdXNoKHIodFtvLTFdLHRbb10pKTtyZXR1cm4gZnVuY3Rp
b24odCl7dmFyIGU9Wm8uYmlzZWN0KG4sdCwxLGEpLTE7cmV0dXJuIGlbZV0odVtlXSh0KSl9fWZ1
bmN0aW9uIFVpKG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgdT1NYXRoLm1pbihuLmxlbmd0aCx0
Lmxlbmd0aCk+Mj9QaTpxaSxjPXI/VXU6UHU7cmV0dXJuIG89dShuLHQsYyxlKSxhPXUodCxuLGMs
aHUpLGl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gbyhuKX12YXIgbyxhO3JldHVybiBpLmludmVydD1m
dW5jdGlvbihuKXtyZXR1cm4gYShuKX0saS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KG49dC5tYXAoTnVtYmVyKSx1KCkpOm59LGkucmFuZ2U9ZnVuY3Rpb24obil7
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bix1KCkpOnR9LGkucmFuZ2VSb3VuZD1mdW5jdGlv
bihuKXtyZXR1cm4gaS5yYW5nZShuKS5pbnRlcnBvbGF0ZSh6dSl9LGkuY2xhbXA9ZnVuY3Rpb24o
bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix1KCkpOnJ9LGkuaW50ZXJwb2xhdGU9ZnVu
Y3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkpOmV9LGkudGlja3M9ZnVu
Y3Rpb24odCl7cmV0dXJuIE9pKG4sdCl9LGkudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVy
biBZaShuLHQsZSl9LGkubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gSGkobix0KSx1KCl9LGkuY29w
eT1mdW5jdGlvbigpe3JldHVybiBVaShuLHQsZSxyKX0sdSgpfWZ1bmN0aW9uIGppKG4sdCl7cmV0
dXJuIFpvLnJlYmluZChuLHQsInJhbmdlIiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlIiwiY2xh
bXAiKX1mdW5jdGlvbiBIaShuLHQpe3JldHVybiBSaShuLERpKEZpKG4sdClbMl0pKX1mdW5jdGlv
biBGaShuLHQpe251bGw9PXQmJih0PTEwKTt2YXIgZT1MaShuKSxyPWVbMV0tZVswXSx1PU1hdGgu
cG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coci90KS9NYXRoLkxOMTApKSxpPXQvcip1O3JldHVy
bi4xNT49aT91Kj0xMDouMzU+PWk/dSo9NTouNzU+PWkmJih1Kj0yKSxlWzBdPU1hdGguY2VpbChl
WzBdL3UpKnUsZVsxXT1NYXRoLmZsb29yKGVbMV0vdSkqdSsuNSp1LGVbMl09dSxlfWZ1bmN0aW9u
IE9pKG4sdCl7cmV0dXJuIFpvLnJhbmdlLmFwcGx5KFpvLEZpKG4sdCkpfWZ1bmN0aW9uIFlpKG4s
dCxlKXt2YXIgcj1GaShuLHQpO2lmKGUpe3ZhciB1PUdhLmV4ZWMoZSk7aWYodS5zaGlmdCgpLCJz
Ij09PXVbOF0pe3ZhciBpPVpvLmZvcm1hdFByZWZpeChNYXRoLm1heCh1YShyWzBdKSx1YShyWzFd
KSkpO3JldHVybiB1WzddfHwodVs3XT0iLiIrSWkoaS5zY2FsZShyWzJdKSkpLHVbOF09ImYiLGU9
Wm8uZm9ybWF0KHUuam9pbigiIikpLGZ1bmN0aW9uKG4pe3JldHVybiBlKGkuc2NhbGUobikpK2ku
c3ltYm9sfX11WzddfHwodVs3XT0iLiIrWmkodVs4XSxyKSksZT11LmpvaW4oIiIpfWVsc2UgZT0i
LC4iK0lpKHJbMl0pKyJmIjtyZXR1cm4gWm8uZm9ybWF0KGUpfWZ1bmN0aW9uIElpKG4pe3JldHVy
bi1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCsuMDEpfWZ1bmN0aW9uIFppKG4sdCl7
dmFyIGU9SWkodFsyXSk7cmV0dXJuIG4gaW4gbHM/TWF0aC5hYnMoZS1JaShNYXRoLm1heCh1YSh0
WzBdKSx1YSh0WzFdKSkpKSsgKygiZSIhPT1uKTplLTIqKCIlIj09PW4pfWZ1bmN0aW9uIFZpKG4s
dCxlLHIpe2Z1bmN0aW9uIHUobil7cmV0dXJuKGU/TWF0aC5sb2coMD5uPzA6bik6LU1hdGgubG9n
KG4+MD8wOi1uKSkvTWF0aC5sb2codCl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gZT9NYXRoLnBvdyh0
LG4pOi1NYXRoLnBvdyh0LC1uKX1mdW5jdGlvbiBvKHQpe3JldHVybiBuKHUodCkpfXJldHVybiBv
LmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLmludmVydCh0KSl9LG8uZG9tYWluPWZ1bmN0
aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXRbMF0+PTAsbi5kb21haW4oKHI9dC5t
YXAoTnVtYmVyKSkubWFwKHUpKSxvKTpyfSxvLmJhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KHQ9K2Usbi5kb21haW4oci5tYXAodSkpLG8pOnR9LG8ubmljZT1mdW5jdGlv
bigpe3ZhciB0PVJpKHIubWFwKHUpLGU/TWF0aDpocyk7cmV0dXJuIG4uZG9tYWluKHQpLHI9dC5t
YXAoaSksb30sby50aWNrcz1mdW5jdGlvbigpe3ZhciBuPUxpKHIpLG89W10sYT1uWzBdLGM9blsx
XSxzPU1hdGguZmxvb3IodShhKSksbD1NYXRoLmNlaWwodShjKSksZj10JTE/Mjp0O2lmKGlzRmlu
aXRlKGwtcykpe2lmKGUpe2Zvcig7bD5zO3MrKylmb3IodmFyIGg9MTtmPmg7aCsrKW8ucHVzaChp
KHMpKmgpO28ucHVzaChpKHMpKX1lbHNlIGZvcihvLnB1c2goaShzKSk7cysrPGw7KWZvcih2YXIg
aD1mLTE7aD4wO2gtLSlvLnB1c2goaShzKSpoKTtmb3Iocz0wO29bc108YTtzKyspO2ZvcihsPW8u
bGVuZ3RoO29bbC0xXT5jO2wtLSk7bz1vLnNsaWNlKHMsbCl9cmV0dXJuIG99LG8udGlja0Zvcm1h
dD1mdW5jdGlvbihuLHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBmczthcmd1bWVudHMu
bGVuZ3RoPDI/dD1mczoiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Wm8uZm9ybWF0KHQpKTt2YXIg
cixhPU1hdGgubWF4KC4xLG4vby50aWNrcygpLmxlbmd0aCksYz1lPyhyPTFlLTEyLE1hdGguY2Vp
bCk6KHI9LTFlLTEyLE1hdGguZmxvb3IpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi9pKGMo
dShuKStyKSk8PWE/dChuKToiIn19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBWaShuLmNvcHko
KSx0LGUscil9LGppKG8sbil9ZnVuY3Rpb24gWGkobix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJu
IG4odSh0KSl9dmFyIHU9JGkodCksaT0kaSgxL3QpO3JldHVybiByLmludmVydD1mdW5jdGlvbih0
KXtyZXR1cm4gaShuLmludmVydCh0KSl9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhuLmRvbWFpbigoZT10Lm1hcChOdW1iZXIpKS5tYXAodSkpLHIpOmV9LHIu
dGlja3M9ZnVuY3Rpb24obil7cmV0dXJuIE9pKGUsbil9LHIudGlja0Zvcm1hdD1mdW5jdGlvbihu
LHQpe3JldHVybiBZaShlLG4sdCl9LHIubmljZT1mdW5jdGlvbihuKXtyZXR1cm4gci5kb21haW4o
SGkoZSxuKSl9LHIuZXhwb25lbnQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/
KHU9JGkodD1vKSxpPSRpKDEvdCksbi5kb21haW4oZS5tYXAodSkpLHIpOnR9LHIuY29weT1mdW5j
dGlvbigpe3JldHVybiBYaShuLmNvcHkoKSx0LGUpfSxqaShyLG4pfWZ1bmN0aW9uICRpKG4pe3Jl
dHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD50Py1NYXRoLnBvdygtdCxuKTpNYXRoLnBvdyh0LG4p
fX1mdW5jdGlvbiBCaShuLHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGlbKCh1LmdldChlKXx8KCJy
YW5nZSI9PT10LnQ/dS5zZXQoZSxuLnB1c2goZSkpOjAvMCkpLTEpJWkubGVuZ3RoXX1mdW5jdGlv
biByKHQsZSl7cmV0dXJuIFpvLnJhbmdlKG4ubGVuZ3RoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJu
IHQrZSpufSl9dmFyIHUsaSxhO3JldHVybiBlLmRvbWFpbj1mdW5jdGlvbihyKXtpZighYXJndW1l
bnRzLmxlbmd0aClyZXR1cm4gbjtuPVtdLHU9bmV3IG87Zm9yKHZhciBpLGE9LTEsYz1yLmxlbmd0
aDsrK2E8YzspdS5oYXMoaT1yW2FdKXx8dS5zZXQoaSxuLnB1c2goaSkpO3JldHVybiBlW3QudF0u
YXBwbHkoZSx0LmEpfSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro
PyhpPW4sYT0wLHQ9e3Q6InJhbmdlIixhOmFyZ3VtZW50c30sZSk6aX0sZS5yYW5nZVBvaW50cz1m
dW5jdGlvbih1LG8pe2FyZ3VtZW50cy5sZW5ndGg8MiYmKG89MCk7dmFyIGM9dVswXSxzPXVbMV0s
bD0ocy1jKS8oTWF0aC5tYXgoMSxuLmxlbmd0aC0xKStvKTtyZXR1cm4gaT1yKG4ubGVuZ3RoPDI/
KGMrcykvMjpjK2wqby8yLGwpLGE9MCx0PXt0OiJyYW5nZVBvaW50cyIsYTphcmd1bWVudHN9LGV9
LGUucmFuZ2VCYW5kcz1mdW5jdGlvbih1LG8sYyl7YXJndW1lbnRzLmxlbmd0aDwyJiYobz0wKSxh
cmd1bWVudHMubGVuZ3RoPDMmJihjPW8pO3ZhciBzPXVbMV08dVswXSxsPXVbcy0wXSxmPXVbMS1z
XSxoPShmLWwpLyhuLmxlbmd0aC1vKzIqYyk7cmV0dXJuIGk9cihsK2gqYyxoKSxzJiZpLnJldmVy
c2UoKSxhPWgqKDEtbyksdD17dDoicmFuZ2VCYW5kcyIsYTphcmd1bWVudHN9LGV9LGUucmFuZ2VS
b3VuZEJhbmRzPWZ1bmN0aW9uKHUsbyxjKXthcmd1bWVudHMubGVuZ3RoPDImJihvPTApLGFyZ3Vt
ZW50cy5sZW5ndGg8MyYmKGM9byk7dmFyIHM9dVsxXTx1WzBdLGw9dVtzLTBdLGY9dVsxLXNdLGg9
TWF0aC5mbG9vcigoZi1sKS8obi5sZW5ndGgtbysyKmMpKSxnPWYtbC0obi5sZW5ndGgtbykqaDty
ZXR1cm4gaT1yKGwrTWF0aC5yb3VuZChnLzIpLGgpLHMmJmkucmV2ZXJzZSgpLGE9TWF0aC5yb3Vu
ZChoKigxLW8pKSx0PXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdl
QmFuZD1mdW5jdGlvbigpe3JldHVybiBhfSxlLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJu
IExpKHQuYVswXSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCaShuLHQpfSxlLmRvbWFpbihu
KX1mdW5jdGlvbiBXaShlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbj0wLHQ9ci5sZW5ndGg7Zm9yKG89
W107KytuPHQ7KW9bbi0xXT1aby5xdWFudGlsZShlLG4vdCk7cmV0dXJuIGl9ZnVuY3Rpb24gaShu
KXtyZXR1cm4gaXNOYU4obj0rbik/dm9pZCAwOnJbWm8uYmlzZWN0KG8sbildfXZhciBvO3JldHVy
biBpLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLmZpbHRl
cih0KS5zb3J0KG4pLHUoKSk6ZX0saS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8ocj1uLHUoKSk6cn0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gb30saS5p
bnZlcnRFeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIG49ci5pbmRleE9mKG4pLDA+bj9bMC8wLDAv
MF06W24+MD9vW24tMV06ZVswXSxuPG8ubGVuZ3RoP29bbl06ZVtlLmxlbmd0aC0xXV19LGkuY29w
eT1mdW5jdGlvbigpe3JldHVybiBXaShlLHIpfSx1KCl9ZnVuY3Rpb24gSmkobix0LGUpe2Z1bmN0
aW9uIHIodCl7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbihvLE1hdGguZmxvb3IoaSoodC1u
KSkpKV19ZnVuY3Rpb24gdSgpe3JldHVybiBpPWUubGVuZ3RoLyh0LW4pLG89ZS5sZW5ndGgtMSxy
fXZhciBpLG87cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoPyhuPStlWzBdLHQ9K2VbZS5sZW5ndGgtMV0sdSgpKTpbbix0XX0sci5yYW5nZT1mdW5jdGlv
bihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHUoKSk6ZX0sci5pbnZlcnRFeHRlbnQ9
ZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5pbmRleE9mKHQpLHQ9MD50PzAvMDp0L2krbixbdCx0KzEv
aV19LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBKaShuLHQsZSl9LHUoKX1mdW5jdGlvbiBHaShu
LHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGU+PWU/dFtaby5iaXNlY3QobixlKV06dm9pZCAwfXJl
dHVybiBlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUp
Om59LGUucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixlKTp0
fSxlLmludmVydEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gZT10LmluZGV4T2YoZSksW25bZS0x
XSxuW2VdXX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdpKG4sdCl9LGV9ZnVuY3Rpb24gS2ko
bil7ZnVuY3Rpb24gdChuKXtyZXR1cm4rbn1yZXR1cm4gdC5pbnZlcnQ9dCx0LmRvbWFpbj10LnJh
bmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUubWFwKHQpLHQpOm59
LHQudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIE9pKG4sdCl9LHQudGlja0Zvcm1hdD1mdW5jdGlv
bih0LGUpe3JldHVybiBZaShuLHQsZSl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLaShuKX0s
dH1mdW5jdGlvbiBRaShuKXtyZXR1cm4gbi5pbm5lclJhZGl1c31mdW5jdGlvbiBubyhuKXtyZXR1
cm4gbi5vdXRlclJhZGl1c31mdW5jdGlvbiB0byhuKXtyZXR1cm4gbi5zdGFydEFuZ2xlfWZ1bmN0
aW9uIGVvKG4pe3JldHVybiBuLmVuZEFuZ2xlfWZ1bmN0aW9uIHJvKG4pe2Z1bmN0aW9uIHQodCl7
ZnVuY3Rpb24gbygpe3MucHVzaCgiTSIsaShuKGwpLGEpKX1mb3IodmFyIGMscz1bXSxsPVtdLGY9
LTEsaD10Lmxlbmd0aCxnPWJ0KGUpLHA9YnQocik7KytmPGg7KXUuY2FsbCh0aGlzLGM9dFtmXSxm
KT9sLnB1c2goWytnLmNhbGwodGhpcyxjLGYpLCtwLmNhbGwodGhpcyxjLGYpXSk6bC5sZW5ndGgm
JihvKCksbD1bXSk7cmV0dXJuIGwubGVuZ3RoJiZvKCkscy5sZW5ndGg/cy5qb2luKCIiKTpudWxs
fXZhciBlPXdyLHI9U3IsdT13ZSxpPXVvLG89aS5rZXksYT0uNztyZXR1cm4gdC54PWZ1bmN0aW9u
KG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdC5kZWZpbmVkPWZ1bmN0aW9uKG4pe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW4sdCk6dX0sdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihu
KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9pPW46KGk9
eHMuZ2V0KG4pfHx1bykua2V5LHQpOm99LHQudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aD8oYT1uLHQpOmF9LHR9ZnVuY3Rpb24gdW8obil7cmV0dXJuIG4uam9pbigi
TCIpfWZ1bmN0aW9uIGlvKG4pe3JldHVybiB1byhuKSsiWiJ9ZnVuY3Rpb24gb28obil7Zm9yKHZh
ciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1bclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgi
SCIsKHJbMF0rKHI9blt0XSlbMF0pLzIsIlYiLHJbMV0pO3JldHVybiBlPjEmJnUucHVzaCgiSCIs
clswXSksdS5qb2luKCIiKX1mdW5jdGlvbiBhbyhuKXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLHI9
blswXSx1PVtyWzBdLCIsIixyWzFdXTsrK3Q8ZTspdS5wdXNoKCJWIiwocj1uW3RdKVsxXSwiSCIs
clswXSk7cmV0dXJuIHUuam9pbigiIil9ZnVuY3Rpb24gY28obil7Zm9yKHZhciB0PTAsZT1uLmxl
bmd0aCxyPW5bMF0sdT1bclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgiSCIsKHI9blt0XSlb
MF0sIlYiLHJbMV0pO3JldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIHNvKG4sdCl7cmV0dXJuIG4u
bGVuZ3RoPDQ/dW8obik6blsxXStobyhuLnNsaWNlKDEsbi5sZW5ndGgtMSksZ28obix0KSl9ZnVu
Y3Rpb24gbG8obix0KXtyZXR1cm4gbi5sZW5ndGg8Mz91byhuKTpuWzBdK2hvKChuLnB1c2goblsw
XSksbiksZ28oW25bbi5sZW5ndGgtMl1dLmNvbmNhdChuLFtuWzFdXSksdCkpfWZ1bmN0aW9uIGZv
KG4sdCl7cmV0dXJuIG4ubGVuZ3RoPDM/dW8obik6blswXStobyhuLGdvKG4sdCkpfWZ1bmN0aW9u
IGhvKG4sdCl7aWYodC5sZW5ndGg8MXx8bi5sZW5ndGghPXQubGVuZ3RoJiZuLmxlbmd0aCE9dC5s
ZW5ndGgrMilyZXR1cm4gdW8obik7dmFyIGU9bi5sZW5ndGghPXQubGVuZ3RoLHI9IiIsdT1uWzBd
LGk9blsxXSxvPXRbMF0sYT1vLGM9MTtpZihlJiYocis9IlEiKyhpWzBdLTIqb1swXS8zKSsiLCIr
KGlbMV0tMipvWzFdLzMpKyIsIitpWzBdKyIsIitpWzFdLHU9blsxXSxjPTIpLHQubGVuZ3RoPjEp
e2E9dFsxXSxpPW5bY10sYysrLHIrPSJDIisodVswXStvWzBdKSsiLCIrKHVbMV0rb1sxXSkrIiwi
KyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIraVswXSsiLCIraVsxXTtmb3IodmFyIHM9
MjtzPHQubGVuZ3RoO3MrKyxjKyspaT1uW2NdLGE9dFtzXSxyKz0iUyIrKGlbMF0tYVswXSkrIiwi
KyhpWzFdLWFbMV0pKyIsIitpWzBdKyIsIitpWzFdfWlmKGUpe3ZhciBsPW5bY107cis9IlEiKyhp
WzBdKzIqYVswXS8zKSsiLCIrKGlbMV0rMiphWzFdLzMpKyIsIitsWzBdKyIsIitsWzFdfXJldHVy
biByfWZ1bmN0aW9uIGdvKG4sdCl7Zm9yKHZhciBlLHI9W10sdT0oMS10KS8yLGk9blswXSxvPW5b
MV0sYT0xLGM9bi5sZW5ndGg7KythPGM7KWU9aSxpPW8sbz1uW2FdLHIucHVzaChbdSoob1swXS1l
WzBdKSx1KihvWzFdLWVbMV0pXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcG8obil7aWYobi5sZW5ndGg8
MylyZXR1cm4gdW8obik7dmFyIHQ9MSxlPW4ubGVuZ3RoLHI9blswXSx1PXJbMF0saT1yWzFdLG89
W3UsdSx1LChyPW5bMV0pWzBdXSxhPVtpLGksaSxyWzFdXSxjPVt1LCIsIixpLCJMIix4byhicyxv
KSwiLCIseG8oYnMsYSldO2ZvcihuLnB1c2gobltlLTFdKTsrK3Q8PWU7KXI9blt0XSxvLnNoaWZ0
KCksby5wdXNoKHJbMF0pLGEuc2hpZnQoKSxhLnB1c2goclsxXSksTW8oYyxvLGEpO3JldHVybiBu
LnBvcCgpLGMucHVzaCgiTCIsciksYy5qb2luKCIiKX1mdW5jdGlvbiB2byhuKXtpZihuLmxlbmd0
aDw0KXJldHVybiB1byhuKTtmb3IodmFyIHQsZT1bXSxyPS0xLHU9bi5sZW5ndGgsaT1bMF0sbz1b
MF07KytyPDM7KXQ9bltyXSxpLnB1c2godFswXSksby5wdXNoKHRbMV0pO2ZvcihlLnB1c2goeG8o
YnMsaSkrIiwiK3hvKGJzLG8pKSwtLXI7KytyPHU7KXQ9bltyXSxpLnNoaWZ0KCksaS5wdXNoKHRb
MF0pLG8uc2hpZnQoKSxvLnB1c2godFsxXSksTW8oZSxpLG8pO3JldHVybiBlLmpvaW4oIiIpfWZ1
bmN0aW9uIG1vKG4pe2Zvcih2YXIgdCxlLHI9LTEsdT1uLmxlbmd0aCxpPXUrNCxvPVtdLGE9W107
KytyPDQ7KWU9bltyJXVdLG8ucHVzaChlWzBdKSxhLnB1c2goZVsxXSk7Zm9yKHQ9W3hvKGJzLG8p
LCIsIix4byhicyxhKV0sLS1yOysrcjxpOyllPW5bciV1XSxvLnNoaWZ0KCksby5wdXNoKGVbMF0p
LGEuc2hpZnQoKSxhLnB1c2goZVsxXSksTW8odCxvLGEpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0
aW9uIHlvKG4sdCl7dmFyIGU9bi5sZW5ndGgtMTtpZihlKWZvcih2YXIgcix1LGk9blswXVswXSxv
PW5bMF1bMV0sYT1uW2VdWzBdLWksYz1uW2VdWzFdLW8scz0tMTsrK3M8PWU7KXI9bltzXSx1PXMv
ZSxyWzBdPXQqclswXSsoMS10KSooaSt1KmEpLHJbMV09dCpyWzFdKygxLXQpKihvK3UqYyk7cmV0
dXJuIHBvKG4pfWZ1bmN0aW9uIHhvKG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV0rblsy
XSp0WzJdK25bM10qdFszXX1mdW5jdGlvbiBNbyhuLHQsZSl7bi5wdXNoKCJDIix4byhNcyx0KSwi
LCIseG8oTXMsZSksIiwiLHhvKF9zLHQpLCIsIix4byhfcyxlKSwiLCIseG8oYnMsdCksIiwiLHhv
KGJzLGUpKX1mdW5jdGlvbiBfbyhuLHQpe3JldHVybih0WzFdLW5bMV0pLyh0WzBdLW5bMF0pfWZ1
bmN0aW9uIGJvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgtMSxyPVtdLHU9blswXSxpPW5bMV0s
bz1yWzBdPV9vKHUsaSk7Kyt0PGU7KXJbdF09KG8rKG89X28odT1pLGk9blt0KzFdKSkpLzI7cmV0
dXJuIHJbdF09byxyfWZ1bmN0aW9uIHdvKG4pe2Zvcih2YXIgdCxlLHIsdSxpPVtdLG89Ym8obiks
YT0tMSxjPW4ubGVuZ3RoLTE7KythPGM7KXQ9X28oblthXSxuW2ErMV0pLHVhKHQpPGthP29bYV09
b1thKzFdPTA6KGU9b1thXS90LHI9b1thKzFdL3QsdT1lKmUrcipyLHU+OSYmKHU9Myp0L01hdGgu
c3FydCh1KSxvW2FdPXUqZSxvW2ErMV09dSpyKSk7Zm9yKGE9LTE7KythPD1jOyl1PShuW01hdGgu
bWluKGMsYSsxKV1bMF0tbltNYXRoLm1heCgwLGEtMSldWzBdKS8oNiooMStvW2FdKm9bYV0pKSxp
LnB1c2goW3V8fDAsb1thXSp1fHwwXSk7cmV0dXJuIGl9ZnVuY3Rpb24gU28obil7cmV0dXJuIG4u
bGVuZ3RoPDM/dW8obik6blswXStobyhuLHdvKG4pKX1mdW5jdGlvbiBrbyhuKXtmb3IodmFyIHQs
ZSxyLHU9LTEsaT1uLmxlbmd0aDsrK3U8aTspdD1uW3VdLGU9dFswXSxyPXRbMV0rbXMsdFswXT1l
Kk1hdGguY29zKHIpLHRbMV09ZSpNYXRoLnNpbihyKTtyZXR1cm4gbn1mdW5jdGlvbiBFbyhuKXtm
dW5jdGlvbiB0KHQpe2Z1bmN0aW9uIGMoKXt2LnB1c2goIk0iLGEobihtKSxmKSxsLHMobihkLnJl
dmVyc2UoKSksZiksIloiKX1mb3IodmFyIGgsZyxwLHY9W10sZD1bXSxtPVtdLHk9LTEseD10Lmxl
bmd0aCxNPWJ0KGUpLF89YnQodSksYj1lPT09cj9mdW5jdGlvbigpe3JldHVybiBnfTpidChyKSx3
PXU9PT1pP2Z1bmN0aW9uKCl7cmV0dXJuIHB9OmJ0KGkpOysreTx4OylvLmNhbGwodGhpcyxoPXRb
eV0seSk/KGQucHVzaChbZz0rTS5jYWxsKHRoaXMsaCx5KSxwPStfLmNhbGwodGhpcyxoLHkpXSks
bS5wdXNoKFsrYi5jYWxsKHRoaXMsaCx5KSwrdy5jYWxsKHRoaXMsaCx5KV0pKTpkLmxlbmd0aCYm
KGMoKSxkPVtdLG09W10pO3JldHVybiBkLmxlbmd0aCYmYygpLHYubGVuZ3RoP3Yuam9pbigiIik6
bnVsbH12YXIgZT13cixyPXdyLHU9MCxpPVNyLG89d2UsYT11byxjPWEua2V5LHM9YSxsPSJMIixm
PS43O3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cj1u
LHQpOnJ9LHQueDA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTpl
fSx0LngxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdC55
PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWk9bix0KTppfSx0LnkwPWZ1
bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW4sdCk6dX0sdC55MT1mdW5jdGlv
bihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLHQpOml9LHQuZGVmaW5lZD1mdW5jdGlv
bihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1uLHQpOm99LHQuaW50ZXJwb2xhdGU9ZnVu
Y3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/
YT1uOihhPXhzLmdldChuKXx8dW8pLmtleSxzPWEucmV2ZXJzZXx8YSxsPWEuY2xvc2VkPyJNIjoi
TCIsdCk6Y30sdC50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhm
PW4sdCk6Zn0sdH1mdW5jdGlvbiBBbyhuKXtyZXR1cm4gbi5yYWRpdXN9ZnVuY3Rpb24gQ28obil7
cmV0dXJuW24ueCxuLnldfWZ1bmN0aW9uIE5vKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4u
YXBwbHkodGhpcyxhcmd1bWVudHMpLGU9dFswXSxyPXRbMV0rbXM7cmV0dXJuW2UqTWF0aC5jb3Mo
ciksZSpNYXRoLnNpbihyKV19fWZ1bmN0aW9uIHpvKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIExvKCl7
cmV0dXJuImNpcmNsZSJ9ZnVuY3Rpb24gVG8obil7dmFyIHQ9TWF0aC5zcXJ0KG4vYmEpO3JldHVy
biJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsMSAw
LCIrdCsiWiJ9ZnVuY3Rpb24gcW8obix0KXtyZXR1cm4gc2EobixDcyksbi5pZD10LG59ZnVuY3Rp
b24gUm8obix0LGUscil7dmFyIHU9bi5pZDtyZXR1cm4gUChuLCJmdW5jdGlvbiI9PXR5cGVvZiBl
P2Z1bmN0aW9uKG4saSxvKXtuLl9fdHJhbnNpdGlvbl9fW3VdLnR3ZWVuLnNldCh0LHIoZS5jYWxs
KG4sbi5fX2RhdGFfXyxpLG8pKSl9OihlPXIoZSksZnVuY3Rpb24obil7bi5fX3RyYW5zaXRpb25f
X1t1XS50d2Vlbi5zZXQodCxlKX0pKX1mdW5jdGlvbiBEbyhuKXtyZXR1cm4gbnVsbD09biYmKG49
IiIpLGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1ufX1mdW5jdGlvbiBQbyhuLHQsZSxyKXt2
YXIgdT1uLl9fdHJhbnNpdGlvbl9ffHwobi5fX3RyYW5zaXRpb25fXz17YWN0aXZlOjAsY291bnQ6
MH0pLGk9dVtlXTtpZighaSl7dmFyIGE9ci50aW1lO2k9dVtlXT17dHdlZW46bmV3IG8sdGltZTph
LGVhc2U6ci5lYXNlLGRlbGF5OnIuZGVsYXksZHVyYXRpb246ci5kdXJhdGlvbn0sKyt1LmNvdW50
LFpvLnRpbWVyKGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIG8ocil7cmV0dXJuIHUuYWN0aXZlPmU/cygp
Oih1LmFjdGl2ZT1lLGkuZXZlbnQmJmkuZXZlbnQuc3RhcnQuY2FsbChuLGwsdCksaS50d2Vlbi5m
b3JFYWNoKGZ1bmN0aW9uKGUscil7KHI9ci5jYWxsKG4sbCx0KSkmJnYucHVzaChyKX0pLFpvLnRp
bWVyKGZ1bmN0aW9uKCl7cmV0dXJuIHAuYz1jKHJ8fDEpP3dlOmMsMX0sMCxhKSx2b2lkIDApfWZ1
bmN0aW9uIGMocil7aWYodS5hY3RpdmUhPT1lKXJldHVybiBzKCk7Zm9yKHZhciBvPXIvZyxhPWYo
byksYz12Lmxlbmd0aDtjPjA7KXZbLS1jXS5jYWxsKG4sYSk7CityZXR1cm4gbz49MT8oaS5ldmVu
dCYmaS5ldmVudC5lbmQuY2FsbChuLGwsdCkscygpKTp2b2lkIDB9ZnVuY3Rpb24gcygpe3JldHVy
bi0tdS5jb3VudD9kZWxldGUgdVtlXTpkZWxldGUgbi5fX3RyYW5zaXRpb25fXywxfXZhciBsPW4u
X19kYXRhX18sZj1pLmVhc2UsaD1pLmRlbGF5LGc9aS5kdXJhdGlvbixwPUJhLHY9W107cmV0dXJu
IHAudD1oK2Escj49aD9vKHItaCk6KHAuYz1vLHZvaWQgMCl9LDAsYSl9fWZ1bmN0aW9uIFVvKG4s
dCl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKG4pe3JldHVybiJ0cmFuc2xhdGUoIit0KG4p
KyIsMCkifSl9ZnVuY3Rpb24gam8obix0KXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7
cmV0dXJuInRyYW5zbGF0ZSgwLCIrdChuKSsiKSJ9KX1mdW5jdGlvbiBIbyhuKXtyZXR1cm4gbi50
b0lTT1N0cmluZygpfWZ1bmN0aW9uIEZvKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKHQp
fWZ1bmN0aW9uIHUobixlKXt2YXIgcj1uWzFdLW5bMF0sdT1yL2UsaT1aby5iaXNlY3QoVXMsdSk7
cmV0dXJuIGk9PVVzLmxlbmd0aD9bdC55ZWFyLEZpKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBu
LzMxNTM2ZTZ9KSxlKVsyXV06aT90W3UvVXNbaS0xXTxVc1tpXS91P2ktMTppXTpbRnMsRmkobixl
KVsyXV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBPbyhuLmludmVydCh0KSl9
LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmRvbWFpbih0
KSxyKTpuLmRvbWFpbigpLm1hcChPbyl9LHIubmljZT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUo
ZSl7cmV0dXJuIWlzTmFOKGUpJiYhbi5yYW5nZShlLE9vKCtlKzEpLHQpLmxlbmd0aH12YXIgaT1y
LmRvbWFpbigpLG89TGkoaSksYT1udWxsPT1uP3UobywxMCk6Im51bWJlciI9PXR5cGVvZiBuJiZ1
KG8sbik7cmV0dXJuIGEmJihuPWFbMF0sdD1hWzFdKSxyLmRvbWFpbihSaShpLHQ+MT97Zmxvb3I6
ZnVuY3Rpb24odCl7Zm9yKDtlKHQ9bi5mbG9vcih0KSk7KXQ9T28odC0xKTtyZXR1cm4gdH0sY2Vp
bDpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmNlaWwodCkpOyl0PU9vKCt0KzEpO3JldHVybiB0fX06
bikpfSxyLnRpY2tzPWZ1bmN0aW9uKG4sdCl7dmFyIGU9TGkoci5kb21haW4oKSksaT1udWxsPT1u
P3UoZSwxMCk6Im51bWJlciI9PXR5cGVvZiBuP3UoZSxuKTohbi5yYW5nZSYmW3tyYW5nZTpufSx0
XTtyZXR1cm4gaSYmKG49aVswXSx0PWlbMV0pLG4ucmFuZ2UoZVswXSxPbygrZVsxXSsxKSwxPnQ/
MTp0KX0sci50aWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuY29weT1mdW5jdGlvbigp
e3JldHVybiBGbyhuLmNvcHkoKSx0LGUpfSxqaShyLG4pfWZ1bmN0aW9uIE9vKG4pe3JldHVybiBu
ZXcgRGF0ZShuKX1mdW5jdGlvbiBZbyhuKXtyZXR1cm4gSlNPTi5wYXJzZShuLnJlc3BvbnNlVGV4
dCl9ZnVuY3Rpb24gSW8obil7dmFyIHQ9JG8uY3JlYXRlUmFuZ2UoKTtyZXR1cm4gdC5zZWxlY3RO
b2RlKCRvLmJvZHkpLHQuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG4ucmVzcG9uc2VUZXh0KX12
YXIgWm89e3ZlcnNpb246IjMuNC4xMSJ9O0RhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXty
ZXR1cm4rbmV3IERhdGV9KTt2YXIgVm89W10uc2xpY2UsWG89ZnVuY3Rpb24obil7cmV0dXJuIFZv
LmNhbGwobil9LCRvPWRvY3VtZW50LEJvPSRvLmRvY3VtZW50RWxlbWVudCxXbz13aW5kb3c7dHJ5
e1hvKEJvLmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKEpvKXtYbz1mdW5jdGlvbihuKXtm
b3IodmFyIHQ9bi5sZW5ndGgsZT1uZXcgQXJyYXkodCk7dC0tOyllW3RdPW5bdF07cmV0dXJuIGV9
fXRyeXskby5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZS5zZXRQcm9wZXJ0eSgib3BhY2l0eSIs
MCwiIil9Y2F0Y2goR28pe3ZhciBLbz1Xby5FbGVtZW50LnByb3RvdHlwZSxRbz1Lby5zZXRBdHRy
aWJ1dGUsbmE9S28uc2V0QXR0cmlidXRlTlMsdGE9V28uQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90
b3R5cGUsZWE9dGEuc2V0UHJvcGVydHk7S28uc2V0QXR0cmlidXRlPWZ1bmN0aW9uKG4sdCl7UW8u
Y2FsbCh0aGlzLG4sdCsiIil9LEtvLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKG4sdCxlKXtuYS5j
YWxsKHRoaXMsbix0LGUrIiIpfSx0YS5zZXRQcm9wZXJ0eT1mdW5jdGlvbihuLHQsZSl7ZWEuY2Fs
bCh0aGlzLG4sdCsiIixlKX19Wm8uYXNjZW5kaW5nPW4sWm8uZGVzY2VuZGluZz1mdW5jdGlvbihu
LHQpe3JldHVybiBuPnQ/LTE6dD5uPzE6dD49bj8wOjAvMH0sWm8ubWluPWZ1bmN0aW9uKG4sdCl7
dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7Kyt1
PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0o
cj1uW3VdKSYmZT5yJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4s
blt1XSx1KSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixu
W3VdLHUpKSYmZT5yJiYoZT1yKX1yZXR1cm4gZX0sWm8ubWF4PWZ1bmN0aW9uKG4sdCl7dmFyIGUs
cix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEo
bnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3Vd
KSYmcj5lJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1
KSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUp
KSYmcj5lJiYoZT1yKX1yZXR1cm4gZX0sWm8uZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1
LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8byYmIShu
dWxsIT0oZT11PW5baV0pJiZlPj1lKTspZT11PXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj1u
W2ldKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9ZWxzZXtmb3IoOysraTxvJiYhKG51bGwhPShl
PXU9dC5jYWxsKG4sbltpXSxpKSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0o
cj10LmNhbGwobixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19
LFpvLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLGk9LTE7aWYoMT09PWFy
Z3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8dTspaXNOYU4oZT0rbltpXSl8fChyKz1lKTtlbHNlIGZv
cig7KytpPHU7KWlzTmFOKGU9K3QuY2FsbChuLG5baV0saSkpfHwocis9ZSk7cmV0dXJuIHJ9LFpv
Lm1lYW49ZnVuY3Rpb24obixlKXt2YXIgcix1PTAsaT1uLmxlbmd0aCxvPS0xLGE9aTtpZigxPT09
YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbzxpOyl0KHI9bltvXSk/dSs9cjotLWE7ZWxzZSBmb3Io
OysrbzxpOyl0KHI9ZS5jYWxsKG4sbltvXSxvKSk/dSs9cjotLWE7cmV0dXJuIGE/dS9hOnZvaWQg
MH0sWm8ucXVhbnRpbGU9ZnVuY3Rpb24obix0KXt2YXIgZT0obi5sZW5ndGgtMSkqdCsxLHI9TWF0
aC5mbG9vcihlKSx1PStuW3ItMV0saT1lLXI7cmV0dXJuIGk/dStpKihuW3JdLXUpOnV9LFpvLm1l
ZGlhbj1mdW5jdGlvbihlLHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJihlPWUubWFwKHIp
KSxlPWUuZmlsdGVyKHQpLGUubGVuZ3RoP1pvLnF1YW50aWxlKGUuc29ydChuKSwuNSk6dm9pZCAw
fTt2YXIgcmE9ZShuKTtaby5iaXNlY3RMZWZ0PXJhLmxlZnQsWm8uYmlzZWN0PVpvLmJpc2VjdFJp
Z2h0PXJhLnJpZ2h0LFpvLmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBlKDE9PT10Lmxlbmd0
aD9mdW5jdGlvbihlLHIpe3JldHVybiBuKHQoZSkscil9OnQpfSxaby5zaHVmZmxlPWZ1bmN0aW9u
KG4pe2Zvcih2YXIgdCxlLHI9bi5sZW5ndGg7cjspZT0wfE1hdGgucmFuZG9tKCkqci0tLHQ9blty
XSxuW3JdPW5bZV0sbltlXT10O3JldHVybiBufSxaby5wZXJtdXRlPWZ1bmN0aW9uKG4sdCl7Zm9y
KHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT1uW3RbZV1dO3JldHVybiBy
fSxaby5wYWlycz1mdW5jdGlvbihuKXtmb3IodmFyIHQsZT0wLHI9bi5sZW5ndGgtMSx1PW5bMF0s
aT1uZXcgQXJyYXkoMD5yPzA6cik7cj5lOylpW2VdPVt0PXUsdT1uWysrZV1dO3JldHVybiBpfSxa
by56aXA9ZnVuY3Rpb24oKXtpZighKHU9YXJndW1lbnRzLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZh
ciBuPS0xLHQ9Wm8ubWluKGFyZ3VtZW50cyxyKSxlPW5ldyBBcnJheSh0KTsrK248dDspZm9yKHZh
ciB1LGk9LTEsbz1lW25dPW5ldyBBcnJheSh1KTsrK2k8dTspb1tpXT1hcmd1bWVudHNbaV1bbl07
cmV0dXJuIGV9LFpvLnRyYW5zcG9zZT1mdW5jdGlvbihuKXtyZXR1cm4gWm8uemlwLmFwcGx5KFpv
LG4pfSxaby5rZXlzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChl
KTtyZXR1cm4gdH0sWm8udmFsdWVzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBu
KXQucHVzaChuW2VdKTtyZXR1cm4gdH0sWm8uZW50cmllcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtm
b3IodmFyIGUgaW4gbil0LnB1c2goe2tleTplLHZhbHVlOm5bZV19KTtyZXR1cm4gdH0sWm8ubWVy
Z2U9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscix1PW4ubGVuZ3RoLGk9LTEsbz0wOysraTx1Oylv
Kz1uW2ldLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkobyk7LS11Pj0wOylmb3Iocj1uW3VdLHQ9ci5s
ZW5ndGg7LS10Pj0wOyllWy0tb109clt0XTtyZXR1cm4gZX07dmFyIHVhPU1hdGguYWJzO1pvLnJh
bmdlPWZ1bmN0aW9uKG4sdCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihlPTEsYXJndW1lbnRz
Lmxlbmd0aDwyJiYodD1uLG49MCkpLDEvMD09PSh0LW4pL2UpdGhyb3cgbmV3IEVycm9yKCJpbmZp
bml0ZSByYW5nZSIpO3ZhciByLGk9W10sbz11KHVhKGUpKSxhPS0xO2lmKG4qPW8sdCo9byxlKj1v
LDA+ZSlmb3IoOyhyPW4rZSorK2EpPnQ7KWkucHVzaChyL28pO2Vsc2UgZm9yKDsocj1uK2UqKyth
KTx0OylpLnB1c2goci9vKTtyZXR1cm4gaX0sWm8ubWFwPWZ1bmN0aW9uKG4pe3ZhciB0PW5ldyBv
O2lmKG4gaW5zdGFuY2VvZiBvKW4uZm9yRWFjaChmdW5jdGlvbihuLGUpe3Quc2V0KG4sZSl9KTtl
bHNlIGZvcih2YXIgZSBpbiBuKXQuc2V0KGUsbltlXSk7cmV0dXJuIHR9LGkobyx7aGFzOmEsZ2V0
OmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW2lhK25dfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4g
dGhpc1tpYStuXT10fSxyZW1vdmU6YyxrZXlzOnMsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIG49W107
cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaChlKX0pLG59LGVudHJpZXM6
ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5w
dXNoKHtrZXk6dCx2YWx1ZTplfSl9KSxufSxzaXplOmwsZW1wdHk6Zixmb3JFYWNoOmZ1bmN0aW9u
KG4pe2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PW9hJiZuLmNhbGwodGhpcyx0
LnN1YnN0cmluZygxKSx0aGlzW3RdKX19KTt2YXIgaWE9Ilx4MDAiLG9hPWlhLmNoYXJDb2RlQXQo
MCk7Wm8ubmVzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCxhLGMpe2lmKGM+PWkubGVuZ3RoKXJl
dHVybiByP3IuY2FsbCh1LGEpOmU/YS5zb3J0KGUpOmE7Zm9yKHZhciBzLGwsZixoLGc9LTEscD1h
Lmxlbmd0aCx2PWlbYysrXSxkPW5ldyBvOysrZzxwOykoaD1kLmdldChzPXYobD1hW2ddKSkpP2gu
cHVzaChsKTpkLnNldChzLFtsXSk7cmV0dXJuIHQ/KGw9dCgpLGY9ZnVuY3Rpb24oZSxyKXtsLnNl
dChlLG4odCxyLGMpKX0pOihsPXt9LGY9ZnVuY3Rpb24oZSxyKXtsW2VdPW4odCxyLGMpfSksZC5m
b3JFYWNoKGYpLGx9ZnVuY3Rpb24gdChuLGUpe2lmKGU+PWkubGVuZ3RoKXJldHVybiBuO3ZhciBy
PVtdLHU9YVtlKytdO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obix1KXtyLnB1c2goe2tleTpu
LHZhbHVlczp0KHUsZSl9KX0pLHU/ci5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHUobi5rZXks
dC5rZXkpfSk6cn12YXIgZSxyLHU9e30saT1bXSxhPVtdO3JldHVybiB1Lm1hcD1mdW5jdGlvbih0
LGUpe3JldHVybiBuKGUsdCwwKX0sdS5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4oWm8u
bWFwLGUsMCksMCl9LHUua2V5PWZ1bmN0aW9uKG4pe3JldHVybiBpLnB1c2gobiksdX0sdS5zb3J0
S2V5cz1mdW5jdGlvbihuKXtyZXR1cm4gYVtpLmxlbmd0aC0xXT1uLHV9LHUuc29ydFZhbHVlcz1m
dW5jdGlvbihuKXtyZXR1cm4gZT1uLHV9LHUucm9sbHVwPWZ1bmN0aW9uKG4pe3JldHVybiByPW4s
dX0sdX0sWm8uc2V0PWZ1bmN0aW9uKG4pe3ZhciB0PW5ldyBoO2lmKG4pZm9yKHZhciBlPTAscj1u
Lmxlbmd0aDtyPmU7KytlKXQuYWRkKG5bZV0pO3JldHVybiB0fSxpKGgse2hhczphLGFkZDpmdW5j
dGlvbihuKXtyZXR1cm4gdGhpc1tpYStuXT0hMCxufSxyZW1vdmU6ZnVuY3Rpb24obil7cmV0dXJu
IG49aWErbixuIGluIHRoaXMmJmRlbGV0ZSB0aGlzW25dfSx2YWx1ZXM6cyxzaXplOmwsZW1wdHk6
Zixmb3JFYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09
PW9hJiZuLmNhbGwodGhpcyx0LnN1YnN0cmluZygxKSl9fSksWm8uYmVoYXZpb3I9e30sWm8ucmVi
aW5kPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlLHI9MSx1PWFyZ3VtZW50cy5sZW5ndGg7KytyPHU7
KW5bZT1hcmd1bWVudHNbcl1dPWcobix0LHRbZV0pO3JldHVybiBufTt2YXIgYWE9WyJ3ZWJraXQi
LCJtcyIsIm1veiIsIk1veiIsIm8iLCJPIl07Wm8uZGlzcGF0Y2g9ZnVuY3Rpb24oKXtmb3IodmFy
IG49bmV3IGQsdD0tMSxlPWFyZ3VtZW50cy5sZW5ndGg7Kyt0PGU7KW5bYXJndW1lbnRzW3RdXT1t
KG4pO3JldHVybiBufSxkLnByb3RvdHlwZS5vbj1mdW5jdGlvbihuLHQpe3ZhciBlPW4uaW5kZXhP
ZigiLiIpLHI9IiI7aWYoZT49MCYmKHI9bi5zdWJzdHJpbmcoZSsxKSxuPW4uc3Vic3RyaW5nKDAs
ZSkpLG4pcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzW25dLm9uKHIpOnRoaXNbbl0ub24o
cix0KTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl7aWYobnVsbD09dClmb3IobiBpbiB0aGlzKXRo
aXMuaGFzT3duUHJvcGVydHkobikmJnRoaXNbbl0ub24ocixudWxsKTtyZXR1cm4gdGhpc319LFpv
LmV2ZW50PW51bGwsWm8ucmVxdW90ZT1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKGNhLCJc
XCQmIil9O3ZhciBjYT0vW1xcXF5cJFwqXCtcP1x8XFtcXVwoXClcLlx7XH1dL2csc2E9e30uX19w
cm90b19fP2Z1bmN0aW9uKG4sdCl7bi5fX3Byb3RvX189dH06ZnVuY3Rpb24obix0KXtmb3IodmFy
IGUgaW4gdCluW2VdPXRbZV19LGxhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQucXVlcnlTZWxlY3Rv
cihuKX0sZmE9ZnVuY3Rpb24obix0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yQWxsKG4pfSxoYT1C
by5tYXRjaGVzfHxCb1twKEJvLCJtYXRjaGVzU2VsZWN0b3IiKV0sZ2E9ZnVuY3Rpb24obix0KXty
ZXR1cm4gaGEuY2FsbChuLHQpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYobGE9ZnVuY3Rp
b24obix0KXtyZXR1cm4gU2l6emxlKG4sdClbMF18fG51bGx9LGZhPVNpenpsZSxnYT1TaXp6bGUu
bWF0Y2hlc1NlbGVjdG9yKSxaby5zZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gbWF9O3ZhciBw
YT1aby5zZWxlY3Rpb24ucHJvdG90eXBlPVtdO3BhLnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgdCxl
LHIsdSxpPVtdO249YihuKTtmb3IodmFyIG89LTEsYT10aGlzLmxlbmd0aDsrK288YTspe2kucHVz
aCh0PVtdKSx0LnBhcmVudE5vZGU9KHI9dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGM9LTEs
cz1yLmxlbmd0aDsrK2M8czspKHU9cltjXSk/KHQucHVzaChlPW4uY2FsbCh1LHUuX19kYXRhX18s
YyxvKSksZSYmIl9fZGF0YV9fImluIHUmJihlLl9fZGF0YV9fPXUuX19kYXRhX18pKTp0LnB1c2go
bnVsbCl9cmV0dXJuIF8oaSl9LHBhLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdCxlLHI9W107
bj13KG4pO2Zvcih2YXIgdT0tMSxpPXRoaXMubGVuZ3RoOysrdTxpOylmb3IodmFyIG89dGhpc1t1
XSxhPS0xLGM9by5sZW5ndGg7KythPGM7KShlPW9bYV0pJiYoci5wdXNoKHQ9WG8obi5jYWxsKGUs
ZS5fX2RhdGFfXyxhLHUpKSksdC5wYXJlbnROb2RlPWUpO3JldHVybiBfKHIpfTt2YXIgdmE9e3N2
ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRw
Oi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3htbG5zLyJ9O1pvLm5zPXtwcmVmaXg6dmEscXVhbGlmeTpmdW5jdGlvbihuKXt2YXIg
dD1uLmluZGV4T2YoIjoiKSxlPW47cmV0dXJuIHQ+PTAmJihlPW4uc3Vic3RyaW5nKDAsdCksbj1u
LnN1YnN0cmluZyh0KzEpKSx2YS5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6dmFbZV0sbG9jYWw6
bn06bn19LHBhLmF0dHI9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJz
dHJpbmciPT10eXBlb2Ygbil7dmFyIGU9dGhpcy5ub2RlKCk7cmV0dXJuIG49Wm8ubnMucXVhbGlm
eShuKSxuLmxvY2FsP2UuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTplLmdldEF0dHJp
YnV0ZShuKX1mb3IodCBpbiBuKXRoaXMuZWFjaChTKHQsblt0XSkpO3JldHVybiB0aGlzfXJldHVy
biB0aGlzLmVhY2goUyhuLHQpKX0scGEuY2xhc3NlZD1mdW5jdGlvbihuLHQpe2lmKGFyZ3VtZW50
cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXt2YXIgZT10aGlzLm5vZGUoKSxyPShu
PUEobikpLmxlbmd0aCx1PS0xO2lmKHQ9ZS5jbGFzc0xpc3Qpe2Zvcig7Kyt1PHI7KWlmKCF0LmNv
bnRhaW5zKG5bdV0pKXJldHVybiExfWVsc2UgZm9yKHQ9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7
Kyt1PHI7KWlmKCFFKG5bdV0pLnRlc3QodCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKHQgaW4gbil0
aGlzLmVhY2goQyh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEMobix0KSl9
LHBhLnN0eWxlPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO2lmKDM+cil7
aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0PSIiKTtmb3IoZSBpbiBuKXRoaXMuZWFjaCh6
KGUsbltlXSx0KSk7cmV0dXJuIHRoaXN9aWYoMj5yKXJldHVybiBXby5nZXRDb21wdXRlZFN0eWxl
KHRoaXMubm9kZSgpLG51bGwpLmdldFByb3BlcnR5VmFsdWUobik7ZT0iIn1yZXR1cm4gdGhpcy5l
YWNoKHoobix0LGUpKX0scGEucHJvcGVydHk9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVu
Z3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gdGhpcy5ub2RlKClbbl07Zm9yKHQg
aW4gbil0aGlzLmVhY2goTCh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEwo
bix0KSl9LHBhLnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5l
YWNoKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFy
Z3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rpb24o
KXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn0pOnRo
aXMubm9kZSgpLnRleHRDb250ZW50fSxwYS5odG1sPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0
PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PXQ/IiI6dH06bnVs
bD09bj9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJI
VE1MPW59KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHBhLmFwcGVuZD1mdW5jdGlvbihuKXtyZXR1
cm4gbj1UKG4pLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQo
bi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LHBhLmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVy
biBuPVQobiksdD1iKHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0
QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxu
dWxsKX0pfSxwYS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7
dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9KX0scGEuZGF0YT1m
dW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlKXt2YXIgcix1LGksYT1uLmxlbmd0aCxmPWUubGVu
Z3RoLGg9TWF0aC5taW4oYSxmKSxnPW5ldyBBcnJheShmKSxwPW5ldyBBcnJheShmKSx2PW5ldyBB
cnJheShhKTtpZih0KXt2YXIgZCxtPW5ldyBvLHk9bmV3IG8seD1bXTtmb3Iocj0tMTsrK3I8YTsp
ZD10LmNhbGwodT1uW3JdLHUuX19kYXRhX18sciksbS5oYXMoZCk/dltyXT11Om0uc2V0KGQsdSks
eC5wdXNoKGQpO2ZvcihyPS0xOysrcjxmOylkPXQuY2FsbChlLGk9ZVtyXSxyKSwodT1tLmdldChk
KSk/KGdbcl09dSx1Ll9fZGF0YV9fPWkpOnkuaGFzKGQpfHwocFtyXT1xKGkpKSx5LnNldChkLGkp
LG0ucmVtb3ZlKGQpO2ZvcihyPS0xOysrcjxhOyltLmhhcyh4W3JdKSYmKHZbcl09bltyXSl9ZWxz
ZXtmb3Iocj0tMTsrK3I8aDspdT1uW3JdLGk9ZVtyXSx1Pyh1Ll9fZGF0YV9fPWksZ1tyXT11KTpw
W3JdPXEoaSk7Zm9yKDtmPnI7KytyKXBbcl09cShlW3JdKTtmb3IoO2E+cjsrK3IpdltyXT1uW3Jd
fXAudXBkYXRlPWcscC5wYXJlbnROb2RlPWcucGFyZW50Tm9kZT12LnBhcmVudE5vZGU9bi5wYXJl
bnROb2RlLGMucHVzaChwKSxzLnB1c2goZyksbC5wdXNoKHYpfXZhciByLHUsaT0tMSxhPXRoaXMu
bGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtmb3Iobj1uZXcgQXJyYXkoYT0ocj10aGlzWzBd
KS5sZW5ndGgpOysraTxhOykodT1yW2ldKSYmKG5baV09dS5fX2RhdGFfXyk7cmV0dXJuIG59dmFy
IGM9VShbXSkscz1fKFtdKSxsPV8oW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKWZvcig7Kytp
PGE7KWUocj10aGlzW2ldLG4uY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7ZWxzZSBm
b3IoOysraTxhOyllKHI9dGhpc1tpXSxuKTtyZXR1cm4gcy5lbnRlcj1mdW5jdGlvbigpe3JldHVy
biBjfSxzLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbH0sc30scGEuZGF0dW09ZnVuY3Rpb24obil7
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMu
cHJvcGVydHkoIl9fZGF0YV9fIil9LHBhLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1b
XTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49UihuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxlbmd0
aDtvPmk7aSsrKXt1LnB1c2godD1bXSksdC5wYXJlbnROb2RlPShlPXRoaXNbaV0pLnBhcmVudE5v
ZGU7Zm9yKHZhciBhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKShyPWVbYV0pJiZuLmNhbGwocixyLl9f
ZGF0YV9fLGEsaSkmJnQucHVzaChyKX1yZXR1cm4gXyh1KX0scGEub3JkZXI9ZnVuY3Rpb24oKXtm
b3IodmFyIG49LTEsdD10aGlzLmxlbmd0aDsrK248dDspZm9yKHZhciBlLHI9dGhpc1tuXSx1PXIu
bGVuZ3RoLTEsaT1yW3VdOy0tdT49MDspKGU9clt1XSkmJihpJiZpIT09ZS5uZXh0U2libGluZyYm
aS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGkpLGk9ZSk7cmV0dXJuIHRoaXN9LHBhLnNvcnQ9
ZnVuY3Rpb24obil7bj1ELmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIHQ9LTEsZT10aGlz
Lmxlbmd0aDsrK3Q8ZTspdGhpc1t0XS5zb3J0KG4pO3JldHVybiB0aGlzLm9yZGVyKCl9LHBhLmVh
Y2g9ZnVuY3Rpb24obil7cmV0dXJuIFAodGhpcyxmdW5jdGlvbih0LGUscil7bi5jYWxsKHQsdC5f
X2RhdGFfXyxlLHIpfSl9LHBhLmNhbGw9ZnVuY3Rpb24obil7dmFyIHQ9WG8oYXJndW1lbnRzKTty
ZXR1cm4gbi5hcHBseSh0WzBdPXRoaXMsdCksdGhpc30scGEuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1
cm4hdGhpcy5ub2RlKCl9LHBhLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFyIG49MCx0PXRoaXMubGVu
Z3RoO3Q+bjtuKyspZm9yKHZhciBlPXRoaXNbbl0scj0wLHU9ZS5sZW5ndGg7dT5yO3IrKyl7dmFy
IGk9ZVtyXTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfSxwYS5zaXplPWZ1bmN0aW9uKCl7dmFy
IG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn07dmFyIGRhPVtdO1pvLnNl
bGVjdGlvbi5lbnRlcj1VLFpvLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9ZGEsZGEuYXBwZW5k
PXBhLmFwcGVuZCxkYS5lbXB0eT1wYS5lbXB0eSxkYS5ub2RlPXBhLm5vZGUsZGEuY2FsbD1wYS5j
YWxsLGRhLnNpemU9cGEuc2l6ZSxkYS5zZWxlY3Q9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscix1
LGksbz1bXSxhPS0xLGM9dGhpcy5sZW5ndGg7KythPGM7KXtyPSh1PXRoaXNbYV0pLnVwZGF0ZSxv
LnB1c2godD1bXSksdC5wYXJlbnROb2RlPXUucGFyZW50Tm9kZTtmb3IodmFyIHM9LTEsbD11Lmxl
bmd0aDsrK3M8bDspKGk9dVtzXSk/KHQucHVzaChyW3NdPWU9bi5jYWxsKHUucGFyZW50Tm9kZSxp
Ll9fZGF0YV9fLHMsYSkpLGUuX19kYXRhX189aS5fX2RhdGFfXyk6dC5wdXNoKG51bGwpfXJldHVy
biBfKG8pfSxkYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwy
JiYodD1qKHRoaXMpKSxwYS5pbnNlcnQuY2FsbCh0aGlzLG4sdCl9LHBhLnRyYW5zaXRpb249ZnVu
Y3Rpb24oKXtmb3IodmFyIG4sdCxlPVNzfHwrK05zLHI9W10sdT1rc3x8e3RpbWU6RGF0ZS5ub3co
KSxlYXNlOnh1LGRlbGF5OjAsZHVyYXRpb246MjUwfSxpPS0xLG89dGhpcy5sZW5ndGg7KytpPG87
KXtyLnB1c2gobj1bXSk7Zm9yKHZhciBhPXRoaXNbaV0sYz0tMSxzPWEubGVuZ3RoOysrYzxzOyko
dD1hW2NdKSYmUG8odCxjLGUsdSksbi5wdXNoKHQpfXJldHVybiBxbyhyLGUpfSxwYS5pbnRlcnJ1
cHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEgpfSxaby5zZWxlY3Q9ZnVuY3Rpb24obil7
dmFyIHQ9WyJzdHJpbmciPT10eXBlb2Ygbj9sYShuLCRvKTpuXTtyZXR1cm4gdC5wYXJlbnROb2Rl
PUJvLF8oW3RdKX0sWm8uc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0PVhvKCJzdHJpbmciPT10
eXBlb2Ygbj9mYShuLCRvKTpuKTtyZXR1cm4gdC5wYXJlbnROb2RlPUJvLF8oW3RdKX07dmFyIG1h
PVpvLnNlbGVjdChCbyk7cGEub249ZnVuY3Rpb24obix0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5n
dGg7aWYoMz5yKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+ciYmKHQ9ITEpO2ZvcihlIGluIG4p
dGhpcy5lYWNoKEYoZSxuW2VdLHQpKTtyZXR1cm4gdGhpc31pZigyPnIpcmV0dXJuKHI9dGhpcy5u
b2RlKClbIl9fb24iK25dKSYmci5fO2U9ITF9cmV0dXJuIHRoaXMuZWFjaChGKG4sdCxlKSl9O3Zh
ciB5YT1aby5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQi
fSk7eWEuZm9yRWFjaChmdW5jdGlvbihuKXsib24iK24gaW4gJG8mJnlhLnJlbW92ZShuKX0pO3Zh
ciB4YT0ib25zZWxlY3RzdGFydCJpbiAkbz9udWxsOnAoQm8uc3R5bGUsInVzZXJTZWxlY3QiKSxN
YT0wO1pvLm1vdXNlPWZ1bmN0aW9uKG4pe3JldHVybiBaKG4seCgpKX07dmFyIF9hPS9XZWJLaXQv
LnRlc3QoV28ubmF2aWdhdG9yLnVzZXJBZ2VudCk/LTE6MDtaby50b3VjaGVzPWZ1bmN0aW9uKG4s
dCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9eCgpLnRvdWNoZXMpLHQ/WG8odCkubWFw
KGZ1bmN0aW9uKHQpe3ZhciBlPVoobix0KTtyZXR1cm4gZS5pZGVudGlmaWVyPXQuaWRlbnRpZmll
cixlfSk6W119LFpvLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcy5v
bigibW91c2Vkb3duLmRyYWciLHUpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLGkpfWZ1bmN0aW9uIHQo
bix0LHUsaSxvKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIG4sZSxyPXQoaCx2
KTtyJiYobj1yWzBdLXhbMF0sZT1yWzFdLXhbMV0scHw9bnxlLHg9cixnKHt0eXBlOiJkcmFnIix4
OnJbMF0rc1swXSx5OnJbMV0rc1sxXSxkeDpuLGR5OmV9KSl9ZnVuY3Rpb24gYygpe3QoaCx2KSYm
KG0ub24oaStkLG51bGwpLm9uKG8rZCxudWxsKSx5KHAmJlpvLmV2ZW50LnRhcmdldD09PWYpLGco
e3R5cGU6ImRyYWdlbmQifSkpfXZhciBzLGw9dGhpcyxmPVpvLmV2ZW50LnRhcmdldCxoPWwucGFy
ZW50Tm9kZSxnPWUub2YobCxhcmd1bWVudHMpLHA9MCx2PW4oKSxkPSIuZHJhZyIrKG51bGw9PXY/
IiI6Ii0iK3YpLG09Wm8uc2VsZWN0KHUoKSkub24oaStkLGEpLm9uKG8rZCxjKSx5PUkoKSx4PXQo
aCx2KTtyPyhzPXIuYXBwbHkobCxhcmd1bWVudHMpLHM9W3MueC14WzBdLHMueS14WzFdXSk6cz1b
MCwwXSxnKHt0eXBlOiJkcmFnc3RhcnQifSl9fXZhciBlPU0obiwiZHJhZyIsImRyYWdzdGFydCIs
ImRyYWdlbmQiKSxyPW51bGwsdT10KHYsWm8ubW91c2UsJCwibW91c2Vtb3ZlIiwibW91c2V1cCIp
LGk9dChWLFpvLnRvdWNoLFgsInRvdWNobW92ZSIsInRvdWNoZW5kIik7cmV0dXJuIG4ub3JpZ2lu
PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sWm8ucmViaW5k
KG4sZSwib24iKX07dmFyIGJhPU1hdGguUEksd2E9MipiYSxTYT1iYS8yLGthPTFlLTYsRWE9a2Eq
a2EsQWE9YmEvMTgwLENhPTE4MC9iYSxOYT1NYXRoLlNRUlQyLHphPTIsTGE9NDtaby5pbnRlcnBv
bGF0ZVpvb209ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4pe3ZhciB0PW4qeTtpZihtKXt2YXIg
ZT1RKHYpLG89aS8oemEqaCkqKGUqbnQoTmEqdCt2KS1LKHYpKTtyZXR1cm5bcitvKnMsdStvKmws
aSplL1EoTmEqdCt2KV19cmV0dXJuW3IrbipzLHUrbipsLGkqTWF0aC5leHAoTmEqdCldfXZhciBy
PW5bMF0sdT1uWzFdLGk9blsyXSxvPXRbMF0sYT10WzFdLGM9dFsyXSxzPW8tcixsPWEtdSxmPXMq
cytsKmwsaD1NYXRoLnNxcnQoZiksZz0oYypjLWkqaStMYSpmKS8oMippKnphKmgpLHA9KGMqYy1p
KmktTGEqZikvKDIqYyp6YSpoKSx2PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyksZD1NYXRo
LmxvZyhNYXRoLnNxcnQocCpwKzEpLXApLG09ZC12LHk9KG18fE1hdGgubG9nKGMvaSkpL05hO3Jl
dHVybiBlLmR1cmF0aW9uPTFlMyp5LGV9LFpvLmJlaGF2aW9yLnpvb209ZnVuY3Rpb24oKXtmdW5j
dGlvbiBuKG4pe24ub24oQSxzKS5vbihSYSsiLnpvb20iLGYpLm9uKCJkYmxjbGljay56b29tIixo
KS5vbih6LGwpfWZ1bmN0aW9uIHQobil7cmV0dXJuWyhuWzBdLVMueCkvUy5rLChuWzFdLVMueSkv
Uy5rXX1mdW5jdGlvbiBlKG4pe3JldHVybltuWzBdKlMuaytTLngsblsxXSpTLmsrUy55XX1mdW5j
dGlvbiByKG4pe1Muaz1NYXRoLm1heChFWzBdLE1hdGgubWluKEVbMV0sbikpfWZ1bmN0aW9uIHUo
bix0KXt0PWUodCksUy54Kz1uWzBdLXRbMF0sUy55Kz1uWzFdLXRbMV19ZnVuY3Rpb24gaSgpe18m
Jl8uZG9tYWluKHgucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4tUy54KS9TLmt9KS5t
YXAoeC5pbnZlcnQpKSx3JiZ3LmRvbWFpbihiLnJhbmdlKCkubWFwKGZ1bmN0aW9uKG4pe3JldHVy
bihuLVMueSkvUy5rfSkubWFwKGIuaW52ZXJ0KSl9ZnVuY3Rpb24gbyhuKXtuKHt0eXBlOiJ6b29t
c3RhcnQifSl9ZnVuY3Rpb24gYShuKXtpKCksbih7dHlwZToiem9vbSIsc2NhbGU6Uy5rLHRyYW5z
bGF0ZTpbUy54LFMueV19KX1mdW5jdGlvbiBjKG4pe24oe3R5cGU6Inpvb21lbmQifSl9ZnVuY3Rp
b24gcygpe2Z1bmN0aW9uIG4oKXtsPTEsdShaby5tb3VzZShyKSxoKSxhKHMpfWZ1bmN0aW9uIGUo
KXtmLm9uKEMsbnVsbCkub24oTixudWxsKSxnKGwmJlpvLmV2ZW50LnRhcmdldD09PWkpLGMocyl9
dmFyIHI9dGhpcyxpPVpvLmV2ZW50LnRhcmdldCxzPUwub2Yocixhcmd1bWVudHMpLGw9MCxmPVpv
LnNlbGVjdChXbykub24oQyxuKS5vbihOLGUpLGg9dChaby5tb3VzZShyKSksZz1JKCk7SC5jYWxs
KHIpLG8ocyl9ZnVuY3Rpb24gbCgpe2Z1bmN0aW9uIG4oKXt2YXIgbj1aby50b3VjaGVzKGcpO3Jl
dHVybiBoPVMuayxuLmZvckVhY2goZnVuY3Rpb24obil7bi5pZGVudGlmaWVyIGluIHYmJih2W24u
aWRlbnRpZmllcl09dChuKSl9KSxufWZ1bmN0aW9uIGUoKXt2YXIgdD1aby5ldmVudC50YXJnZXQ7
Wm8uc2VsZWN0KHQpLm9uKE0saSkub24oXyxmKSxiLnB1c2godCk7Zm9yKHZhciBlPVpvLmV2ZW50
LmNoYW5nZWRUb3VjaGVzLG89MCxjPWUubGVuZ3RoO2M+bzsrK28pdltlW29dLmlkZW50aWZpZXJd
PW51bGw7dmFyIHM9bigpLGw9RGF0ZS5ub3coKTtpZigxPT09cy5sZW5ndGgpe2lmKDUwMD5sLW0p
e3ZhciBoPXNbMF0sZz12W2guaWRlbnRpZmllcl07cigyKlMuayksdShoLGcpLHkoKSxhKHApfW09
bH1lbHNlIGlmKHMubGVuZ3RoPjEpe3ZhciBoPXNbMF0seD1zWzFdLHc9aFswXS14WzBdLGs9aFsx
XS14WzFdO2Q9dyp3K2sqa319ZnVuY3Rpb24gaSgpe2Zvcih2YXIgbix0LGUsaSxvPVpvLnRvdWNo
ZXMoZyksYz0wLHM9by5sZW5ndGg7cz5jOysrYyxpPW51bGwpaWYoZT1vW2NdLGk9dltlLmlkZW50
aWZpZXJdKXtpZih0KWJyZWFrO249ZSx0PWl9aWYoaSl7dmFyIGw9KGw9ZVswXS1uWzBdKSpsKyhs
PWVbMV0tblsxXSkqbCxmPWQmJk1hdGguc3FydChsL2QpO249WyhuWzBdK2VbMF0pLzIsKG5bMV0r
ZVsxXSkvMl0sdD1bKHRbMF0raVswXSkvMiwodFsxXStpWzFdKS8yXSxyKGYqaCl9bT1udWxsLHUo
bix0KSxhKHApfWZ1bmN0aW9uIGYoKXtpZihaby5ldmVudC50b3VjaGVzLmxlbmd0aCl7Zm9yKHZh
ciB0PVpvLmV2ZW50LmNoYW5nZWRUb3VjaGVzLGU9MCxyPXQubGVuZ3RoO3I+ZTsrK2UpZGVsZXRl
IHZbdFtlXS5pZGVudGlmaWVyXTtmb3IodmFyIHUgaW4gdilyZXR1cm4gdm9pZCBuKCl9Wm8uc2Vs
ZWN0QWxsKGIpLm9uKHgsbnVsbCksdy5vbihBLHMpLm9uKHosbCksaygpLGMocCl9dmFyIGgsZz10
aGlzLHA9TC5vZihnLGFyZ3VtZW50cyksdj17fSxkPTAseD0iLnpvb20tIitaby5ldmVudC5jaGFu
Z2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLE09InRvdWNobW92ZSIreCxfPSJ0b3VjaGVuZCIreCxi
PVtdLHc9Wm8uc2VsZWN0KGcpLm9uKEEsbnVsbCkub24oeixlKSxrPUkoKTtILmNhbGwoZyksZSgp
LG8ocCl9ZnVuY3Rpb24gZigpe3ZhciBuPUwub2YodGhpcyxhcmd1bWVudHMpO2Q/Y2xlYXJUaW1l
b3V0KGQpOihnPXQocD12fHxaby5tb3VzZSh0aGlzKSksSC5jYWxsKHRoaXMpLG8obikpLGQ9c2V0
VGltZW91dChmdW5jdGlvbigpe2Q9bnVsbCxjKG4pfSw1MCkseSgpLHIoTWF0aC5wb3coMiwuMDAy
KlRhKCkpKlMuayksdShwLGcpLGEobil9ZnVuY3Rpb24gaCgpe3ZhciBuPUwub2YodGhpcyxhcmd1
bWVudHMpLGU9Wm8ubW91c2UodGhpcyksaT10KGUpLHM9TWF0aC5sb2coUy5rKS9NYXRoLkxOMjtv
KG4pLHIoTWF0aC5wb3coMixaby5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwocyktMTpNYXRoLmZs
b29yKHMpKzEpKSx1KGUsaSksYShuKSxjKG4pfXZhciBnLHAsdixkLG0seCxfLGIsdyxTPXt4OjAs
eTowLGs6MX0saz1bOTYwLDUwMF0sRT1xYSxBPSJtb3VzZWRvd24uem9vbSIsQz0ibW91c2Vtb3Zl
Lnpvb20iLE49Im1vdXNldXAuem9vbSIsej0idG91Y2hzdGFydC56b29tIixMPU0obiwiem9vbXN0
YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtyZXR1cm4gbi5ldmVudD1mdW5jdGlvbihuKXtuLmVhY2go
ZnVuY3Rpb24oKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1lbnRzKSx0PVM7U3M/Wm8uc2VsZWN0KHRo
aXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC56b29tIixmdW5jdGlvbigpe1M9dGhpcy5fX2No
YXJ0X198fHt4OjAseTowLGs6MX0sbyhuKX0pLnR3ZWVuKCJ6b29tOnpvb20iLGZ1bmN0aW9uKCl7
dmFyIGU9a1swXSxyPWtbMV0sdT1lLzIsaT1yLzIsbz1aby5pbnRlcnBvbGF0ZVpvb20oWyh1LVMu
eCkvUy5rLChpLVMueSkvUy5rLGUvUy5rXSxbKHUtdC54KS90LmssKGktdC55KS90LmssZS90Lmtd
KTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9byh0KSxjPWUvclsyXTt0aGlzLl9fY2hhcnRfXz1T
PXt4OnUtclswXSpjLHk6aS1yWzFdKmMsazpjfSxhKG4pfX0pLmVhY2goImVuZC56b29tIixmdW5j
dGlvbigpe2Mobil9KToodGhpcy5fX2NoYXJ0X189UyxvKG4pLGEobiksYyhuKSl9KX0sbi50cmFu
c2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9e3g6K3RbMF0seTor
dFsxXSxrOlMua30saSgpLG4pOltTLngsUy55XX0sbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4g
YXJndW1lbnRzLmxlbmd0aD8oUz17eDpTLngseTpTLnksazordH0saSgpLG4pOlMua30sbi5zY2Fs
ZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1udWxsPT10P3Fh
OlsrdFswXSwrdFsxXV0sbik6RX0sbi5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KHY9dCYmWyt0WzBdLCt0WzFdXSxuKTp2fSxuLnNpemU9ZnVuY3Rpb24odCl7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9dCYmWyt0WzBdLCt0WzFdXSxuKTprfSxuLng9ZnVuY3Rp
b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCx4PXQuY29weSgpLFM9e3g6MCx5OjAs
azoxfSxuKTpffSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxi
PXQuY29weSgpLFM9e3g6MCx5OjAsazoxfSxuKTp3fSxaby5yZWJpbmQobixMLCJvbiIpfTt2YXIg
VGEscWE9WzAsMS8wXSxSYT0ib253aGVlbCJpbiAkbz8oVGE9ZnVuY3Rpb24oKXtyZXR1cm4tWm8u
ZXZlbnQuZGVsdGFZKihaby5ldmVudC5kZWx0YU1vZGU/MTIwOjEpfSwid2hlZWwiKToib25tb3Vz
ZXdoZWVsImluICRvPyhUYT1mdW5jdGlvbigpe3JldHVybiBaby5ldmVudC53aGVlbERlbHRhfSwi
bW91c2V3aGVlbCIpOihUYT1mdW5jdGlvbigpe3JldHVybi1aby5ldmVudC5kZXRhaWx9LCJNb3pN
b3VzZVBpeGVsU2Nyb2xsIik7Wm8uY29sb3I9ZXQsZXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LFpvLmhzbD1ydDt2YXIgRGE9cnQucHJvdG90eXBl
PW5ldyBldDtEYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1
bWVudHMubGVuZ3RoP246MSksbmV3IHJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL24pfSxEYS5kYXJr
ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9uOjEp
LG5ldyBydCh0aGlzLmgsdGhpcy5zLG4qdGhpcy5sKX0sRGEucmdiPWZ1bmN0aW9uKCl7cmV0dXJu
IHV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sWm8uaGNsPWl0O3ZhciBQYT1pdC5wcm90b3R5cGU9
bmV3IGV0O1BhLmJyaWdodGVyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgaXQodGhpcy5oLHRoaXMu
YyxNYXRoLm1pbigxMDAsdGhpcy5sK1VhKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0sUGEuZGFy
a2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgaXQodGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRo
aXMubC1VYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFBhLnJnYj1mdW5jdGlvbigpe3JldHVy
biBvdCh0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LFpvLmxhYj1hdDt2YXIgVWE9MTgsamE9
Ljk1MDQ3LEhhPTEsRmE9MS4wODg4MyxPYT1hdC5wcm90b3R5cGU9bmV3IGV0O09hLmJyaWdodGVy
PWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgYXQoTWF0aC5taW4oMTAwLHRoaXMubCtVYSooYXJndW1l
bnRzLmxlbmd0aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0sT2EuZGFya2VyPWZ1bmN0aW9uKG4pe3Jl
dHVybiBuZXcgYXQoTWF0aC5tYXgoMCx0aGlzLmwtVWEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSks
dGhpcy5hLHRoaXMuYil9LE9hLnJnYj1mdW5jdGlvbigpe3JldHVybiBjdCh0aGlzLmwsdGhpcy5h
LHRoaXMuYil9LFpvLnJnYj1ndDt2YXIgWWE9Z3QucHJvdG90eXBlPW5ldyBldDtZYS5icmlnaHRl
cj1mdW5jdGlvbihuKXtuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKTt2YXIgdD10
aGlzLnIsZT10aGlzLmcscj10aGlzLmIsdT0zMDtyZXR1cm4gdHx8ZXx8cj8odCYmdT50JiYodD11
KSxlJiZ1PmUmJihlPXUpLHImJnU+ciYmKHI9dSksbmV3IGd0KE1hdGgubWluKDI1NSx0L24pLE1h
dGgubWluKDI1NSxlL24pLE1hdGgubWluKDI1NSxyL24pKSk6bmV3IGd0KHUsdSx1KX0sWWEuZGFy
a2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjox
KSxuZXcgZ3Qobip0aGlzLnIsbip0aGlzLmcsbip0aGlzLmIpfSxZYS5oc2w9ZnVuY3Rpb24oKXty
ZXR1cm4geXQodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxZYS50b1N0cmluZz1mdW5jdGlvbigpe3Jl
dHVybiIjIitkdCh0aGlzLnIpK2R0KHRoaXMuZykrZHQodGhpcy5iKX07dmFyIElhPVpvLm1hcCh7
YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFt
YXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAy
NDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0Ojkw
NTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4
LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29y
bmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5
YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5
MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRh
cmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5
OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUw
NCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6
NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0
dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBz
a3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToy
MDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVl
bjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6
MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdy
ZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5
NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxp
dm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJs
dXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdo
dGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGln
aHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46
OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9u
OjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdo
dHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6
MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMz
MCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFx
dWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVk
aXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6
ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxt
ZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2
MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZTox
Njc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFi
OjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3
MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lz
ZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVh
Y2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3
LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmVkOjE2NzExNjgwLHJvc3licm93
bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjox
NjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3
NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xh
dGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzox
Njc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAs
dGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1
MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVz
bW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtJYS5m
b3JFYWNoKGZ1bmN0aW9uKG4sdCl7SWEuc2V0KG4scHQodCkpfSksWm8uZnVuY3Rvcj1idCxaby54
aHI9U3Qod3QpLFpvLmRzdj1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlLGkpe2FyZ3VtZW50
cy5sZW5ndGg8MyYmKGk9ZSxlPW51bGwpO3ZhciBvPWt0KG4sdCxudWxsPT1lP3I6dShlKSxpKTty
ZXR1cm4gby5yb3c9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5yZXNwb25z
ZShudWxsPT0oZT1uKT9yOnUobikpOmV9LG99ZnVuY3Rpb24gcihuKXtyZXR1cm4gZS5wYXJzZShu
LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUu
cGFyc2UodC5yZXNwb25zZVRleHQsbil9fWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubWFwKG8pLmpv
aW4obil9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gYS50ZXN0KG4pPyciJytuLnJlcGxhY2UoL1wiL2cs
JyIiJykrJyInOm59dmFyIGE9bmV3IFJlZ0V4cCgnWyInK24rIlxuXSIpLGM9bi5jaGFyQ29kZUF0
KDApO3JldHVybiBlLnBhcnNlPWZ1bmN0aW9uKG4sdCl7dmFyIHI7cmV0dXJuIGUucGFyc2VSb3dz
KG4sZnVuY3Rpb24obixlKXtpZihyKXJldHVybiByKG4sZS0xKTt2YXIgdT1uZXcgRnVuY3Rpb24o
ImQiLCJyZXR1cm4geyIrbi5tYXAoZnVuY3Rpb24obix0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnko
bikrIjogZFsiK3QrIl0ifSkuam9pbigiLCIpKyJ9Iik7cj10P2Z1bmN0aW9uKG4sZSl7cmV0dXJu
IHQodShuKSxlKX06dX0pfSxlLnBhcnNlUm93cz1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUoKXtp
ZihsPj1zKXJldHVybiBvO2lmKHUpcmV0dXJuIHU9ITEsaTt2YXIgdD1sO2lmKDM0PT09bi5jaGFy
Q29kZUF0KHQpKXtmb3IodmFyIGU9dDtlKys8czspaWYoMzQ9PT1uLmNoYXJDb2RlQXQoZSkpe2lm
KDM0IT09bi5jaGFyQ29kZUF0KGUrMSkpYnJlYWs7KytlfWw9ZSsyO3ZhciByPW4uY2hhckNvZGVB
dChlKzEpO3JldHVybiAxMz09PXI/KHU9ITAsMTA9PT1uLmNoYXJDb2RlQXQoZSsyKSYmKytsKTox
MD09PXImJih1PSEwKSxuLnN1YnN0cmluZyh0KzEsZSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7
cz5sOyl7dmFyIHI9bi5jaGFyQ29kZUF0KGwrKyksYT0xO2lmKDEwPT09cil1PSEwO2Vsc2UgaWYo
MTM9PT1yKXU9ITAsMTA9PT1uLmNoYXJDb2RlQXQobCkmJigrK2wsKythKTtlbHNlIGlmKHIhPT1j
KWNvbnRpbnVlO3JldHVybiBuLnN1YnN0cmluZyh0LGwtYSl9cmV0dXJuIG4uc3Vic3RyaW5nKHQp
fWZvcih2YXIgcix1LGk9e30sbz17fSxhPVtdLHM9bi5sZW5ndGgsbD0wLGY9MDsocj1lKCkpIT09
bzspe2Zvcih2YXIgaD1bXTtyIT09aSYmciE9PW87KWgucHVzaChyKSxyPWUoKTsoIXR8fChoPXQo
aCxmKyspKSkmJmEucHVzaChoKX1yZXR1cm4gYX0sZS5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoQXJy
YXkuaXNBcnJheSh0WzBdKSlyZXR1cm4gZS5mb3JtYXRSb3dzKHQpO3ZhciByPW5ldyBoLHU9W107
cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gbilyLmhhcyh0KXx8dS5w
dXNoKHIuYWRkKHQpKX0pLFt1Lm1hcChvKS5qb2luKG4pXS5jb25jYXQodC5tYXAoZnVuY3Rpb24o
dCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBvKHRbbl0pfSkuam9pbihuKX0pKS5q
b2luKCJcbiIpfSxlLmZvcm1hdFJvd3M9ZnVuY3Rpb24obil7cmV0dXJuIG4ubWFwKGkpLmpvaW4o
IlxuIil9LGV9LFpvLmNzdj1aby5kc3YoIiwiLCJ0ZXh0L2NzdiIpLFpvLnRzdj1aby5kc3YoIiAg
ICAiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIiksWm8udG91Y2g9ZnVuY3Rpb24obix0LGUp
e2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKGU9dCx0PXgoKS5jaGFuZ2VkVG91Y2hlcyksdClmb3Io
dmFyIHIsdT0wLGk9dC5sZW5ndGg7aT51OysrdSlpZigocj10W3VdKS5pZGVudGlmaWVyPT09ZSly
ZXR1cm4gWihuLHIpfTt2YXIgWmEsVmEsWGEsJGEsQmEsV2E9V29bcChXbywicmVxdWVzdEFuaW1h
dGlvbkZyYW1lIildfHxmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtaby50aW1lcj1mdW5j
dGlvbihuLHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDsyPnImJih0PTApLDM+ciYmKGU9RGF0
ZS5ub3coKSk7dmFyIHU9ZSt0LGk9e2M6bix0OnUsZjohMSxuOm51bGx9O1ZhP1ZhLm49aTpaYT1p
LFZhPWksWGF8fCgkYT1jbGVhclRpbWVvdXQoJGEpLFhhPTEsV2EoQXQpKX0sWm8udGltZXIuZmx1
c2g9ZnVuY3Rpb24oKXtDdCgpLE50KCl9LFpvLnJvdW5kPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ/
TWF0aC5yb3VuZChuKih0PU1hdGgucG93KDEwLHQpKSkvdDpNYXRoLnJvdW5kKG4pfTt2YXIgSmE9
WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQ
IiwiRSIsIloiLCJZIl0ubWFwKEx0KTtaby5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24obix0KXt2YXIg
ZT0wO3JldHVybiBuJiYoMD5uJiYobio9LTEpLHQmJihuPVpvLnJvdW5kKG4senQobix0KSkpLGU9
MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKG4pL01hdGguTE4xMCksZT1NYXRoLm1heCgtMjQs
TWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChlLTEpLzMpKSkpLEphWzgrZS8zXX07dmFyIEdhPS8o
PzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQr
KT8oW2EteiVdKT8vaSxLYT1aby5tYXAoe2I6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmco
Mil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobil9LG86ZnVuY3Rp
b24obil7cmV0dXJuIG4udG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJp
bmcoMTYpfSxYOmZ1bmN0aW9uKG4pe3JldHVybiBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgp
fSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LGU6ZnVuY3Rpb24obix0
KXtyZXR1cm4gbi50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9G
aXhlZCh0KX0scjpmdW5jdGlvbihuLHQpe3JldHVybihuPVpvLnJvdW5kKG4senQobix0KSkpLnRv
Rml4ZWQoTWF0aC5tYXgoMCxNYXRoLm1pbigyMCx6dChuKigxKzFlLTE1KSx0KSkpKX19KSxRYT1a
by50aW1lPXt9LG5jPURhdGU7UnQucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0
VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxs
WWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0s
Z2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29u
ZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygp
fSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vj
b25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0
aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2Yo
KX0sc2V0RGF0ZTpmdW5jdGlvbigpe3RjLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50
cyl9LHNldERheTpmdW5jdGlvbigpe3RjLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRz
KX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXt0Yy5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8s
YXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXt0Yy5zZXRVVENIb3Vycy5hcHBseSh0aGlz
Ll8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7dGMuc2V0VVRDTWlsbGlz
ZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7dGMu
c2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24o
KXt0Yy5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5j
dGlvbigpe3RjLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6
ZnVuY3Rpb24oKXt0Yy5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIHRjPURh
dGUucHJvdG90eXBlO1FhLnllYXI9RHQoZnVuY3Rpb24obil7cmV0dXJuIG49UWEuZGF5KG4pLG4u
c2V0TW9udGgoMCwxKSxufSxmdW5jdGlvbihuLHQpe24uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVh
cigpK3QpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRGdWxsWWVhcigpfSksUWEueWVhcnM9UWEu
eWVhci5yYW5nZSxRYS55ZWFycy51dGM9UWEueWVhci51dGMucmFuZ2UsUWEuZGF5PUR0KGZ1bmN0
aW9uKG4pe3ZhciB0PW5ldyBuYygyZTMsMCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi5nZXRGdWxs
WWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSksdH0sZnVuY3Rpb24obix0KXtuLnNldERh
dGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSksUWEu
ZGF5cz1RYS5kYXkucmFuZ2UsUWEuZGF5cy51dGM9UWEuZGF5LnV0Yy5yYW5nZSxRYS5kYXlPZlll
YXI9ZnVuY3Rpb24obil7dmFyIHQ9UWEueWVhcihuKTtyZXR1cm4gTWF0aC5mbG9vcigobi10LTZl
NCoobi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0s
WyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlk
YXkiLCJzYXR1cmRheSJdLmZvckVhY2goZnVuY3Rpb24obix0KXt0PTctdDt2YXIgZT1RYVtuXT1E
dChmdW5jdGlvbihuKXtyZXR1cm4obj1RYS5kYXkobikpLnNldERhdGUobi5nZXREYXRlKCktKG4u
Z2V0RGF5KCkrdCklNyksbn0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrNypN
YXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7dmFyIGU9UWEueWVhcihuKS5nZXREYXkoKTtyZXR1
cm4gTWF0aC5mbG9vcigoUWEuZGF5T2ZZZWFyKG4pKyhlK3QpJTcpLzcpLShlIT09dCl9KTtRYVtu
KyJzIl09ZS5yYW5nZSxRYVtuKyJzIl0udXRjPWUudXRjLnJhbmdlLFFhW24rIk9mWWVhciJdPWZ1
bmN0aW9uKG4pe3ZhciBlPVFhLnllYXIobikuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKFFh
LmRheU9mWWVhcihuKSsoZSt0KSU3KS83KX19KSxRYS53ZWVrPVFhLnN1bmRheSxRYS53ZWVrcz1R
YS5zdW5kYXkucmFuZ2UsUWEud2Vla3MudXRjPVFhLnN1bmRheS51dGMucmFuZ2UsUWEud2Vla09m
WWVhcj1RYS5zdW5kYXlPZlllYXI7dmFyIGVjPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHJjPS9eXHMq
XGQrLyx1Yz0vXiUvO1pvLmxvY2FsZT1mdW5jdGlvbihuKXtyZXR1cm57bnVtYmVyRm9ybWF0OlR0
KG4pLHRpbWVGb3JtYXQ6VXQobil9fTt2YXIgaWM9Wm8ubG9jYWxlKHtkZWNpbWFsOiIuIix0aG91
c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxkYXRlVGltZToiJWEgJWIg
JWUgJVggJVkiLGRhdGU6IiVtLyVkLyVZIix0aW1lOiIlSDolTTolUyIscGVyaW9kczpbIkFNIiwi
UE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJz
ZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJX
ZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJj
aCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3Rv
YmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFy
IiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19
KTtaby5mb3JtYXQ9aWMubnVtYmVyRm9ybWF0LFpvLmdlbz17fSx1ZS5wcm90b3R5cGU9e3M6MCx0
OjAsYWRkOmZ1bmN0aW9uKG4pe2llKG4sdGhpcy50LG9jKSxpZShvYy5zLHRoaXMucyx0aGlzKSx0
aGlzLnM/dGhpcy50Kz1vYy50OnRoaXMucz1vYy50fSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10
aGlzLnQ9MH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgb2M9bmV3IHVl
O1pvLmdlby5zdHJlYW09ZnVuY3Rpb24obix0KXtuJiZhYy5oYXNPd25Qcm9wZXJ0eShuLnR5cGUp
P2FjW24udHlwZV0obix0KTpvZShuLHQpfTt2YXIgYWM9e0ZlYXR1cmU6ZnVuY3Rpb24obix0KXtv
ZShuLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihuLHQpe2Zvcih2YXIg
ZT1uLmZlYXR1cmVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspb2UoZVtyXS5nZW9tZXRyeSx0KX19
LGNjPXtTcGhlcmU6ZnVuY3Rpb24obix0KXt0LnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbihuLHQp
e249bi5jb29yZGluYXRlcyx0LnBvaW50KG5bMF0sblsxXSxuWzJdKX0sTXVsdGlQb2ludDpmdW5j
dGlvbihuLHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5hdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTsp
bj1lW3JdLHQucG9pbnQoblswXSxuWzFdLG5bMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKG4sdCl7
YWUobi5jb29yZGluYXRlcyx0LDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24obix0KXtmb3Io
dmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KWFlKGVbcl0sdCwwKX0s
UG9seWdvbjpmdW5jdGlvbihuLHQpe2NlKG4uY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpm
dW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5hdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8
dTspY2UoZVtyXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBl
PW4uZ2VvbWV0cmllcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KW9lKGVbcl0sdCl9fTtaby5nZW8u
YXJlYT1mdW5jdGlvbihuKXtyZXR1cm4gc2M9MCxaby5nZW8uc3RyZWFtKG4sZmMpLHNjfTt2YXIg
c2MsbGM9bmV3IHVlLGZjPXtzcGhlcmU6ZnVuY3Rpb24oKXtzYys9NCpiYX0scG9pbnQ6dixsaW5l
U3RhcnQ6dixsaW5lRW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bGMucmVzZXQoKSxmYy5s
aW5lU3RhcnQ9c2V9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgbj0yKmxjO3NjKz0wPm4/NCpi
YStuOm4sZmMubGluZVN0YXJ0PWZjLmxpbmVFbmQ9ZmMucG9pbnQ9dn19O1pvLmdlby5ib3VuZHM9
ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdCl7eC5wdXNoKE09W2w9bixoPW5dKSxmPnQmJihmPXQp
LHQ+ZyYmKGc9dCl9ZnVuY3Rpb24gdCh0LGUpe3ZhciByPWxlKFt0KkFhLGUqQWFdKTtpZihtKXt2
YXIgdT1oZShtLHIpLGk9W3VbMV0sLXVbMF0sMF0sbz1oZShpLHUpO3ZlKG8pLG89ZGUobyk7dmFy
IGM9dC1wLHM9Yz4wPzE6LTEsdj1vWzBdKkNhKnMsZD11YShjKT4xODA7aWYoZF4odj5zKnAmJnMq
dD52KSl7dmFyIHk9b1sxXSpDYTt5PmcmJihnPXkpfWVsc2UgaWYodj0odiszNjApJTM2MC0xODAs
ZF4odj5zKnAmJnMqdD52KSl7dmFyIHk9LW9bMV0qQ2E7Zj55JiYoZj15KX1lbHNlIGY+ZSYmKGY9
ZSksZT5nJiYoZz1lKTtkP3A+dD9hKGwsdCk+YShsLGgpJiYoaD10KTphKHQsaCk+YShsLGgpJiYo
bD10KTpoPj1sPyhsPnQmJihsPXQpLHQ+aCYmKGg9dCkpOnQ+cD9hKGwsdCk+YShsLGgpJiYoaD10
KTphKHQsaCk+YShsLGgpJiYobD10KX1lbHNlIG4odCxlKTttPXIscD10fWZ1bmN0aW9uIGUoKXtf
LnBvaW50PXR9ZnVuY3Rpb24gcigpe01bMF09bCxNWzFdPWgsXy5wb2ludD1uLG09bnVsbH1mdW5j
dGlvbiB1KG4sZSl7aWYobSl7dmFyIHI9bi1wO3krPXVhKHIpPjE4MD9yKyhyPjA/MzYwOi0zNjAp
OnJ9ZWxzZSB2PW4sZD1lO2ZjLnBvaW50KG4sZSksdChuLGUpfWZ1bmN0aW9uIGkoKXtmYy5saW5l
U3RhcnQoKX1mdW5jdGlvbiBvKCl7dSh2LGQpLGZjLmxpbmVFbmQoKSx1YSh5KT5rYSYmKGw9LSho
PTE4MCkpLE1bMF09bCxNWzFdPWgsbT1udWxsfWZ1bmN0aW9uIGEobix0KXtyZXR1cm4odC09bik8
MD90KzM2MDp0fWZ1bmN0aW9uIGMobix0KXtyZXR1cm4gblswXS10WzBdfWZ1bmN0aW9uIHMobix0
KXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1uJiZuPD10WzFdOm48dFswXXx8dFsxXTxufXZhciBs
LGYsaCxnLHAsdixkLG0seSx4LE0sXz17cG9pbnQ6bixsaW5lU3RhcnQ6ZSxsaW5lRW5kOnIscG9s
eWdvblN0YXJ0OmZ1bmN0aW9uKCl7Xy5wb2ludD11LF8ubGluZVN0YXJ0PWksXy5saW5lRW5kPW8s
eT0wLGZjLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZmMucG9seWdvbkVu
ZCgpLF8ucG9pbnQ9bixfLmxpbmVTdGFydD1lLF8ubGluZUVuZD1yLDA+bGM/KGw9LShoPTE4MCks
Zj0tKGc9OTApKTp5PmthP2c9OTA6LWthPnkmJihmPS05MCksTVswXT1sLE1bMV09aH19O3JldHVy
biBmdW5jdGlvbihuKXtnPWg9LShsPWY9MS8wKSx4PVtdLFpvLmdlby5zdHJlYW0obixfKTt2YXIg
dD14Lmxlbmd0aDtpZih0KXt4LnNvcnQoYyk7Zm9yKHZhciBlLHI9MSx1PXhbMF0saT1bdV07dD5y
OysrcillPXhbcl0scyhlWzBdLHUpfHxzKGVbMV0sdSk/KGEodVswXSxlWzFdKT5hKHVbMF0sdVsx
XSkmJih1WzFdPWVbMV0pLGEoZVswXSx1WzFdKT5hKHVbMF0sdVsxXSkmJih1WzBdPWVbMF0pKTpp
LnB1c2godT1lKTsKK2Zvcih2YXIgbyxlLHA9LTEvMCx0PWkubGVuZ3RoLTEscj0wLHU9aVt0XTt0
Pj1yO3U9ZSwrK3IpZT1pW3JdLChvPWEodVsxXSxlWzBdKSk+cCYmKHA9byxsPWVbMF0saD11WzFd
KX1yZXR1cm4geD1NPW51bGwsMS8wPT09bHx8MS8wPT09Zj9bWzAvMCwwLzBdLFswLzAsMC8wXV06
W1tsLGZdLFtoLGddXX19KCksWm8uZ2VvLmNlbnRyb2lkPWZ1bmN0aW9uKG4pe2hjPWdjPXBjPXZj
PWRjPW1jPXljPXhjPU1jPV9jPWJjPTAsWm8uZ2VvLnN0cmVhbShuLHdjKTt2YXIgdD1NYyxlPV9j
LHI9YmMsdT10KnQrZSplK3IqcjtyZXR1cm4gRWE+dSYmKHQ9bWMsZT15YyxyPXhjLGthPmdjJiYo
dD1wYyxlPXZjLHI9ZGMpLHU9dCp0K2UqZStyKnIsRWE+dSk/WzAvMCwwLzBdOltNYXRoLmF0YW4y
KGUsdCkqQ2EsRyhyL01hdGguc3FydCh1KSkqQ2FdfTt2YXIgaGMsZ2MscGMsdmMsZGMsbWMseWMs
eGMsTWMsX2MsYmMsd2M9e3NwaGVyZTp2LHBvaW50OnllLGxpbmVTdGFydDpNZSxsaW5lRW5kOl9l
LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3djLmxpbmVTdGFydD1iZX0scG9seWdvbkVuZDpmdW5j
dGlvbigpe3djLmxpbmVTdGFydD1NZX19LFNjPUFlKHdlLFRlLFJlLFstYmEsLWJhLzJdKSxrYz0x
ZTk7Wm8uZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgbix0LGUscix1LGksbz17c3RyZWFt
OmZ1bmN0aW9uKG4pe3JldHVybiB1JiYodS52YWxpZD0hMSksdT1pKG4pLHUudmFsaWQ9ITAsdX0s
ZXh0ZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVVlKG49K2FbMF1b
MF0sdD0rYVswXVsxXSxlPSthWzFdWzBdLHI9K2FbMV1bMV0pLHUmJih1LnZhbGlkPSExLHU9bnVs
bCksbyk6W1tuLHRdLFtlLHJdXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9
LChaby5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gSGUoRmUpfSkucmF3PUZl
LFpvLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gWm8uZ2VvLmNvbmljRXF1YWxBcmVhKCku
cm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSku
c2NhbGUoMTA3MCl9LFpvLmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3Zh
ciBpPW5bMF0sbz1uWzFdO3JldHVybiB0PW51bGwsZShpLG8pLHR8fChyKGksbyksdCl8fHUoaSxv
KSx0fXZhciB0LGUscix1LGk9Wm8uZ2VvLmFsYmVycygpLG89Wm8uZ2VvLmNvbmljRXF1YWxBcmVh
KCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxh
PVpvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5Ljld
KS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbihuLGUpe3Q9W24sZV19fTtyZXR1
cm4gbi5pbnZlcnQ9ZnVuY3Rpb24obil7dmFyIHQ9aS5zY2FsZSgpLGU9aS50cmFuc2xhdGUoKSxy
PShuWzBdLWVbMF0pL3QsdT0oblsxXS1lWzFdKS90O3JldHVybih1Pj0uMTImJi4yMzQ+dSYmcj49
LS40MjUmJi0uMjE0PnI/bzp1Pj0uMTY2JiYuMjM0PnUmJnI+PS0uMjE0JiYtLjExNT5yP2E6aSku
aW52ZXJ0KG4pfSxuLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgdD1pLnN0cmVhbShuKSxlPW8uc3Ry
ZWFtKG4pLHI9YS5zdHJlYW0obik7cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4sdSl7dC5wb2ludChu
LHUpLGUucG9pbnQobix1KSxyLnBvaW50KG4sdSl9LHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJl
KCksZS5zcGhlcmUoKSxyLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFy
dCgpLGUubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGlu
ZUVuZCgpLGUubGluZUVuZCgpLHIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0
LnBvbHlnb25TdGFydCgpLGUucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKX0scG9seWdv
bkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLGUucG9seWdvbkVuZCgpLHIucG9seWdvbkVu
ZCgpfX19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhp
LnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxhLnByZWNpc2lvbih0KSxuKTppLnByZWNpc2lv
bigpfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnNjYWxl
KHQpLG8uc2NhbGUoLjM1KnQpLGEuc2NhbGUodCksbi50cmFuc2xhdGUoaS50cmFuc2xhdGUoKSkp
Omkuc2NhbGUoKX0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgp
cmV0dXJuIGkudHJhbnNsYXRlKCk7dmFyIHM9aS5zY2FsZSgpLGw9K3RbMF0sZj0rdFsxXTtyZXR1
cm4gZT1pLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbbC0uNDU1KnMsZi0uMjM4KnNdLFtsKy40
NTUqcyxmKy4yMzgqc11dKS5zdHJlYW0oYykucG9pbnQscj1vLnRyYW5zbGF0ZShbbC0uMzA3KnMs
ZisuMjAxKnNdKS5jbGlwRXh0ZW50KFtbbC0uNDI1KnMra2EsZisuMTIqcytrYV0sW2wtLjIxNCpz
LWthLGYrLjIzNCpzLWthXV0pLnN0cmVhbShjKS5wb2ludCx1PWEudHJhbnNsYXRlKFtsLS4yMDUq
cyxmKy4yMTIqc10pLmNsaXBFeHRlbnQoW1tsLS4yMTQqcytrYSxmKy4xNjYqcytrYV0sW2wtLjEx
NSpzLWthLGYrLjIzNCpzLWthXV0pLnN0cmVhbShjKS5wb2ludCxufSxuLnNjYWxlKDEwNzApfTt2
YXIgRWMsQWMsQ2MsTmMsemMsTGMsVGM9e3BvaW50OnYsbGluZVN0YXJ0OnYsbGluZUVuZDp2LHBv
bHlnb25TdGFydDpmdW5jdGlvbigpe0FjPTAsVGMubGluZVN0YXJ0PU9lfSxwb2x5Z29uRW5kOmZ1
bmN0aW9uKCl7VGMubGluZVN0YXJ0PVRjLmxpbmVFbmQ9VGMucG9pbnQ9dixFYys9dWEoQWMvMil9
fSxxYz17cG9pbnQ6WWUsbGluZVN0YXJ0OnYsbGluZUVuZDp2LHBvbHlnb25TdGFydDp2LHBvbHln
b25FbmQ6dn0sUmM9e3BvaW50OlZlLGxpbmVTdGFydDpYZSxsaW5lRW5kOiRlLHBvbHlnb25TdGFy
dDpmdW5jdGlvbigpe1JjLmxpbmVTdGFydD1CZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1JjLnBv
aW50PVZlLFJjLmxpbmVTdGFydD1YZSxSYy5saW5lRW5kPSRlfX07Wm8uZ2VvLnBhdGg9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBuJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJmkucG9p
bnRSYWRpdXMoK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxvJiZvLnZhbGlkfHwobz11KGkpKSxa
by5nZW8uc3RyZWFtKG4sbykpLGkucmVzdWx0KCl9ZnVuY3Rpb24gdCgpe3JldHVybiBvPW51bGws
bn12YXIgZSxyLHUsaSxvLGE9NC41O3JldHVybiBuLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIEVj
PTAsWm8uZ2VvLnN0cmVhbShuLHUoVGMpKSxFY30sbi5jZW50cm9pZD1mdW5jdGlvbihuKXtyZXR1
cm4gcGM9dmM9ZGM9bWM9eWM9eGM9TWM9X2M9YmM9MCxaby5nZW8uc3RyZWFtKG4sdShSYykpLGJj
P1tNYy9iYyxfYy9iY106eGM/W21jL3hjLHljL3hjXTpkYz9bcGMvZGMsdmMvZGNdOlswLzAsMC8w
XX0sbi5ib3VuZHM9ZnVuY3Rpb24obil7cmV0dXJuIHpjPUxjPS0oQ2M9TmM9MS8wKSxaby5nZW8u
c3RyZWFtKG4sdShxYykpLFtbQ2MsTmNdLFt6YyxMY11dfSxuLnByb2plY3Rpb249ZnVuY3Rpb24o
bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9KGU9bik/bi5zdHJlYW18fEdlKG4pOnd0LHQo
KSk6ZX0sbi5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51
bGw9PShyPW4pP25ldyBJZTpuZXcgV2UobiksImZ1bmN0aW9uIiE9dHlwZW9mIGEmJmkucG9pbnRS
YWRpdXMoYSksdCgpKTpyfSxuLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0
KSxuKTphfSxuLnByb2plY3Rpb24oWm8uZ2VvLmFsYmVyc1VzYSgpKS5jb250ZXh0KG51bGwpfSxa
by5nZW8udHJhbnNmb3JtPWZ1bmN0aW9uKG4pe3JldHVybntzdHJlYW06ZnVuY3Rpb24odCl7dmFy
IGU9bmV3IEtlKHQpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX19fSxLZS5wcm90
b3R5cGU9e3BvaW50OmZ1bmN0aW9uKG4sdCl7dGhpcy5zdHJlYW0ucG9pbnQobix0KX0sc3BoZXJl
OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3Ro
aXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGlu
ZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQo
KX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19LFpvLmdl
by5wcm9qZWN0aW9uPW5yLFpvLmdlby5wcm9qZWN0aW9uTXV0YXRvcj10ciwoWm8uZ2VvLmVxdWly
ZWN0YW5ndWxhcj1mdW5jdGlvbigpe3JldHVybiBucihycil9KS5yYXc9cnIuaW52ZXJ0PXJyLFpv
Lmdlby5yb3RhdGlvbj1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0PW4odFswXSpB
YSx0WzFdKkFhKSx0WzBdKj1DYSx0WzFdKj1DYSx0fXJldHVybiBuPWlyKG5bMF0lMzYwKkFhLG5b
MV0qQWEsbi5sZW5ndGg+Mj9uWzJdKkFhOjApLHQuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0
PW4uaW52ZXJ0KHRbMF0qQWEsdFsxXSpBYSksdFswXSo9Q2EsdFsxXSo9Q2EsdH0sdH0sdXIuaW52
ZXJ0PXJyLFpvLmdlby5jaXJjbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG49ImZ1bmN0
aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cix0PWlyKC1uWzBdKkFhLC1u
WzFdKkFhLDApLmludmVydCx1PVtdO3JldHVybiBlKG51bGwsbnVsbCwxLHtwb2ludDpmdW5jdGlv
bihuLGUpe3UucHVzaChuPXQobixlKSksblswXSo9Q2EsblsxXSo9Q2F9fSkse3R5cGU6IlBvbHln
b24iLGNvb3JkaW5hdGVzOlt1XX19dmFyIHQsZSxyPVswLDBdLHU9NjtyZXR1cm4gbi5vcmlnaW49
ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmFuZ2xlPWZ1
bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXNyKCh0PStyKSpBYSx1KkFhKSxu
KTp0fSxuLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1z
cih0KkFhLCh1PStyKSpBYSksbik6dX0sbi5hbmdsZSg5MCl9LFpvLmdlby5kaXN0YW5jZT1mdW5j
dGlvbihuLHQpe3ZhciBlLHI9KHRbMF0tblswXSkqQWEsdT1uWzFdKkFhLGk9dFsxXSpBYSxvPU1h
dGguc2luKHIpLGE9TWF0aC5jb3MociksYz1NYXRoLnNpbih1KSxzPU1hdGguY29zKHUpLGw9TWF0
aC5zaW4oaSksZj1NYXRoLmNvcyhpKTtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNxcnQoKGU9Zipv
KSplKyhlPXMqbC1jKmYqYSkqZSksYypsK3MqZiphKX0sWm8uZ2VvLmdyYXRpY3VsZT1mdW5jdGlv
bigpe2Z1bmN0aW9uIG4oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRl
czp0KCl9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gWm8ucmFuZ2UoTWF0aC5jZWlsKGkvZCkqZCx1LGQp
Lm1hcChoKS5jb25jYXQoWm8ucmFuZ2UoTWF0aC5jZWlsKHMvbSkqbSxjLG0pLm1hcChnKSkuY29u
Y2F0KFpvLnJhbmdlKE1hdGguY2VpbChyL3ApKnAsZSxwKS5maWx0ZXIoZnVuY3Rpb24obil7cmV0
dXJuIHVhKG4lZCk+a2F9KS5tYXAobCkpLmNvbmNhdChaby5yYW5nZShNYXRoLmNlaWwoYS92KSp2
LG8sdikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiB1YShuJW0pPmthfSkubWFwKGYpKX12YXIg
ZSxyLHUsaSxvLGEsYyxzLGwsZixoLGcscD0xMCx2PXAsZD05MCxtPTM2MCx5PTIuNTtyZXR1cm4g
bi5saW5lcz1mdW5jdGlvbigpe3JldHVybiB0KCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybnt0eXBl
OiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpufX0pfSxuLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1
cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2goaSkuY29uY2F0KGcoYykuc2xpY2UoMSks
aCh1KS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LG4uZXh0
ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24ubWFqb3JFeHRlbnQodCku
bWlub3JFeHRlbnQodCk6bi5taW5vckV4dGVudCgpfSxuLm1ham9yRXh0ZW50PWZ1bmN0aW9uKHQp
e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0WzBdWzBdLHU9K3RbMV1bMF0scz0rdFswXVsx
XSxjPSt0WzFdWzFdLGk+dSYmKHQ9aSxpPXUsdT10KSxzPmMmJih0PXMscz1jLGM9dCksbi5wcmVj
aXNpb24oeSkpOltbaSxzXSxbdSxjXV19LG4ubWlub3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJu
IGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sZT0rdFsxXVswXSxhPSt0WzBdWzFdLG89K3Rb
MV1bMV0scj5lJiYodD1yLHI9ZSxlPXQpLGE+byYmKHQ9YSxhPW8sbz10KSxuLnByZWNpc2lvbih5
KSk6W1tyLGFdLFtlLG9dXX0sbi5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoP24ubWFqb3JTdGVwKHQpLm1pbm9yU3RlcCh0KTpuLm1pbm9yU3RlcCgpfSxuLm1ham9yU3Rl
cD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdFswXSxtPSt0WzFdLG4p
OltkLG1dfSxuLm1pbm9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
cD0rdFswXSx2PSt0WzFdLG4pOltwLHZdfSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4g
YXJndW1lbnRzLmxlbmd0aD8oeT0rdCxsPWZyKGEsbyw5MCksZj1ocihyLGUseSksaD1mcihzLGMs
OTApLGc9aHIoaSx1LHkpLG4pOnl9LG4ubWFqb3JFeHRlbnQoW1stMTgwLC05MCtrYV0sWzE4MCw5
MC1rYV1dKS5taW5vckV4dGVudChbWy0xODAsLTgwLWthXSxbMTgwLDgwK2thXV0pfSxaby5nZW8u
Z3JlYXRBcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmci
LGNvb3JkaW5hdGVzOlt0fHxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlfHx1LmFwcGx5KHRoaXMs
YXJndW1lbnRzKV19fXZhciB0LGUscj1ncix1PXByO3JldHVybiBuLmRpc3RhbmNlPWZ1bmN0aW9u
KCl7cmV0dXJuIFpvLmdlby5kaXN0YW5jZSh0fHxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlfHx1
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhyPWUsdD0iZnVuY3Rpb24iPT10eXBlb2YgZT9udWxsOmUsbik6cn0sbi50
YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxlPSJmdW5jdGlv
biI9PXR5cGVvZiB0P251bGw6dCxuKTp1fSxuLnByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBh
cmd1bWVudHMubGVuZ3RoP246MH0sbn0sWm8uZ2VvLmludGVycG9sYXRlPWZ1bmN0aW9uKG4sdCl7
cmV0dXJuIHZyKG5bMF0qQWEsblsxXSpBYSx0WzBdKkFhLHRbMV0qQWEpfSxaby5nZW8ubGVuZ3Ro
PWZ1bmN0aW9uKG4pe3JldHVybiBEYz0wLFpvLmdlby5zdHJlYW0obixQYyksRGN9O3ZhciBEYyxQ
Yz17c3BoZXJlOnYscG9pbnQ6dixsaW5lU3RhcnQ6ZHIsbGluZUVuZDp2LHBvbHlnb25TdGFydDp2
LHBvbHlnb25FbmQ6dn0sVWM9bXIoZnVuY3Rpb24obil7cmV0dXJuIE1hdGguc3FydCgyLygxK24p
KX0sZnVuY3Rpb24obil7cmV0dXJuIDIqTWF0aC5hc2luKG4vMil9KTsoWm8uZ2VvLmF6aW11dGhh
bEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBucihVYyl9KS5yYXc9VWM7dmFyIGpjPW1yKGZ1
bmN0aW9uKG4pe3ZhciB0PU1hdGguYWNvcyhuKTtyZXR1cm4gdCYmdC9NYXRoLnNpbih0KX0sd3Qp
Oyhaby5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnIoamMpfSku
cmF3PWpjLChaby5nZW8uY29uaWNDb25mb3JtYWw9ZnVuY3Rpb24oKXtyZXR1cm4gSGUoeXIpfSku
cmF3PXlyLChaby5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBIZSh4cil9
KS5yYXc9eHI7dmFyIEhjPW1yKGZ1bmN0aW9uKG4pe3JldHVybiAxL259LE1hdGguYXRhbik7KFpv
Lmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBucihIYyl9KS5yYXc9SGMsTXIuaW52ZXJ0
PWZ1bmN0aW9uKG4sdCl7cmV0dXJuW24sMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLVNhXX0sKFpv
Lmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBfcihNcil9KS5yYXc9TXI7dmFyIEZjPW1y
KGZ1bmN0aW9uKCl7cmV0dXJuIDF9LE1hdGguYXNpbik7KFpvLmdlby5vcnRob2dyYXBoaWM9ZnVu
Y3Rpb24oKXtyZXR1cm4gbnIoRmMpfSkucmF3PUZjO3ZhciBPYz1tcihmdW5jdGlvbihuKXtyZXR1
cm4gMS8oMStuKX0sZnVuY3Rpb24obil7cmV0dXJuIDIqTWF0aC5hdGFuKG4pfSk7KFpvLmdlby5z
dGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIG5yKE9jKX0pLnJhdz1PYyxici5pbnZlcnQ9
ZnVuY3Rpb24obix0KXtyZXR1cm5bLXQsMipNYXRoLmF0YW4oTWF0aC5leHAobikpLVNhXX0sKFpv
Lmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgbj1fcihiciksdD1uLmNlbnRl
cixlPW4ucm90YXRlO3JldHVybiBuLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj90KFstblsx
XSxuWzBdXSk6KG49dCgpLFtuWzFdLC1uWzBdXSl9LG4ucm90YXRlPWZ1bmN0aW9uKG4pe3JldHVy
biBuP2UoW25bMF0sblsxXSxuLmxlbmd0aD4yP25bMl0rOTA6OTBdKToobj1lKCksW25bMF0sblsx
XSxuWzJdLTkwXSl9LGUoWzAsMCw5MF0pfSkucmF3PWJyLFpvLmdlb209e30sWm8uZ2VvbS5odWxs
PWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQobil7aWYobi5sZW5ndGg8MylyZXR1cm5bXTt2YXIgdCx1
PWJ0KGUpLGk9YnQociksbz1uLmxlbmd0aCxhPVtdLGM9W107Zm9yKHQ9MDtvPnQ7dCsrKWEucHVz
aChbK3UuY2FsbCh0aGlzLG5bdF0sdCksK2kuY2FsbCh0aGlzLG5bdF0sdCksdF0pO2ZvcihhLnNv
cnQoRXIpLHQ9MDtvPnQ7dCsrKWMucHVzaChbYVt0XVswXSwtYVt0XVsxXV0pO3ZhciBzPWtyKGEp
LGw9a3IoYyksZj1sWzBdPT09c1swXSxoPWxbbC5sZW5ndGgtMV09PT1zW3MubGVuZ3RoLTFdLGc9
W107Zm9yKHQ9cy5sZW5ndGgtMTt0Pj0wOy0tdClnLnB1c2goblthW3NbdF1dWzJdXSk7Zm9yKHQ9
K2Y7dDxsLmxlbmd0aC1oOysrdClnLnB1c2goblthW2xbdF1dWzJdXSk7cmV0dXJuIGd9dmFyIGU9
d3Iscj1TcjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KG4pOih0Lng9ZnVuY3Rpb24obil7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGg/KHI9bix0KTpyfSx0KX0sWm8uZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKG4p
e3JldHVybiBzYShuLFljKSxufTt2YXIgWWM9Wm8uZ2VvbS5wb2x5Z29uLnByb3RvdHlwZT1bXTtZ
Yy5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQ9LTEsZT10aGlzLmxlbmd0aCxyPXRoaXNbZS0x
XSx1PTA7Kyt0PGU7KW49cixyPXRoaXNbdF0sdSs9blsxXSpyWzBdLW5bMF0qclsxXTtyZXR1cm4u
NSp1fSxZYy5jZW50cm9pZD1mdW5jdGlvbihuKXt2YXIgdCxlLHI9LTEsdT10aGlzLmxlbmd0aCxp
PTAsbz0wLGE9dGhpc1t1LTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwobj0tMS8oNip0aGlzLmFy
ZWEoKSkpOysrcjx1Oyl0PWEsYT10aGlzW3JdLGU9dFswXSphWzFdLWFbMF0qdFsxXSxpKz0odFsw
XSthWzBdKSplLG8rPSh0WzFdK2FbMV0pKmU7cmV0dXJuW2kqbixvKm5dfSxZYy5jbGlwPWZ1bmN0
aW9uKG4pe2Zvcih2YXIgdCxlLHIsdSxpLG8sYT1OcihuKSxjPS0xLHM9dGhpcy5sZW5ndGgtTnIo
dGhpcyksbD10aGlzW3MtMV07KytjPHM7KXtmb3IodD1uLnNsaWNlKCksbi5sZW5ndGg9MCx1PXRo
aXNbY10saT10WyhyPXQubGVuZ3RoLWEpLTFdLGU9LTE7KytlPHI7KW89dFtlXSxBcihvLGwsdSk/
KEFyKGksbCx1KXx8bi5wdXNoKENyKGksbyxsLHUpKSxuLnB1c2gobykpOkFyKGksbCx1KSYmbi5w
dXNoKENyKGksbyxsLHUpKSxpPW87YSYmbi5wdXNoKG5bMF0pLGw9dX1yZXR1cm4gbn07dmFyIElj
LFpjLFZjLFhjLCRjLEJjPVtdLFdjPVtdO1VyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7
Zm9yKHZhciBuLHQ9dGhpcy5lZGdlcyxlPXQubGVuZ3RoO2UtLTspbj10W2VdLmVkZ2Usbi5iJiZu
LmF8fHQuc3BsaWNlKGUsMSk7cmV0dXJuIHQuc29ydChIciksdC5sZW5ndGh9LFdyLnByb3RvdHlw
ZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5l
ZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRo
aXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LEpyLnByb3RvdHlwZT17aW5zZXJ0OmZ1
bmN0aW9uKG4sdCl7dmFyIGUscix1O2lmKG4pe2lmKHQuUD1uLHQuTj1uLk4sbi5OJiYobi5OLlA9
dCksbi5OPXQsbi5SKXtmb3Iobj1uLlI7bi5MOyluPW4uTDtuLkw9dH1lbHNlIG4uUj10O2U9bn1l
bHNlIHRoaXMuXz8obj1udSh0aGlzLl8pLHQuUD1udWxsLHQuTj1uLG4uUD1uLkw9dCxlPW4pOih0
LlA9dC5OPW51bGwsdGhpcy5fPXQsZT1udWxsKTtmb3IodC5MPXQuUj1udWxsLHQuVT1lLHQuQz0h
MCxuPXQ7ZSYmZS5DOylyPWUuVSxlPT09ci5MPyh1PXIuUix1JiZ1LkM/KGUuQz11LkM9ITEsci5D
PSEwLG49cik6KG49PT1lLlImJihLcih0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxR
cih0aGlzLHIpKSk6KHU9ci5MLHUmJnUuQz8oZS5DPXUuQz0hMSxyLkM9ITAsbj1yKToobj09PWUu
TCYmKFFyKHRoaXMsZSksbj1lLGU9bi5VKSxlLkM9ITEsci5DPSEwLEtyKHRoaXMscikpKSxlPW4u
VTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKG4pe24uTiYmKG4uTi5QPW4uUCksbi5QJiYo
bi5QLk49bi5OKSxuLk49bi5QPW51bGw7dmFyIHQsZSxyLHU9bi5VLGk9bi5MLG89bi5SO2lmKGU9
aT9vP251KG8pOmk6byx1P3UuTD09PW4/dS5MPWU6dS5SPWU6dGhpcy5fPWUsaSYmbz8ocj1lLkMs
ZS5DPW4uQyxlLkw9aSxpLlU9ZSxlIT09bz8odT1lLlUsZS5VPW4uVSxuPWUuUix1Lkw9bixlLlI9
byxvLlU9ZSk6KGUuVT11LHU9ZSxuPWUuUikpOihyPW4uQyxuPWUpLG4mJihuLlU9dSksIXIpe2lm
KG4mJm4uQylyZXR1cm4gbi5DPSExLHZvaWQgMDtkb3tpZihuPT09dGhpcy5fKWJyZWFrO2lmKG49
PT11Lkwpe2lmKHQ9dS5SLHQuQyYmKHQuQz0hMSx1LkM9ITAsS3IodGhpcyx1KSx0PXUuUiksdC5M
JiZ0LkwuQ3x8dC5SJiZ0LlIuQyl7dC5SJiZ0LlIuQ3x8KHQuTC5DPSExLHQuQz0hMCxRcih0aGlz
LHQpLHQ9dS5SKSx0LkM9dS5DLHUuQz10LlIuQz0hMSxLcih0aGlzLHUpLG49dGhpcy5fO2JyZWFr
fX1lbHNlIGlmKHQ9dS5MLHQuQyYmKHQuQz0hMSx1LkM9ITAsUXIodGhpcyx1KSx0PXUuTCksdC5M
JiZ0LkwuQ3x8dC5SJiZ0LlIuQyl7dC5MJiZ0LkwuQ3x8KHQuUi5DPSExLHQuQz0hMCxLcih0aGlz
LHQpLHQ9dS5MKSx0LkM9dS5DLHUuQz10LkwuQz0hMSxRcih0aGlzLHUpLG49dGhpcy5fO2JyZWFr
fXQuQz0hMCxuPXUsdT11LlV9d2hpbGUoIW4uQyk7biYmKG4uQz0hMSl9fX0sWm8uZ2VvbS52b3Jv
bm9pPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQobil7dmFyIHQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxy
PWFbMF1bMF0sdT1hWzBdWzFdLGk9YVsxXVswXSxvPWFbMV1bMV07cmV0dXJuIHR1KGUobiksYSku
Y2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGEpe3ZhciBjPWUuZWRnZXMscz1lLnNpdGUsbD10W2Fd
PWMubGVuZ3RoP2MubWFwKGZ1bmN0aW9uKG4pe3ZhciB0PW4uc3RhcnQoKTtyZXR1cm5bdC54LHQu
eV19KTpzLng+PXImJnMueDw9aSYmcy55Pj11JiZzLnk8PW8/W1tyLG9dLFtpLG9dLFtpLHVdLFty
LHVdXTpbXTtsLnBvaW50PW5bYV19KSx0fWZ1bmN0aW9uIGUobil7cmV0dXJuIG4ubWFwKGZ1bmN0
aW9uKG4sdCl7cmV0dXJue3g6TWF0aC5yb3VuZChpKG4sdCkva2EpKmthLHk6TWF0aC5yb3VuZChv
KG4sdCkva2EpKmthLGk6dH19KX12YXIgcj13cix1PVNyLGk9cixvPXUsYT1KYztyZXR1cm4gbj90
KG4pOih0LmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiB0dShlKG4pKS5lZGdlcy5maWx0ZXIoZnVu
Y3Rpb24obil7cmV0dXJuIG4ubCYmbi5yfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6
blt0LmwuaV0sdGFyZ2V0Om5bdC5yLmldfX0pfSx0LnRyaWFuZ2xlcz1mdW5jdGlvbihuKXt2YXIg
dD1bXTtyZXR1cm4gdHUoZShuKSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2Zvcih2YXIg
dSxpLG89ZS5zaXRlLGE9ZS5lZGdlcy5zb3J0KEhyKSxjPS0xLHM9YS5sZW5ndGgsbD1hW3MtMV0u
ZWRnZSxmPWwubD09PW8/bC5yOmwubDsrK2M8czspdT1sLGk9ZixsPWFbY10uZWRnZSxmPWwubD09
PW8/bC5yOmwubCxyPGkuaSYmcjxmLmkmJnJ1KG8saSxmKTwwJiZ0LnB1c2goW25bcl0sbltpLmld
LG5bZi5pXV0pfSksdH0sdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhp
PWJ0KHI9biksdCk6cn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhv
PWJ0KHU9biksdCk6dX0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoPyhhPW51bGw9PW4/SmM6bix0KTphPT09SmM/bnVsbDphfSx0LnNpemU9ZnVuY3Rpb24o
bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jbGlwRXh0ZW50KG4mJltbMCwwXSxuXSk6YT09
PUpjP251bGw6YSYmYVsxXX0sdCl9O3ZhciBKYz1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtaby5n
ZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKG4pe3JldHVybiBaby5nZW9tLnZvcm9ub2koKS50cmlhbmds
ZXMobil9LFpvLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24obix0LGUscix1KXtmdW5jdGlvbiBpKG4p
e2Z1bmN0aW9uIGkobix0LGUscix1LGksbyxhKXtpZighaXNOYU4oZSkmJiFpc05hTihyKSlpZihu
LmxlYWYpe3ZhciBjPW4ueCxsPW4ueTtpZihudWxsIT1jKWlmKHVhKGMtZSkrdWEobC1yKTwuMDEp
cyhuLHQsZSxyLHUsaSxvLGEpO2Vsc2V7dmFyIGY9bi5wb2ludDtuLng9bi55PW4ucG9pbnQ9bnVs
bCxzKG4sZixjLGwsdSxpLG8sYSkscyhuLHQsZSxyLHUsaSxvLGEpfWVsc2Ugbi54PWUsbi55PXIs
bi5wb2ludD10fWVsc2UgcyhuLHQsZSxyLHUsaSxvLGEpfWZ1bmN0aW9uIHMobix0LGUscix1LG8s
YSxjKXt2YXIgcz0uNSoodSthKSxsPS41KihvK2MpLGY9ZT49cyxoPXI+PWwsZz0oaDw8MSkrZjtu
LmxlYWY9ITEsbj1uLm5vZGVzW2ddfHwobi5ub2Rlc1tnXT1vdSgpKSxmP3U9czphPXMsaD9vPWw6
Yz1sLGkobix0LGUscix1LG8sYSxjKX12YXIgbCxmLGgsZyxwLHYsZCxtLHkseD1idChhKSxNPWJ0
KGMpO2lmKG51bGwhPXQpdj10LGQ9ZSxtPXIseT11O2Vsc2UgaWYobT15PS0odj1kPTEvMCksZj1b
XSxoPVtdLHA9bi5sZW5ndGgsbylmb3IoZz0wO3A+ZzsrK2cpbD1uW2ddLGwueDx2JiYodj1sLngp
LGwueTxkJiYoZD1sLnkpLGwueD5tJiYobT1sLngpLGwueT55JiYoeT1sLnkpLGYucHVzaChsLngp
LGgucHVzaChsLnkpO2Vsc2UgZm9yKGc9MDtwPmc7KytnKXt2YXIgXz0reChsPW5bZ10sZyksYj0r
TShsLGcpO3Y+XyYmKHY9XyksZD5iJiYoZD1iKSxfPm0mJihtPV8pLGI+eSYmKHk9YiksZi5wdXNo
KF8pLGgucHVzaChiKX12YXIgdz1tLXYsUz15LWQ7dz5TP3k9ZCt3Om09ditTO3ZhciBrPW91KCk7
aWYoay5hZGQ9ZnVuY3Rpb24obil7aShrLG4sK3gobiwrK2cpLCtNKG4sZyksdixkLG0seSl9LGsu
dmlzaXQ9ZnVuY3Rpb24obil7YXUobixrLHYsZCxtLHkpfSxnPS0xLG51bGw9PXQpe2Zvcig7Kytn
PHA7KWkoayxuW2ddLGZbZ10saFtnXSx2LGQsbSx5KTstLWd9ZWxzZSBuLmZvckVhY2goay5hZGQp
O3JldHVybiBmPWg9bj1sPW51bGwsa312YXIgbyxhPXdyLGM9U3I7cmV0dXJuKG89YXJndW1lbnRz
Lmxlbmd0aCk/KGE9dXUsYz1pdSwzPT09byYmKHU9ZSxyPXQsZT10PTApLGkobikpOihpLng9ZnVu
Y3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bixpKTphfSxpLnk9ZnVuY3Rpb24o
bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bixpKTpjfSxpLmV4dGVudD1mdW5jdGlvbihu
KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09bj90PWU9cj11PW51bGw6KHQ9K25bMF1b
MF0sZT0rblswXVsxXSxyPStuWzFdWzBdLHU9K25bMV1bMV0pLGkpOm51bGw9PXQ/bnVsbDpbW3Qs
ZV0sW3IsdV1dfSxpLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51
bGw9PW4/dD1lPXI9dT1udWxsOih0PWU9MCxyPStuWzBdLHU9K25bMV0pLGkpOm51bGw9PXQ/bnVs
bDpbci10LHUtZV19LGkpfSxaby5pbnRlcnBvbGF0ZVJnYj1jdSxaby5pbnRlcnBvbGF0ZU9iamVj
dD1zdSxaby5pbnRlcnBvbGF0ZU51bWJlcj1sdSxaby5pbnRlcnBvbGF0ZVN0cmluZz1mdTt2YXIg
R2M9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLEtjPW5ldyBS
ZWdFeHAoR2Muc291cmNlLCJnIik7Wm8uaW50ZXJwb2xhdGU9aHUsWm8uaW50ZXJwb2xhdG9ycz1b
ZnVuY3Rpb24obix0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4oInN0cmluZyI9PT1lP0lhLmhhcyh0
KXx8L14oI3xyZ2JcKHxoc2xcKCkvLnRlc3QodCk/Y3U6ZnU6dCBpbnN0YW5jZW9mIGV0P2N1OkFy
cmF5LmlzQXJyYXkodCk/Z3U6Im9iamVjdCI9PT1lJiZpc05hTih0KT9zdTpsdSkobix0KX1dLFpv
LmludGVycG9sYXRlQXJyYXk9Z3U7dmFyIFFjPWZ1bmN0aW9uKCl7cmV0dXJuIHd0fSxucz1aby5t
YXAoe2xpbmVhcjpRYyxwb2x5Ok11LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbXV9LGN1YmljOmZ1
bmN0aW9uKCl7cmV0dXJuIHl1fSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gX3V9LGV4cDpmdW5jdGlv
bigpe3JldHVybiBidX0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHd1fSxlbGFzdGljOlN1LGJh
Y2s6a3UsYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIEV1fX0pLHRzPVpvLm1hcCh7ImluIjp3dCxv
dXQ6dnUsImluLW91dCI6ZHUsIm91dC1pbiI6ZnVuY3Rpb24obil7cmV0dXJuIGR1KHZ1KG4pKX19
KTtaby5lYXNlPWZ1bmN0aW9uKG4pe3ZhciB0PW4uaW5kZXhPZigiLSIpLGU9dD49MD9uLnN1YnN0
cmluZygwLHQpOm4scj10Pj0wP24uc3Vic3RyaW5nKHQrMSk6ImluIjtyZXR1cm4gZT1ucy5nZXQo
ZSl8fFFjLHI9dHMuZ2V0KHIpfHx3dCxwdShyKGUuYXBwbHkobnVsbCxWby5jYWxsKGFyZ3VtZW50
cywxKSkpKX0sWm8uaW50ZXJwb2xhdGVIY2w9QXUsWm8uaW50ZXJwb2xhdGVIc2w9Q3UsWm8uaW50
ZXJwb2xhdGVMYWI9TnUsWm8uaW50ZXJwb2xhdGVSb3VuZD16dSxaby50cmFuc2Zvcm09ZnVuY3Rp
b24obil7dmFyIHQ9JG8uY3JlYXRlRWxlbWVudE5TKFpvLm5zLnByZWZpeC5zdmcsImciKTtyZXR1
cm4oWm8udHJhbnNmb3JtPWZ1bmN0aW9uKG4pe2lmKG51bGwhPW4pe3Quc2V0QXR0cmlidXRlKCJ0
cmFuc2Zvcm0iLG4pO3ZhciBlPXQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1
cm4gbmV3IEx1KGU/ZS5tYXRyaXg6ZXMpfSkobil9LEx1LnByb3RvdHlwZS50b1N0cmluZz1mdW5j
dGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMu
cm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIg
ZXM9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtaby5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1EdSxa
by5sYXlvdXQ9e30sWm8ubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihu
KXtmb3IodmFyIHQ9W10sZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnB1c2goanUobltlXSkpO3Jl
dHVybiB0fX0sWm8ubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuLHMs
ZixoLGcscD17fSx2PVtdLGQ9Wm8ucmFuZ2UoaSksbT1bXTtmb3IoZT1bXSxyPVtdLG49MCxoPS0x
OysraDxpOyl7Zm9yKHM9MCxnPS0xOysrZzxpOylzKz11W2hdW2ddO3YucHVzaChzKSxtLnB1c2go
Wm8ucmFuZ2UoaSkpLG4rPXN9Zm9yKG8mJmQuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBvKHZb
bl0sdlt0XSl9KSxhJiZtLmZvckVhY2goZnVuY3Rpb24obix0KXtuLnNvcnQoZnVuY3Rpb24obixl
KXtyZXR1cm4gYSh1W3RdW25dLHVbdF1bZV0pfSl9KSxuPSh3YS1sKmkpL24scz0wLGg9LTE7Kyto
PGk7KXtmb3IoZj1zLGc9LTE7KytnPGk7KXt2YXIgeT1kW2hdLHg9bVt5XVtnXSxNPXVbeV1beF0s
Xz1zLGI9cys9TSpuO3BbeSsiLSIreF09e2luZGV4Onksc3ViaW5kZXg6eCxzdGFydEFuZ2xlOl8s
ZW5kQW5nbGU6Yix2YWx1ZTpNfX1yW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6ZixlbmRBbmdsZTpz
LHZhbHVlOihzLWYpL259LHMrPWx9Zm9yKGg9LTE7KytoPGk7KWZvcihnPWgtMTsrK2c8aTspe3Zh
ciB3PXBbaCsiLSIrZ10sUz1wW2crIi0iK2hdOyh3LnZhbHVlfHxTLnZhbHVlKSYmZS5wdXNoKHcu
dmFsdWU8Uy52YWx1ZT97c291cmNlOlMsdGFyZ2V0Ond9Ontzb3VyY2U6dyx0YXJnZXQ6U30pfWMm
JnQoKX1mdW5jdGlvbiB0KCl7ZS5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGMoKG4uc291cmNl
LnZhbHVlK24udGFyZ2V0LnZhbHVlKS8yLCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkv
Mil9KX12YXIgZSxyLHUsaSxvLGEsYyxzPXt9LGw9MDtyZXR1cm4gcy5tYXRyaXg9ZnVuY3Rpb24o
bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KHU9bikmJnUubGVuZ3RoLGU9cj1udWxsLHMp
OnV9LHMucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1uLGU9
cj1udWxsLHMpOmx9LHMuc29ydEdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxl
bmd0aD8obz1uLGU9cj1udWxsLHMpOm99LHMuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1
cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1uLGU9bnVsbCxzKTphfSxzLnNvcnRDaG9yZHM9ZnVuY3Rp
b24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bixlJiZ0KCkscyk6Y30scy5jaG9yZHM9
ZnVuY3Rpb24oKXtyZXR1cm4gZXx8bigpLGV9LHMuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8
fG4oKSxyfSxzfSxaby5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVy
biBmdW5jdGlvbih0LGUscix1KXtpZih0LnBvaW50IT09bil7dmFyIGk9dC5jeC1uLngsbz10LmN5
LW4ueSxhPXUtZSxjPWkqaStvKm87aWYoYz5hKmEvZCl7aWYocD5jKXt2YXIgcz10LmNoYXJnZS9j
O24ucHgtPWkqcyxuLnB5LT1vKnN9cmV0dXJuITB9aWYodC5wb2ludCYmYyYmcD5jKXt2YXIgcz10
LnBvaW50Q2hhcmdlL2M7bi5weC09aSpzLG4ucHktPW8qc319cmV0dXJuIXQuY2hhcmdlfX1mdW5j
dGlvbiB0KG4pe24ucHg9Wm8uZXZlbnQueCxuLnB5PVpvLmV2ZW50LnksYS5yZXN1bWUoKX12YXIg
ZSxyLHUsaSxvLGE9e30sYz1aby5kaXNwYXRjaCgic3RhcnQiLCJ0aWNrIiwiZW5kIikscz1bMSwx
XSxsPS45LGY9cnMsaD11cyxnPS0zMCxwPWlzLHY9LjEsZD0uNjQsbT1bXSx5PVtdO3JldHVybiBh
LnRpY2s9ZnVuY3Rpb24oKXtpZigocio9Ljk5KTwuMDA1KXJldHVybiBjLmVuZCh7dHlwZToiZW5k
IixhbHBoYTpyPTB9KSwhMDt2YXIgdCxlLGEsZixoLHAsZCx4LE0sXz1tLmxlbmd0aCxiPXkubGVu
Z3RoO2ZvcihlPTA7Yj5lOysrZSlhPXlbZV0sZj1hLnNvdXJjZSxoPWEudGFyZ2V0LHg9aC54LWYu
eCxNPWgueS1mLnksKHA9eCp4K00qTSkmJihwPXIqaVtlXSooKHA9TWF0aC5zcXJ0KHApKS11W2Vd
KS9wLHgqPXAsTSo9cCxoLngtPXgqKGQ9Zi53ZWlnaHQvKGgud2VpZ2h0K2Yud2VpZ2h0KSksaC55
LT1NKmQsZi54Kz14KihkPTEtZCksZi55Kz1NKmQpO2lmKChkPXIqdikmJih4PXNbMF0vMixNPXNb
MV0vMixlPS0xLGQpKWZvcig7KytlPF87KWE9bVtlXSxhLngrPSh4LWEueCkqZCxhLnkrPShNLWEu
eSkqZDtpZihnKWZvcihWdSh0PVpvLmdlb20ucXVhZHRyZWUobSkscixvKSxlPS0xOysrZTxfOyko
YT1tW2VdKS5maXhlZHx8dC52aXNpdChuKGEpKTtmb3IoZT0tMTsrK2U8XzspYT1tW2VdLGEuZml4
ZWQ/KGEueD1hLnB4LGEueT1hLnB5KTooYS54LT0oYS5weC0oYS5weD1hLngpKSpsLGEueS09KGEu
cHktKGEucHk9YS55KSkqbCk7Yy50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTpyfSl9LGEubm9kZXM9
ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09bixhKTptfSxhLmxpbmtzPWZ1
bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PW4sYSk6eX0sYS5zaXplPWZ1bmN0
aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sYSk6c30sYS5saW5rRGlzdGFuY2U9
ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9m
IG4/bjorbixhKTpmfSxhLmRpc3RhbmNlPWEubGlua0Rpc3RhbmNlLGEubGlua1N0cmVuZ3RoPWZ1
bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBu
P246K24sYSk6aH0sYS5mcmljdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0
aD8obD0rbixhKTpsfSxhLmNoYXJnZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0
aD8oZz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEpOmd9LGEuY2hhcmdlRGlzdGFuY2U9ZnVu
Y3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9bipuLGEpOk1hdGguc3FydChwKX0s
YS5ncmF2aXR5PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PStuLGEpOnZ9
LGEudGhldGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bipuLGEpOk1h
dGguc3FydChkKX0sYS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
bj0rbixyP3I9bj4wP246MDpuPjAmJihjLnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6cj1ufSks
Wm8udGltZXIoYS50aWNrKSksYSk6cn0sYS5zdGFydD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixy
KXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KGMpLGE9MDtjPmE7KythKWVbYV09W107Zm9yKGE9MDtz
PmE7KythKXt2YXIgdT15W2FdO2VbdS5zb3VyY2UuaW5kZXhdLnB1c2godS50YXJnZXQpLGVbdS50
YXJnZXQuaW5kZXhdLnB1c2godS5zb3VyY2UpfX1mb3IodmFyIGksbz1lW3RdLGE9LTEscz1vLmxl
bmd0aDsrK2E8czspaWYoIWlzTmFOKGk9b1thXVtuXSkpcmV0dXJuIGk7cmV0dXJuIE1hdGgucmFu
ZG9tKCkqcn12YXIgdCxlLHIsYz1tLmxlbmd0aCxsPXkubGVuZ3RoLHA9c1swXSx2PXNbMV07Zm9y
KHQ9MDtjPnQ7Kyt0KShyPW1bdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO2w+dDsrK3Qp
cj15W3RdLCJudW1iZXIiPT10eXBlb2Ygci5zb3VyY2UmJihyLnNvdXJjZT1tW3Iuc291cmNlXSks
Im51bWJlciI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PW1bci50YXJnZXRdKSwrK3Iuc291
cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO2M+dDsrK3Qpcj1tW3RdLGlzTmFO
KHIueCkmJihyLng9bigieCIscCkpLGlzTmFOKHIueSkmJihyLnk9bigieSIsdikpLGlzTmFOKHIu
cHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKHU9W10sImZ1bmN0aW9u
Ij09dHlwZW9mIGYpZm9yKHQ9MDtsPnQ7Kyt0KXVbdF09K2YuY2FsbCh0aGlzLHlbdF0sdCk7ZWxz
ZSBmb3IodD0wO2w+dDsrK3QpdVt0XT1mO2lmKGk9W10sImZ1bmN0aW9uIj09dHlwZW9mIGgpZm9y
KHQ9MDtsPnQ7Kyt0KWlbdF09K2guY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO2w+dDsr
K3QpaVt0XT1oO2lmKG89W10sImZ1bmN0aW9uIj09dHlwZW9mIGcpZm9yKHQ9MDtjPnQ7Kyt0KW9b
dF09K2cuY2FsbCh0aGlzLG1bdF0sdCk7ZWxzZSBmb3IodD0wO2M+dDsrK3Qpb1t0XT1nO3JldHVy
biBhLnJlc3VtZSgpfSxhLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiBhLmFscGhhKC4xKX0sYS5z
dG9wPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoMCl9LGEuZHJhZz1mdW5jdGlvbigpe3JldHVy
biBlfHwoZT1aby5iZWhhdmlvci5kcmFnKCkub3JpZ2luKHd0KS5vbigiZHJhZ3N0YXJ0LmZvcmNl
IixPdSkub24oImRyYWcuZm9yY2UiLHQpLm9uKCJkcmFnZW5kLmZvcmNlIixZdSkpLGFyZ3VtZW50
cy5sZW5ndGg/KHRoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsSXUpLm9uKCJtb3VzZW91dC5mb3Jj
ZSIsWnUpLmNhbGwoZSksdm9pZCAwKTplfSxaby5yZWJpbmQoYSxjLCJvbiIpfTt2YXIgcnM9MjAs
dXM9MSxpcz0xLzA7Wm8ubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odSl7
dmFyIGksbz1bdV0sYT1bXTtmb3IodS5kZXB0aD0wO251bGwhPShpPW8ucG9wKCkpOylpZihhLnB1
c2goaSksKHM9ZS5jYWxsKG4saSxpLmRlcHRoKSkmJihjPXMubGVuZ3RoKSl7Zm9yKHZhciBjLHMs
bDstLWM+PTA7KW8ucHVzaChsPXNbY10pLGwucGFyZW50PWksbC5kZXB0aD1pLmRlcHRoKzE7ciYm
KGkudmFsdWU9MCksaS5jaGlsZHJlbj1zfWVsc2UgciYmKGkudmFsdWU9K3IuY2FsbChuLGksaS5k
ZXB0aCl8fDApLGRlbGV0ZSBpLmNoaWxkcmVuO3JldHVybiBCdSh1LGZ1bmN0aW9uKG4pe3ZhciBl
LHU7dCYmKGU9bi5jaGlsZHJlbikmJmUuc29ydCh0KSxyJiYodT1uLnBhcmVudCkmJih1LnZhbHVl
Kz1uLnZhbHVlKX0pLGF9dmFyIHQ9R3UsZT1XdSxyPUp1O3JldHVybiBuLnNvcnQ9ZnVuY3Rpb24o
ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmNoaWxkcmVuPWZ1bmN0aW9u
KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi52YWx1ZT1mdW5jdGlvbih0
KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4ucmV2YWx1ZT1mdW5jdGlvbih0
KXtyZXR1cm4gciYmKCR1KHQsZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmKG4udmFsdWU9MCl9KSxC
dSh0LGZ1bmN0aW9uKHQpe3ZhciBlO3QuY2hpbGRyZW58fCh0LnZhbHVlPStyLmNhbGwobix0LHQu
ZGVwdGgpfHwwKSwoZT10LnBhcmVudCkmJihlLnZhbHVlKz10LnZhbHVlKX0pKSx0fSxufSxaby5s
YXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUscix1KXt2YXIgaT10LmNo
aWxkcmVuO2lmKHQueD1lLHQueT10LmRlcHRoKnUsdC5keD1yLHQuZHk9dSxpJiYobz1pLmxlbmd0
aCkpe3ZhciBvLGEsYyxzPS0xO2ZvcihyPXQudmFsdWU/ci90LnZhbHVlOjA7KytzPG87KW4oYT1p
W3NdLGUsYz1hLnZhbHVlKnIsdSksZSs9Y319ZnVuY3Rpb24gdChuKXt2YXIgZT1uLmNoaWxkcmVu
LHI9MDtpZihlJiYodT1lLmxlbmd0aCkpZm9yKHZhciB1LGk9LTE7KytpPHU7KXI9TWF0aC5tYXgo
cix0KGVbaV0pKTtyZXR1cm4gMStyfWZ1bmN0aW9uIGUoZSxpKXt2YXIgbz1yLmNhbGwodGhpcyxl
LGkpO3JldHVybiBuKG9bMF0sMCx1WzBdLHVbMV0vdChvWzBdKSksb312YXIgcj1aby5sYXlvdXQu
aGllcmFyY2h5KCksdT1bMSwxXTtyZXR1cm4gZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyh1PW4sZSk6dX0sWHUoZSxyKX0sWm8ubGF5b3V0LnBpZT1mdW5jdGlvbigp
e2Z1bmN0aW9uIG4oaSl7dmFyIG89aS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4rdC5jYWxsKG4s
ZSxyKX0pLGE9KygiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpy
KSxjPSgoImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dSktYSkv
Wm8uc3VtKG8pLHM9Wm8ucmFuZ2UoaS5sZW5ndGgpO251bGwhPWUmJnMuc29ydChlPT09b3M/ZnVu
Y3Rpb24obix0KXtyZXR1cm4gb1t0XS1vW25dfTpmdW5jdGlvbihuLHQpe3JldHVybiBlKGlbbl0s
aVt0XSl9KTt2YXIgbD1bXTtyZXR1cm4gcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciB0O2xbbl09
e2RhdGE6aVtuXSx2YWx1ZTp0PW9bbl0sc3RhcnRBbmdsZTphLGVuZEFuZ2xlOmErPXQqY319KSxs
fXZhciB0PU51bWJlcixlPW9zLHI9MCx1PXdhO3JldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5zb3J0PWZ1bmN0aW9uKHQpe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5lbmRBbmdsZT1mdW5jdGlvbih0KXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG59O3ZhciBvcz17fTtaby5sYXlvdXQu
c3RhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGEsYyl7dmFyIHM9YS5tYXAoZnVuY3Rpb24oZSxy
KXtyZXR1cm4gdC5jYWxsKG4sZSxyKX0pLGw9cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFw
KGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2kuY2FsbChuLHQsZSksby5jYWxsKG4sdCxlKV19KX0pLGY9
ZS5jYWxsKG4sbCxjKTtzPVpvLnBlcm11dGUocyxmKSxsPVpvLnBlcm11dGUobCxmKTt2YXIgaCxn
LHAsdj1yLmNhbGwobixsLGMpLGQ9cy5sZW5ndGgsbT1zWzBdLmxlbmd0aDtmb3IoZz0wO20+Zzsr
K2cpZm9yKHUuY2FsbChuLHNbMF1bZ10scD12W2ddLGxbMF1bZ11bMV0pLGg9MTtkPmg7KytoKXUu
Y2FsbChuLHNbaF1bZ10scCs9bFtoLTFdW2ddWzFdLGxbaF1bZ11bMV0pO3JldHVybiBhfXZhciB0
PXd0LGU9ZWkscj1yaSx1PXRpLGk9UXUsbz1uaTtyZXR1cm4gbi52YWx1ZXM9ZnVuY3Rpb24oZSl7
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLm9yZGVyPWZ1bmN0aW9uKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YXMuZ2V0KHQp
fHxlaSxuKTplfSxuLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
cj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNzLmdldCh0KXx8cmksbik6cn0sbi54PWZ1bmN0aW9u
KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi55PWZ1bmN0aW9uKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbik6b30sbi5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJu
IGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxufTt2YXIgYXM9Wm8ubWFwKHsiaW5zaWRlLW91
dCI6ZnVuY3Rpb24obil7dmFyIHQsZSxyPW4ubGVuZ3RoLHU9bi5tYXAodWkpLGk9bi5tYXAoaWkp
LG89Wm8ucmFuZ2Uocikuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiB1W25dLXVbdF19KSxhPTAs
Yz0wLHM9W10sbD1bXTtmb3IodD0wO3I+dDsrK3QpZT1vW3RdLGM+YT8oYSs9aVtlXSxzLnB1c2go
ZSkpOihjKz1pW2VdLGwucHVzaChlKSk7cmV0dXJuIGwucmV2ZXJzZSgpLmNvbmNhdChzKX0scmV2
ZXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gWm8ucmFuZ2Uobi5sZW5ndGgpLnJldmVyc2UoKX0sImRl
ZmF1bHQiOmVpfSksY3M9Wm8ubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKG4pe3ZhciB0LGUscix1
PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz1bXSxhPTAsYz1bXTtmb3IoZT0wO2k+ZTsrK2Upe2Zv
cih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtlXVsxXTtyPmEmJihhPXIpLG8ucHVzaChyKX1mb3Io
ZT0wO2k+ZTsrK2UpY1tlXT0oYS1vW2VdKS8yO3JldHVybiBjfSx3aWdnbGU6ZnVuY3Rpb24obil7
dmFyIHQsZSxyLHUsaSxvLGEsYyxzLGw9bi5sZW5ndGgsZj1uWzBdLGg9Zi5sZW5ndGgsZz1bXTtm
b3IoZ1swXT1jPXM9MCxlPTE7aD5lOysrZSl7Zm9yKHQ9MCx1PTA7bD50OysrdCl1Kz1uW3RdW2Vd
WzFdO2Zvcih0PTAsaT0wLGE9ZltlXVswXS1mW2UtMV1bMF07bD50OysrdCl7Zm9yKHI9MCxvPShu
W3RdW2VdWzFdLW5bdF1bZS0xXVsxXSkvKDIqYSk7dD5yOysrcilvKz0obltyXVtlXVsxXS1uW3Jd
W2UtMV1bMV0pL2E7aSs9bypuW3RdW2VdWzFdfWdbZV09Yy09dT9pL3UqYTowLHM+YyYmKHM9Yyl9
Zm9yKGU9MDtoPmU7KytlKWdbZV0tPXM7cmV0dXJuIGd9LGV4cGFuZDpmdW5jdGlvbihuKXt2YXIg
dCxlLHIsdT1uLmxlbmd0aCxpPW5bMF0ubGVuZ3RoLG89MS91LGE9W107Zm9yKGU9MDtpPmU7Kytl
KXtmb3IodD0wLHI9MDt1PnQ7dCsrKXIrPW5bdF1bZV1bMV07aWYocilmb3IodD0wO3U+dDt0Kysp
blt0XVtlXVsxXS89cjtlbHNlIGZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdPW99Zm9yKGU9MDtp
PmU7KytlKWFbZV09MDtyZXR1cm4gYX0semVybzpyaX0pO1pvLmxheW91dC5oaXN0b2dyYW09ZnVu
Y3Rpb24oKXtmdW5jdGlvbiBuKG4saSl7Zm9yKHZhciBvLGEsYz1bXSxzPW4ubWFwKGUsdGhpcyks
bD1yLmNhbGwodGhpcyxzLGkpLGY9dS5jYWxsKHRoaXMsbCxzLGkpLGk9LTEsaD1zLmxlbmd0aCxn
PWYubGVuZ3RoLTEscD10PzE6MS9oOysraTxnOylvPWNbaV09W10sby5keD1mW2krMV0tKG8ueD1m
W2ldKSxvLnk9MDtpZihnPjApZm9yKGk9LTE7KytpPGg7KWE9c1tpXSxhPj1sWzBdJiZhPD1sWzFd
JiYobz1jW1pvLmJpc2VjdChmLGEsMSxnKS0xXSxvLnkrPXAsby5wdXNoKG5baV0pKTtyZXR1cm4g
Y312YXIgdD0hMCxlPU51bWJlcixyPXNpLHU9YWk7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24odCl7
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWJ0KHQpLG4pOnJ9LG4uYmlucz1mdW5jdGlvbih0KXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24obil7
cmV0dXJuIGNpKG4sdCl9OmJ0KHQpLG4pOnV9LG4uZnJlcXVlbmN5PWZ1bmN0aW9uKGUpe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZSxuKTp0fSxufSxaby5sYXlvdXQucGFjaz1mdW5jdGlv
bigpe2Z1bmN0aW9uIG4obixpKXt2YXIgbz1lLmNhbGwodGhpcyxuLGkpLGE9b1swXSxjPXVbMF0s
cz11WzFdLGw9bnVsbD09dD9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlv
bigpe3JldHVybiB0fTtpZihhLng9YS55PTAsQnUoYSxmdW5jdGlvbihuKXtuLnI9K2wobi52YWx1
ZSl9KSxCdShhLHBpKSxyKXt2YXIgZj1yKih0PzE6TWF0aC5tYXgoMiphLnIvYywyKmEuci9zKSkv
MjtCdShhLGZ1bmN0aW9uKG4pe24ucis9Zn0pLEJ1KGEscGkpLEJ1KGEsZnVuY3Rpb24obil7bi5y
LT1mfSl9cmV0dXJuIG1pKGEsYy8yLHMvMix0PzE6MS9NYXRoLm1heCgyKmEuci9jLDIqYS5yL3Mp
KSxvfXZhciB0LGU9Wm8ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobGkpLHI9MCx1PVsxLDFdO3Jl
dHVybiBuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1
fSxuLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1l
fHwiZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLG4pOnR9LG4ucGFkZGluZz1mdW5jdGlvbih0KXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxYdShuLGUpfSxaby5sYXlvdXQudHJl
ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix1KXt2YXIgbD1vLmNhbGwodGhpcyxuLHUpLGY9bFsw
XSxoPXQoZik7aWYoQnUoaCxlKSxoLnBhcmVudC5tPS1oLnosJHUoaCxyKSxzKSR1KGYsaSk7ZWxz
ZXt2YXIgZz1mLHA9Zix2PWY7JHUoZixmdW5jdGlvbihuKXtuLng8Zy54JiYoZz1uKSxuLng+cC54
JiYocD1uKSxuLmRlcHRoPnYuZGVwdGgmJih2PW4pfSk7dmFyIGQ9YShnLHApLzItZy54LG09Y1sw
XS8ocC54K2EocCxnKS8yK2QpLHk9Y1sxXS8odi5kZXB0aHx8MSk7JHUoZixmdW5jdGlvbihuKXtu
Lng9KG4ueCtkKSptLG4ueT1uLmRlcHRoKnl9KX1yZXR1cm4gbH1mdW5jdGlvbiB0KG4pe2Zvcih2
YXIgdCxlPXtBOm51bGwsY2hpbGRyZW46W25dfSxyPVtlXTtudWxsIT0odD1yLnBvcCgpKTspZm9y
KHZhciB1LGk9dC5jaGlsZHJlbixvPTAsYT1pLmxlbmd0aDthPm87KytvKXIucHVzaCgoaVtvXT11
PXtfOmlbb10scGFyZW50OnQsY2hpbGRyZW46KHU9aVtvXS5jaGlsZHJlbikmJnUuc2xpY2UoKXx8
W10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6b30pLmE9dSk7cmV0dXJu
IGUuY2hpbGRyZW5bMF19ZnVuY3Rpb24gZShuKXt2YXIgdD1uLmNoaWxkcmVuLGU9bi5wYXJlbnQu
Y2hpbGRyZW4scj1uLmk/ZVtuLmktMV06bnVsbDtpZih0Lmxlbmd0aCl7d2kobik7dmFyIGk9KHRb
MF0ueit0W3QubGVuZ3RoLTFdLnopLzI7cj8obi56PXIueithKG4uXyxyLl8pLG4ubT1uLnotaSk6
bi56PWl9ZWxzZSByJiYobi56PXIueithKG4uXyxyLl8pKTtuLnBhcmVudC5BPXUobixyLG4ucGFy
ZW50LkF8fGVbMF0pfWZ1bmN0aW9uIHIobil7bi5fLng9bi56K24ucGFyZW50Lm0sbi5tKz1uLnBh
cmVudC5tfWZ1bmN0aW9uIHUobix0LGUpe2lmKHQpe2Zvcih2YXIgcix1PW4saT1uLG89dCxjPXUu
cGFyZW50LmNoaWxkcmVuWzBdLHM9dS5tLGw9aS5tLGY9by5tLGg9Yy5tO289X2kobyksdT1NaSh1
KSxvJiZ1OyljPU1pKGMpLGk9X2koaSksaS5hPW4scj1vLnorZi11LnotcythKG8uXyx1Ll8pLHI+
MCYmKGJpKFNpKG8sbixlKSxuLHIpLHMrPXIsbCs9ciksZis9by5tLHMrPXUubSxoKz1jLm0sbCs9
aS5tO28mJiFfaShpKSYmKGkudD1vLGkubSs9Zi1sKSx1JiYhTWkoYykmJihjLnQ9dSxjLm0rPXMt
aCxlPW4pfXJldHVybiBlfWZ1bmN0aW9uIGkobil7bi54Kj1jWzBdLG4ueT1uLmRlcHRoKmNbMV19
dmFyIG89Wm8ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCksYT14aSxj
PVsxLDFdLHM9bnVsbDtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhhPXQsbik6YX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoPyhzPW51bGw9PShjPXQpP2k6bnVsbCxuKTpzP251bGw6Y30sbi5ub2RlU2l6ZT1m
dW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT0oYz10KT9udWxsOmks
bik6cz9jOm51bGx9LFh1KG4sbyl9LFpvLmxheW91dC5jbHVzdGVyPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gbihuLGkpe3ZhciBvLGE9dC5jYWxsKHRoaXMsbixpKSxjPWFbMF0scz0wO0J1KGMsZnVuY3Rp
b24obil7dmFyIHQ9bi5jaGlsZHJlbjt0JiZ0Lmxlbmd0aD8obi54PUVpKHQpLG4ueT1raSh0KSk6
KG4ueD1vP3MrPWUobixvKTowLG4ueT0wLG89bil9KTt2YXIgbD1BaShjKSxmPUNpKGMpLGg9bC54
LWUobCxmKS8yLGc9Zi54K2UoZixsKS8yO3JldHVybiBCdShjLHU/ZnVuY3Rpb24obil7bi54PShu
LngtYy54KSpyWzBdLG4ueT0oYy55LW4ueSkqclsxXX06ZnVuY3Rpb24obil7bi54PShuLngtaCkv
KGctaCkqclswXSxuLnk9KDEtKGMueT9uLnkvYy55OjEpKSpyWzFdfSksYX12YXIgdD1aby5sYXlv
dXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxlPXhpLHI9WzEsMV0sdT0hMTty
ZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl
PXQsbik6ZX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51
bGw9PShyPXQpLG4pOnU/bnVsbDpyfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyh1PW51bGwhPShyPXQpLG4pOnU/cjpudWxsfSxYdShuLHQpfSxaby5sYXlv
dXQudHJlZW1hcD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0KXtmb3IodmFyIGUscix1PS0xLGk9
bi5sZW5ndGg7Kyt1PGk7KXI9KGU9blt1XSkudmFsdWUqKDA+dD8wOnQpLGUuYXJlYT1pc05hTihy
KXx8MD49cj8wOnJ9ZnVuY3Rpb24gdChlKXt2YXIgaT1lLmNoaWxkcmVuO2lmKGkmJmkubGVuZ3Ro
KXt2YXIgbyxhLGMscz1mKGUpLGw9W10saD1pLnNsaWNlKCkscD0xLzAsdj0ic2xpY2UiPT09Zz9z
LmR4OiJkaWNlIj09PWc/cy5keToic2xpY2UtZGljZSI9PT1nPzEmZS5kZXB0aD9zLmR5OnMuZHg6
TWF0aC5taW4ocy5keCxzLmR5KTtmb3IobihoLHMuZHgqcy5keS9lLnZhbHVlKSxsLmFyZWE9MDso
Yz1oLmxlbmd0aCk+MDspbC5wdXNoKG89aFtjLTFdKSxsLmFyZWErPW8uYXJlYSwic3F1YXJpZnki
IT09Z3x8KGE9cihsLHYpKTw9cD8oaC5wb3AoKSxwPWEpOihsLmFyZWEtPWwucG9wKCkuYXJlYSx1
KGwsdixzLCExKSx2PU1hdGgubWluKHMuZHgscy5keSksbC5sZW5ndGg9bC5hcmVhPTAscD0xLzAp
O2wubGVuZ3RoJiYodShsLHYscywhMCksbC5sZW5ndGg9bC5hcmVhPTApLGkuZm9yRWFjaCh0KX19
ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmNoaWxkcmVuO2lmKHImJnIubGVuZ3RoKXt2YXIgaSxvPWYo
dCksYT1yLnNsaWNlKCksYz1bXTtmb3IobihhLG8uZHgqby5keS90LnZhbHVlKSxjLmFyZWE9MDtp
PWEucG9wKCk7KWMucHVzaChpKSxjLmFyZWErPWkuYXJlYSxudWxsIT1pLnomJih1KGMsaS56P28u
ZHg6by5keSxvLCFhLmxlbmd0aCksYy5sZW5ndGg9Yy5hcmVhPTApO3IuZm9yRWFjaChlKX19ZnVu
Y3Rpb24gcihuLHQpe2Zvcih2YXIgZSxyPW4uYXJlYSx1PTAsaT0xLzAsbz0tMSxhPW4ubGVuZ3Ro
OysrbzxhOykoZT1uW29dLmFyZWEpJiYoaT5lJiYoaT1lKSxlPnUmJih1PWUpKTtyZXR1cm4gcio9
cix0Kj10LHI/TWF0aC5tYXgodCp1KnAvcixyLyh0KmkqcCkpOjEvMH1mdW5jdGlvbiB1KG4sdCxl
LHIpe3ZhciB1LGk9LTEsbz1uLmxlbmd0aCxhPWUueCxzPWUueSxsPXQ/YyhuLmFyZWEvdCk6MDtp
Zih0PT1lLmR4KXtmb3IoKHJ8fGw+ZS5keSkmJihsPWUuZHkpOysraTxvOyl1PW5baV0sdS54PWEs
dS55PXMsdS5keT1sLGErPXUuZHg9TWF0aC5taW4oZS54K2UuZHgtYSxsP2ModS5hcmVhL2wpOjAp
O3Uuej0hMCx1LmR4Kz1lLngrZS5keC1hLGUueSs9bCxlLmR5LT1sfWVsc2V7Zm9yKChyfHxsPmUu
ZHgpJiYobD1lLmR4KTsrK2k8bzspdT1uW2ldLHUueD1hLHUueT1zLHUuZHg9bCxzKz11LmR5PU1h
dGgubWluKGUueStlLmR5LXMsbD9jKHUuYXJlYS9sKTowKTt1Lno9ITEsdS5keSs9ZS55K2UuZHkt
cyxlLngrPWwsZS5keC09bH19ZnVuY3Rpb24gaShyKXt2YXIgdT1vfHxhKHIpLGk9dVswXTtyZXR1
cm4gaS54PTAsaS55PTAsaS5keD1zWzBdLGkuZHk9c1sxXSxvJiZhLnJldmFsdWUoaSksbihbaV0s
aS5keCppLmR5L2kudmFsdWUpLChvP2U6dCkoaSksaCYmKG89dSksdX12YXIgbyxhPVpvLmxheW91
dC5oaWVyYXJjaHkoKSxjPU1hdGgucm91bmQscz1bMSwxXSxsPW51bGwsZj1OaSxoPSExLGc9InNx
dWFyaWZ5IixwPS41KigxK01hdGguc3FydCg1KSk7cmV0dXJuIGkuc2l6ZT1mdW5jdGlvbihuKXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1uLGkpOnN9LGkucGFkZGluZz1mdW5jdGlvbihuKXtm
dW5jdGlvbiB0KHQpe3ZhciBlPW4uY2FsbChpLHQsdC5kZXB0aCk7cmV0dXJuIG51bGw9PWU/Tmko
dCk6emkodCwibnVtYmVyIj09dHlwZW9mIGU/W2UsZSxlLGVdOmUpfWZ1bmN0aW9uIGUodCl7cmV0
dXJuIHppKHQsbil9aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGw7dmFyIHI7cmV0dXJuIGY9
bnVsbD09KGw9bik/Tmk6ImZ1bmN0aW9uIj09KHI9dHlwZW9mIG4pP3Q6Im51bWJlciI9PT1yPyhu
PVtuLG4sbixuXSxlKTplLGl9LGkucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KGM9bj9NYXRoLnJvdW5kOk51bWJlcixpKTpjIT1OdW1iZXJ9LGkuc3RpY2t5PWZ1bmN0
aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPW4sbz1udWxsLGkpOmh9LGkucmF0aW89
ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9bixpKTpwfSxpLm1vZGU9ZnVu
Y3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9bisiIixpKTpnfSxYdShpLGEpfSxa
by5yYW5kb209e25vcm1hbDpmdW5jdGlvbihuLHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0
dXJuIDI+ZSYmKHQ9MSksMT5lJiYobj0wKSxmdW5jdGlvbigpe3ZhciBlLHIsdTtkbyBlPTIqTWF0
aC5yYW5kb20oKS0xLHI9MipNYXRoLnJhbmRvbSgpLTEsdT1lKmUrcipyO3doaWxlKCF1fHx1PjEp
O3JldHVybiBuK3QqZSpNYXRoLnNxcnQoLTIqTWF0aC5sb2codSkvdSl9fSxsb2dOb3JtYWw6ZnVu
Y3Rpb24oKXt2YXIgbj1aby5yYW5kb20ubm9ybWFsLmFwcGx5KFpvLGFyZ3VtZW50cyk7cmV0dXJu
IGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKG4oKSl9fSxiYXRlczpmdW5jdGlvbihuKXt2YXIg
dD1aby5yYW5kb20uaXJ3aW5IYWxsKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KCkvbn19
LGlyd2luSGFsbDpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPTA7
bj5lO2UrKyl0Kz1NYXRoLnJhbmRvbSgpO3JldHVybiB0fX19LFpvLnNjYWxlPXt9O3ZhciBzcz17
Zmxvb3I6d3QsY2VpbDp3dH07Wm8uc2NhbGUubGluZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIFVpKFsw
LDFdLFswLDFdLGh1LCExKX07dmFyIGxzPXtzOjEsZzoxLHA6MSxyOjEsZToxfTtaby5zY2FsZS5s
b2c9ZnVuY3Rpb24oKXtyZXR1cm4gVmkoWm8uc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwx
MCwhMCxbMSwxMF0pfTt2YXIgZnM9Wm8uZm9ybWF0KCIuMGUiKSxocz17Zmxvb3I6ZnVuY3Rpb24o
bil7cmV0dXJuLU1hdGguY2VpbCgtbil9LGNlaWw6ZnVuY3Rpb24obil7cmV0dXJuLU1hdGguZmxv
b3IoLW4pfX07Wm8uc2NhbGUucG93PWZ1bmN0aW9uKCl7cmV0dXJuIFhpKFpvLnNjYWxlLmxpbmVh
cigpLDEsWzAsMV0pfSxaby5zY2FsZS5zcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIFpvLnNjYWxlLnBv
dygpLmV4cG9uZW50KC41KX0sWm8uc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBCaShb
XSx7dDoicmFuZ2UiLGE6W1tdXX0pfSxaby5zY2FsZS5jYXRlZ29yeTEwPWZ1bmN0aW9uKCl7cmV0
dXJuIFpvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShncyl9LFpvLnNjYWxlLmNhdGVnb3J5MjA9ZnVu
Y3Rpb24oKXtyZXR1cm4gWm8uc2NhbGUub3JkaW5hbCgpLnJhbmdlKHBzKX0sWm8uc2NhbGUuY2F0
ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gWm8uc2NhbGUub3JkaW5hbCgpLnJhbmdlKHZzKX0s
Wm8uc2NhbGUuY2F0ZWdvcnkyMGM9ZnVuY3Rpb24oKXtyZXR1cm4gWm8uc2NhbGUub3JkaW5hbCgp
LnJhbmdlKGRzKX07dmFyIGdzPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcy
NTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKHZ0KSxw
cz1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0
MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMz
MCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0
MTA3MjVdLm1hcCh2dCksdnM9WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkw
OTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1
MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMy
NCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKHZ0KSxkcz1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1
LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1
MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkx
LDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKHZ0KTtaby5zY2FsZS5xdWFu
dGlsZT1mdW5jdGlvbigpe3JldHVybiBXaShbXSxbXSl9LFpvLnNjYWxlLnF1YW50aXplPWZ1bmN0
aW9uKCl7cmV0dXJuIEppKDAsMSxbMCwxXSl9LFpvLnNjYWxlLnRocmVzaG9sZD1mdW5jdGlvbigp
e3JldHVybiBHaShbLjVdLFswLDFdKX0sWm8uc2NhbGUuaWRlbnRpdHk9ZnVuY3Rpb24oKXtyZXR1
cm4gS2koWzAsMV0pfSxaby5zdmc9e30sWm8uc3ZnLmFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4o
KXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMp
LG89ci5hcHBseSh0aGlzLGFyZ3VtZW50cykrbXMsYT11LmFwcGx5KHRoaXMsYXJndW1lbnRzKStt
cyxjPShvPmEmJihjPW8sbz1hLGE9YyksYS1vKSxzPWJhPmM/IjAiOiIxIixsPU1hdGguY29zKG8p
LGY9TWF0aC5zaW4obyksaD1NYXRoLmNvcyhhKSxnPU1hdGguc2luKGEpOworcmV0dXJuIGM+PXlz
P24/Ik0wLCIraSsiQSIraSsiLCIraSsiIDAgMSwxIDAsIistaSsiQSIraSsiLCIraSsiIDAgMSwx
IDAsIitpKyJNMCwiK24rIkEiK24rIiwiK24rIiAwIDEsMCAwLCIrLW4rIkEiK24rIiwiK24rIiAw
IDEsMCAwLCIrbisiWiI6Ik0wLCIraSsiQSIraSsiLCIraSsiIDAgMSwxIDAsIistaSsiQSIraSsi
LCIraSsiIDAgMSwxIDAsIitpKyJaIjpuPyJNIitpKmwrIiwiK2kqZisiQSIraSsiLCIraSsiIDAg
IitzKyIsMSAiK2kqaCsiLCIraSpnKyJMIituKmgrIiwiK24qZysiQSIrbisiLCIrbisiIDAgIitz
KyIsMCAiK24qbCsiLCIrbipmKyJaIjoiTSIraSpsKyIsIitpKmYrIkEiK2krIiwiK2krIiAwICIr
cysiLDEgIitpKmgrIiwiK2kqZysiTDAsMCIrIloifXZhciB0PVFpLGU9bm8scj10byx1PWVvO3Jl
dHVybiBuLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0
PWJ0KGUpLG4pOnR9LG4ub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KGU9YnQodCksbik6ZX0sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhyPWJ0KHQpLG4pOnJ9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJu
IGFyZ3VtZW50cy5sZW5ndGg/KHU9YnQodCksbik6dX0sbi5jZW50cm9pZD1mdW5jdGlvbigpe3Zh
ciBuPSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixp
PShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSt1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMittczty
ZXR1cm5bTWF0aC5jb3MoaSkqbixNYXRoLnNpbihpKSpuXX0sbn07dmFyIG1zPS1TYSx5cz13YS1r
YTtaby5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBybyh3dCl9O3ZhciB4cz1aby5tYXAoe2xp
bmVhcjp1bywibGluZWFyLWNsb3NlZCI6aW8sc3RlcDpvbywic3RlcC1iZWZvcmUiOmFvLCJzdGVw
LWFmdGVyIjpjbyxiYXNpczpwbywiYmFzaXMtb3BlbiI6dm8sImJhc2lzLWNsb3NlZCI6bW8sYnVu
ZGxlOnlvLGNhcmRpbmFsOmZvLCJjYXJkaW5hbC1vcGVuIjpzbywiY2FyZGluYWwtY2xvc2VkIjps
byxtb25vdG9uZTpTb30pO3hzLmZvckVhY2goZnVuY3Rpb24obix0KXt0LmtleT1uLHQuY2xvc2Vk
PS8tY2xvc2VkJC8udGVzdChuKX0pO3ZhciBNcz1bMCwyLzMsMS8zLDBdLF9zPVswLDEvMywyLzMs
MF0sYnM9WzAsMS82LDIvMywxLzZdO1pvLnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBu
PXJvKGtvKTtyZXR1cm4gbi5yYWRpdXM9bi54LGRlbGV0ZSBuLngsbi5hbmdsZT1uLnksZGVsZXRl
IG4ueSxufSxhby5yZXZlcnNlPWNvLGNvLnJldmVyc2U9YW8sWm8uc3ZnLmFyZWE9ZnVuY3Rpb24o
KXtyZXR1cm4gRW8od3QpfSxaby5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgbj1Fbyhr
byk7cmV0dXJuIG4ucmFkaXVzPW4ueCxkZWxldGUgbi54LG4uaW5uZXJSYWRpdXM9bi54MCxkZWxl
dGUgbi54MCxuLm91dGVyUmFkaXVzPW4ueDEsZGVsZXRlIG4ueDEsbi5hbmdsZT1uLnksZGVsZXRl
IG4ueSxuLnN0YXJ0QW5nbGU9bi55MCxkZWxldGUgbi55MCxuLmVuZEFuZ2xlPW4ueTEsZGVsZXRl
IG4ueTEsbn0sWm8uc3ZnLmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLGEpe3ZhciBjPXQo
dGhpcyxpLG4sYSkscz10KHRoaXMsbyxuLGEpO3JldHVybiJNIitjLnAwK3IoYy5yLGMucDEsYy5h
MS1jLmEwKSsoZShjLHMpP3UoYy5yLGMucDEsYy5yLGMucDApOnUoYy5yLGMucDEscy5yLHMucDAp
K3Iocy5yLHMucDEscy5hMS1zLmEwKSt1KHMucixzLnAxLGMucixjLnAwKSkrIloifWZ1bmN0aW9u
IHQobix0LGUscil7dmFyIHU9dC5jYWxsKG4sZSxyKSxpPWEuY2FsbChuLHUsciksbz1jLmNhbGwo
bix1LHIpK21zLGw9cy5jYWxsKG4sdSxyKSttcztyZXR1cm57cjppLGEwOm8sYTE6bCxwMDpbaSpN
YXRoLmNvcyhvKSxpKk1hdGguc2luKG8pXSxwMTpbaSpNYXRoLmNvcyhsKSxpKk1hdGguc2luKGwp
XX19ZnVuY3Rpb24gZShuLHQpe3JldHVybiBuLmEwPT10LmEwJiZuLmExPT10LmExfWZ1bmN0aW9u
IHIobix0LGUpe3JldHVybiJBIituKyIsIituKyIgMCAiKyArKGU+YmEpKyIsMSAiK3R9ZnVuY3Rp
b24gdShuLHQsZSxyKXtyZXR1cm4iUSAwLDAgIityfXZhciBpPWdyLG89cHIsYT1BbyxjPXRvLHM9
ZW87cmV0dXJuIG4ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhh
PWJ0KHQpLG4pOmF9LG4uc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro
PyhpPWJ0KHQpLG4pOml9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoPyhvPWJ0KHQpLG4pOm99LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1l
bnRzLmxlbmd0aD8oYz1idCh0KSxuKTpjfSxuLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBh
cmd1bWVudHMubGVuZ3RoPyhzPWJ0KHQpLG4pOnN9LG59LFpvLnN2Zy5kaWFnb25hbD1mdW5jdGlv
bigpe2Z1bmN0aW9uIG4obix1KXt2YXIgaT10LmNhbGwodGhpcyxuLHUpLG89ZS5jYWxsKHRoaXMs
bix1KSxhPShpLnkrby55KS8yLGM9W2kse3g6aS54LHk6YX0se3g6by54LHk6YX0sb107cmV0dXJu
IGM9Yy5tYXAociksIk0iK2NbMF0rIkMiK2NbMV0rIiAiK2NbMl0rIiAiK2NbM119dmFyIHQ9Z3Is
ZT1wcixyPUNvO3JldHVybiBuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl
bmd0aD8odD1idChlKSxuKTp0fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8oZT1idCh0KSxuKTplfSxuLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSxaby5zdmcuZGlhZ29uYWwucmFkaWFsPWZ1bmN0
aW9uKCl7dmFyIG49Wm8uc3ZnLmRpYWdvbmFsKCksdD1DbyxlPW4ucHJvamVjdGlvbjtyZXR1cm4g
bi5wcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoTm8odD1u
KSk6dH0sbn0sWm8uc3ZnLnN5bWJvbD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixyKXtyZXR1cm4o
d3MuZ2V0KHQuY2FsbCh0aGlzLG4scikpfHxUbykoZS5jYWxsKHRoaXMsbixyKSl9dmFyIHQ9TG8s
ZT16bztyZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0
PWJ0KGUpLG4pOnR9LG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
ZT1idCh0KSxuKTplfSxufTt2YXIgd3M9Wm8ubWFwKHtjaXJjbGU6VG8sY3Jvc3M6ZnVuY3Rpb24o
bil7dmFyIHQ9TWF0aC5zcXJ0KG4vNSkvMjtyZXR1cm4iTSIrLTMqdCsiLCIrLXQrIkgiKy10KyJW
IistMyp0KyJIIit0KyJWIistdCsiSCIrMyp0KyJWIit0KyJIIit0KyJWIiszKnQrIkgiKy10KyJW
Iit0KyJIIistMyp0KyJaIn0sZGlhbW9uZDpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi8o
MipBcykpLGU9dCpBcztyZXR1cm4iTTAsIistdCsiTCIrZSsiLDAiKyIgMCwiK3QrIiAiKy1lKyIs
MCIrIloifSxzcXVhcmU6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4pLzI7cmV0dXJuIk0i
Ky10KyIsIistdCsiTCIrdCsiLCIrLXQrIiAiK3QrIiwiK3QrIiAiKy10KyIsIit0KyJaIn0sInRy
aWFuZ2xlLWRvd24iOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuL0VzKSxlPXQqRXMvMjty
ZXR1cm4iTTAsIitlKyJMIit0KyIsIistZSsiICIrLXQrIiwiKy1lKyJaIn0sInRyaWFuZ2xlLXVw
IjpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi9FcyksZT10KkVzLzI7cmV0dXJuIk0wLCIr
LWUrIkwiK3QrIiwiK2UrIiAiKy10KyIsIitlKyJaIn19KTtaby5zdmcuc3ltYm9sVHlwZXM9d3Mu
a2V5cygpO3ZhciBTcyxrcyxFcz1NYXRoLnNxcnQoMyksQXM9TWF0aC50YW4oMzAqQWEpLENzPVtd
LE5zPTA7Q3MuY2FsbD1wYS5jYWxsLENzLmVtcHR5PXBhLmVtcHR5LENzLm5vZGU9cGEubm9kZSxD
cy5zaXplPXBhLnNpemUsWm8udHJhbnNpdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD9Tcz9uLnRyYW5zaXRpb24oKTpuOm1hLnRyYW5zaXRpb24oKX0sWm8udHJhbnNpdGlv
bi5wcm90b3R5cGU9Q3MsQ3Muc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PXRoaXMuaWQs
aT1bXTtuPWIobik7Zm9yKHZhciBvPS0xLGE9dGhpcy5sZW5ndGg7KytvPGE7KXtpLnB1c2godD1b
XSk7Zm9yKHZhciBjPXRoaXNbb10scz0tMSxsPWMubGVuZ3RoOysrczxsOykocj1jW3NdKSYmKGU9
bi5jYWxsKHIsci5fX2RhdGFfXyxzLG8pKT8oIl9fZGF0YV9fImluIHImJihlLl9fZGF0YV9fPXIu
X19kYXRhX18pLFBvKGUscyx1LHIuX190cmFuc2l0aW9uX19bdV0pLHQucHVzaChlKSk6dC5wdXNo
KG51bGwpfXJldHVybiBxbyhpLHUpfSxDcy5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQsZSxy
LHUsaSxvPXRoaXMuaWQsYT1bXTtuPXcobik7Zm9yKHZhciBjPS0xLHM9dGhpcy5sZW5ndGg7Kytj
PHM7KWZvcih2YXIgbD10aGlzW2NdLGY9LTEsaD1sLmxlbmd0aDsrK2Y8aDspaWYocj1sW2ZdKXtp
PXIuX190cmFuc2l0aW9uX19bb10sZT1uLmNhbGwocixyLl9fZGF0YV9fLGYsYyksYS5wdXNoKHQ9
W10pO2Zvcih2YXIgZz0tMSxwPWUubGVuZ3RoOysrZzxwOykodT1lW2ddKSYmUG8odSxnLG8saSks
dC5wdXNoKHUpfXJldHVybiBxbyhhLG8pfSxDcy5maWx0ZXI9ZnVuY3Rpb24obil7dmFyIHQsZSxy
LHU9W107ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVIobikpO2Zvcih2YXIgaT0wLG89dGhpcy5s
ZW5ndGg7bz5pO2krKyl7dS5wdXNoKHQ9W10pO2Zvcih2YXIgZT10aGlzW2ldLGE9MCxjPWUubGVu
Z3RoO2M+YTthKyspKHI9ZVthXSkmJm4uY2FsbChyLHIuX19kYXRhX18sYSxpKSYmdC5wdXNoKHIp
fXJldHVybiBxbyh1LHRoaXMuaWQpfSxDcy50d2Vlbj1mdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMu
aWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKS5fX3RyYW5zaXRpb25fX1tl
XS50d2Vlbi5nZXQobik6UCh0aGlzLG51bGw9PXQ/ZnVuY3Rpb24odCl7dC5fX3RyYW5zaXRpb25f
X1tlXS50d2Vlbi5yZW1vdmUobil9OmZ1bmN0aW9uKHIpe3IuX190cmFuc2l0aW9uX19bZV0udHdl
ZW4uc2V0KG4sdCl9KX0sQ3MuYXR0cj1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUoKXt0aGlzLnJl
bW92ZUF0dHJpYnV0ZShhKX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhhLnNw
YWNlLGEubG9jYWwpfWZ1bmN0aW9uIHUobil7cmV0dXJuIG51bGw9PW4/ZToobis9IiIsZnVuY3Rp
b24oKXt2YXIgdCxlPXRoaXMuZ2V0QXR0cmlidXRlKGEpO3JldHVybiBlIT09biYmKHQ9byhlLG4p
LGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKGEsdChuKSl9KX0pfWZ1bmN0aW9uIGkobil7
cmV0dXJuIG51bGw9PW4/cjoobis9IiIsZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuZ2V0QXR0cmli
dXRlTlMoYS5zcGFjZSxhLmxvY2FsKTtyZXR1cm4gZSE9PW4mJih0PW8oZSxuKSxmdW5jdGlvbihu
KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCx0KG4pKX0pfSl9aWYoYXJndW1l
bnRzLmxlbmd0aDwyKXtmb3IodCBpbiBuKXRoaXMuYXR0cih0LG5bdF0pO3JldHVybiB0aGlzfXZh
ciBvPSJ0cmFuc2Zvcm0iPT1uP0R1Omh1LGE9Wm8ubnMucXVhbGlmeShuKTtyZXR1cm4gUm8odGhp
cywiYXR0ci4iK24sdCxhLmxvY2FsP2k6dSl9LENzLmF0dHJUd2Vlbj1mdW5jdGlvbihuLHQpe2Z1
bmN0aW9uIGUobixlKXt2YXIgcj10LmNhbGwodGhpcyxuLGUsdGhpcy5nZXRBdHRyaWJ1dGUodSkp
O3JldHVybiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh1LHIobikpfX1mdW5jdGlv
biByKG4sZSl7dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0QXR0cmlidXRlTlModS5zcGFj
ZSx1LmxvY2FsKSk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModS5z
cGFjZSx1LmxvY2FsLHIobikpfX12YXIgdT1aby5ucy5xdWFsaWZ5KG4pO3JldHVybiB0aGlzLnR3
ZWVuKCJhdHRyLiIrbix1LmxvY2FsP3I6ZSl9LENzLnN0eWxlPWZ1bmN0aW9uKG4sdCxlKXtmdW5j
dGlvbiByKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX1mdW5jdGlvbiB1KHQpe3JldHVy
biBudWxsPT10P3I6KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIHIsdT1Xby5nZXRDb21wdXRlZFN0eWxl
KHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuKTtyZXR1cm4gdSE9PXQmJihyPWh1KHUsdCks
ZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIodCksZSl9KX0pfXZhciBpPWFy
Z3VtZW50cy5sZW5ndGg7aWYoMz5pKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+aSYmKHQ9IiIp
O2ZvcihlIGluIG4pdGhpcy5zdHlsZShlLG5bZV0sdCk7cmV0dXJuIHRoaXN9ZT0iIn1yZXR1cm4g
Um8odGhpcywic3R5bGUuIituLHQsdSl9LENzLnN0eWxlVHdlZW49ZnVuY3Rpb24obix0LGUpe2Z1
bmN0aW9uIHIocix1KXt2YXIgaT10LmNhbGwodGhpcyxyLHUsV28uZ2V0Q29tcHV0ZWRTdHlsZSh0
aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUobikpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlz
LnN0eWxlLnNldFByb3BlcnR5KG4saSh0KSxlKX19cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MyYm
KGU9IiIpLHRoaXMudHdlZW4oInN0eWxlLiIrbixyKX0sQ3MudGV4dD1mdW5jdGlvbihuKXtyZXR1
cm4gUm8odGhpcywidGV4dCIsbixEbyl9LENzLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlz
LmVhY2goImVuZC50cmFuc2l0aW9uIixmdW5jdGlvbigpe3ZhciBuO3RoaXMuX190cmFuc2l0aW9u
X18uY291bnQ8MiYmKG49dGhpcy5wYXJlbnROb2RlKSYmbi5yZW1vdmVDaGlsZCh0aGlzKX0pfSxD
cy5lYXNlPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuaWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8
MT90aGlzLm5vZGUoKS5fX3RyYW5zaXRpb25fX1t0XS5lYXNlOigiZnVuY3Rpb24iIT10eXBlb2Yg
biYmKG49Wm8uZWFzZS5hcHBseShabyxhcmd1bWVudHMpKSxQKHRoaXMsZnVuY3Rpb24oZSl7ZS5f
X3RyYW5zaXRpb25fX1t0XS5lYXNlPW59KSl9LENzLmRlbGF5PWZ1bmN0aW9uKG4pe3ZhciB0PXRo
aXMuaWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKS5fX3RyYW5zaXRpb25f
X1t0XS5kZWxheTpQKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oZSxyLHUpe2Uu
X190cmFuc2l0aW9uX19bdF0uZGVsYXk9K24uY2FsbChlLGUuX19kYXRhX18scix1KX06KG49K24s
ZnVuY3Rpb24oZSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kZWxheT1ufSkpfSxDcy5kdXJhdGlvbj1m
dW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5u
b2RlKCkuX190cmFuc2l0aW9uX19bdF0uZHVyYXRpb246UCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVv
ZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9fdHJhbnNpdGlvbl9fW3RdLmR1cmF0aW9uPU1hdGgubWF4
KDEsbi5jYWxsKGUsZS5fX2RhdGFfXyxyLHUpKX06KG49TWF0aC5tYXgoMSxuKSxmdW5jdGlvbihl
KXtlLl9fdHJhbnNpdGlvbl9fW3RdLmR1cmF0aW9uPW59KSl9LENzLmVhY2g9ZnVuY3Rpb24obix0
KXt2YXIgZT10aGlzLmlkO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9a3MsdT1TcztTcz1l
LFAodGhpcyxmdW5jdGlvbih0LHIsdSl7a3M9dC5fX3RyYW5zaXRpb25fX1tlXSxuLmNhbGwodCx0
Ll9fZGF0YV9fLHIsdSl9KSxrcz1yLFNzPXV9ZWxzZSBQKHRoaXMsZnVuY3Rpb24ocil7dmFyIHU9
ci5fX3RyYW5zaXRpb25fX1tlXTsodS5ldmVudHx8KHUuZXZlbnQ9Wm8uZGlzcGF0Y2goInN0YXJ0
IiwiZW5kIikpKS5vbihuLHQpfSk7cmV0dXJuIHRoaXN9LENzLnRyYW5zaXRpb249ZnVuY3Rpb24o
KXtmb3IodmFyIG4sdCxlLHIsdT10aGlzLmlkLGk9KytOcyxvPVtdLGE9MCxjPXRoaXMubGVuZ3Ro
O2M+YTthKyspe28ucHVzaChuPVtdKTtmb3IodmFyIHQ9dGhpc1thXSxzPTAsbD10Lmxlbmd0aDts
PnM7cysrKShlPXRbc10pJiYocj1PYmplY3QuY3JlYXRlKGUuX190cmFuc2l0aW9uX19bdV0pLHIu
ZGVsYXkrPXIuZHVyYXRpb24sUG8oZSxzLGkscikpLG4ucHVzaChlKX1yZXR1cm4gcW8obyxpKX0s
Wm8uc3ZnLmF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe24uZWFjaChmdW5jdGlvbigpe3Zh
ciBuLHM9Wm8uc2VsZWN0KHRoaXMpLGw9dGhpcy5fX2NoYXJ0X198fGUsZj10aGlzLl9fY2hhcnRf
Xz1lLmNvcHkoKSxoPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYsYSk6Zi5kb21haW4o
KTpjLGc9bnVsbD09dD9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYsYSk6d3Q6dCxw
PXMuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCxmKSx2PXAuZW50ZXIoKS5pbnNlcnQoImciLCIu
ZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLGthKSxkPVpvLnRy
YW5zaXRpb24ocC5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IixrYSkucmVtb3ZlKCksbT1aby50cmFu
c2l0aW9uKHAub3JkZXIoKSkuc3R5bGUoIm9wYWNpdHkiLDEpLHk9VGkoZikseD1zLnNlbGVjdEFs
bCgiLmRvbWFpbiIpLmRhdGEoWzBdKSxNPSh4LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigi
Y2xhc3MiLCJkb21haW4iKSxaby50cmFuc2l0aW9uKHgpKTt2LmFwcGVuZCgibGluZSIpLHYuYXBw
ZW5kKCJ0ZXh0Iik7dmFyIF89di5zZWxlY3QoImxpbmUiKSxiPW0uc2VsZWN0KCJsaW5lIiksdz1w
LnNlbGVjdCgidGV4dCIpLnRleHQoZyksUz12LnNlbGVjdCgidGV4dCIpLGs9bS5zZWxlY3QoInRl
eHQiKTtzd2l0Y2gocil7Y2FzZSJib3R0b20iOm49VW8sXy5hdHRyKCJ5MiIsdSksUy5hdHRyKCJ5
IixNYXRoLm1heCh1LDApK28pLGIuYXR0cigieDIiLDApLmF0dHIoInkyIix1KSxrLmF0dHIoIngi
LDApLmF0dHIoInkiLE1hdGgubWF4KHUsMCkrbyksdy5hdHRyKCJkeSIsIi43MWVtIikuc3R5bGUo
InRleHQtYW5jaG9yIiwibWlkZGxlIiksTS5hdHRyKCJkIiwiTSIreVswXSsiLCIraSsiVjBIIit5
WzFdKyJWIitpKTticmVhaztjYXNlInRvcCI6bj1VbyxfLmF0dHIoInkyIiwtdSksUy5hdHRyKCJ5
IiwtKE1hdGgubWF4KHUsMCkrbykpLGIuYXR0cigieDIiLDApLmF0dHIoInkyIiwtdSksay5hdHRy
KCJ4IiwwKS5hdHRyKCJ5IiwtKE1hdGgubWF4KHUsMCkrbykpLHcuYXR0cigiZHkiLCIwZW0iKS5z
dHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxNLmF0dHIoImQiLCJNIit5WzBdKyIsIistaSsi
VjBIIit5WzFdKyJWIistaSk7YnJlYWs7Y2FzZSJsZWZ0IjpuPWpvLF8uYXR0cigieDIiLC11KSxT
LmF0dHIoIngiLC0oTWF0aC5tYXgodSwwKStvKSksYi5hdHRyKCJ4MiIsLXUpLmF0dHIoInkyIiww
KSxrLmF0dHIoIngiLC0oTWF0aC5tYXgodSwwKStvKSkuYXR0cigieSIsMCksdy5hdHRyKCJkeSIs
Ii4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwiZW5kIiksTS5hdHRyKCJkIiwiTSIrLWkrIiwi
K3lbMF0rIkgwViIreVsxXSsiSCIrLWkpO2JyZWFrO2Nhc2UicmlnaHQiOm49am8sXy5hdHRyKCJ4
MiIsdSksUy5hdHRyKCJ4IixNYXRoLm1heCh1LDApK28pLGIuYXR0cigieDIiLHUpLmF0dHIoInky
IiwwKSxrLmF0dHIoIngiLE1hdGgubWF4KHUsMCkrbykuYXR0cigieSIsMCksdy5hdHRyKCJkeSIs
Ii4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSxNLmF0dHIoImQiLCJNIitpKyIs
Iit5WzBdKyJIMFYiK3lbMV0rIkgiK2kpfWlmKGYucmFuZ2VCYW5kKXt2YXIgRT1mLEE9RS5yYW5n
ZUJhbmQoKS8yO2w9Zj1mdW5jdGlvbihuKXtyZXR1cm4gRShuKStBfX1lbHNlIGwucmFuZ2VCYW5k
P2w9ZjpkLmNhbGwobixmKTt2LmNhbGwobixsKSxtLmNhbGwobixmKX0pfXZhciB0LGU9Wm8uc2Nh
bGUubGluZWFyKCkscj16cyx1PTYsaT02LG89MyxhPVsxMF0sYz1udWxsO3JldHVybiBuLnNjYWxl
PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5vcmllbnQ9
ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCBpbiBMcz90KyIiOnpzLG4p
OnJ9LG4udGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1hcmd1bWVu
dHMsbik6YX0sbi50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro
PyhjPXQsbik6Y30sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoPyh0PWUsbik6dH0sbi50aWNrU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVu
Z3RoO3JldHVybiBlPyh1PSt0LGk9K2FyZ3VtZW50c1tlLTFdLG4pOnV9LG4uaW5uZXJUaWNrU2l6
ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxuKTp1fSxuLm91dGVy
VGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbik6aX0s
bi50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxu
KTpvfSxuLnRpY2tTdWJkaXZpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYm
bn0sbn07dmFyIHpzPSJib3R0b20iLExzPXt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX07
Wm8uc3ZnLmJydXNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihpKXtpLmVhY2goZnVuY3Rpb24oKXt2
YXIgaT1aby5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUo
Ii13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vk
b3duLmJydXNoIix1KS5vbigidG91Y2hzdGFydC5icnVzaCIsdSksbz1pLnNlbGVjdEFsbCgiLmJh
Y2tncm91bmQiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNz
IiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNv
ciIsImNyb3NzaGFpciIpLGkuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCku
YXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92
ZSIpO3ZhciBhPWkuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShwLHd0KTthLmV4aXQoKS5yZW1v
dmUoKSxhLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKG4pe3JldHVy
biJyZXNpemUgIitufSkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24obil7cmV0dXJuIFRzW25dfSku
YXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24obil7cmV0dXJuL1tld10kLy50ZXN0KG4p
Py0zOm51bGx9KS5hdHRyKCJ5IixmdW5jdGlvbihuKXtyZXR1cm4vXltuc10vLnRlc3Qobik/LTM6
bnVsbH0pLmF0dHIoIndpZHRoIiw2KS5hdHRyKCJoZWlnaHQiLDYpLnN0eWxlKCJ2aXNpYmlsaXR5
IiwiaGlkZGVuIiksYS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKTt2YXIg
bCxmPVpvLnRyYW5zaXRpb24oaSksaD1aby50cmFuc2l0aW9uKG8pO2MmJihsPVRpKGMpLGguYXR0
cigieCIsbFswXSkuYXR0cigid2lkdGgiLGxbMV0tbFswXSksZShmKSkscyYmKGw9VGkocyksaC5h
dHRyKCJ5IixsWzBdKS5hdHRyKCJoZWlnaHQiLGxbMV0tbFswXSkscihmKSksdChmKX0pfWZ1bmN0
aW9uIHQobil7bi5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9u
KG4pe3JldHVybiJ0cmFuc2xhdGUoIitsWysvZSQvLnRlc3QobildKyIsIitmWysvXnMvLnRlc3Qo
bildKyIpIn0pfWZ1bmN0aW9uIGUobil7bi5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixsWzBd
KSxuLnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsbFsx
XS1sWzBdKX1mdW5jdGlvbiByKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsZlswXSks
bi5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixmWzFd
LWZbMF0pfWZ1bmN0aW9uIHUoKXtmdW5jdGlvbiB1KCl7MzI9PVpvLmV2ZW50LmtleUNvZGUmJihD
fHwoeD1udWxsLHpbMF0tPWxbMV0selsxXS09ZlsxXSxDPTIpLHkoKSl9ZnVuY3Rpb24gcCgpezMy
PT1aby5ldmVudC5rZXlDb2RlJiYyPT1DJiYoelswXSs9bFsxXSx6WzFdKz1mWzFdLEM9MCx5KCkp
fWZ1bmN0aW9uIHYoKXt2YXIgbj1aby5tb3VzZShfKSx1PSExO00mJihuWzBdKz1NWzBdLG5bMV0r
PU1bMV0pLEN8fChaby5ldmVudC5hbHRLZXk/KHh8fCh4PVsobFswXStsWzFdKS8yLChmWzBdK2Zb
MV0pLzJdKSx6WzBdPWxbKyhuWzBdPHhbMF0pXSx6WzFdPWZbKyhuWzFdPHhbMV0pXSk6eD1udWxs
KSxFJiZkKG4sYywwKSYmKGUoUyksdT0hMCksQSYmZChuLHMsMSkmJihyKFMpLHU9ITApLHUmJih0
KFMpLHcoe3R5cGU6ImJydXNoIixtb2RlOkM/Im1vdmUiOiJyZXNpemUifSkpfWZ1bmN0aW9uIGQo
bix0LGUpe3ZhciByLHUsYT1UaSh0KSxjPWFbMF0scz1hWzFdLHA9eltlXSx2PWU/ZjpsLGQ9dlsx
XS12WzBdO3JldHVybiBDJiYoYy09cCxzLT1kK3ApLHI9KGU/ZzpoKT9NYXRoLm1heChjLE1hdGgu
bWluKHMsbltlXSkpOm5bZV0sQz91PShyKz1wKStkOih4JiYocD1NYXRoLm1heChjLE1hdGgubWlu
KHMsMip4W2VdLXIpKSkscj5wPyh1PXIscj1wKTp1PXApLHZbMF0hPXJ8fHZbMV0hPXU/KGU/bz1u
dWxsOmk9bnVsbCx2WzBdPXIsdlsxXT11LCEwKTp2b2lkIDB9ZnVuY3Rpb24gbSgpe3YoKSxTLnN0
eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJk
aXNwbGF5IixuLmVtcHR5KCk/Im5vbmUiOm51bGwpLFpvLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJj
dXJzb3IiLG51bGwpLEwub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1
c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIs
bnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCksTigp
LHcoe3R5cGU6ImJydXNoZW5kIn0pfXZhciB4LE0sXz10aGlzLGI9Wm8uc2VsZWN0KFpvLmV2ZW50
LnRhcmdldCksdz1hLm9mKF8sYXJndW1lbnRzKSxTPVpvLnNlbGVjdChfKSxrPWIuZGF0dW0oKSxF
PSEvXihufHMpJC8udGVzdChrKSYmYyxBPSEvXihlfHcpJC8udGVzdChrKSYmcyxDPWIuY2xhc3Nl
ZCgiZXh0ZW50IiksTj1JKCksej1aby5tb3VzZShfKSxMPVpvLnNlbGVjdChXbykub24oImtleWRv
d24uYnJ1c2giLHUpLm9uKCJrZXl1cC5icnVzaCIscCk7aWYoWm8uZXZlbnQuY2hhbmdlZFRvdWNo
ZXM/TC5vbigidG91Y2htb3ZlLmJydXNoIix2KS5vbigidG91Y2hlbmQuYnJ1c2giLG0pOkwub24o
Im1vdXNlbW92ZS5icnVzaCIsdikub24oIm1vdXNldXAuYnJ1c2giLG0pLFMuaW50ZXJydXB0KCku
c2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksQyl6WzBdPWxbMF0telswXSx6WzFdPWZbMF0telsx
XTtlbHNlIGlmKGspe3ZhciBUPSsvdyQvLnRlc3QoaykscT0rL15uLy50ZXN0KGspO009W2xbMS1U
XS16WzBdLGZbMS1xXS16WzFdXSx6WzBdPWxbVF0selsxXT1mW3FdfWVsc2UgWm8uZXZlbnQuYWx0
S2V5JiYoeD16LnNsaWNlKCkpO1Muc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVj
dEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxaby5zZWxlY3QoImJvZHkiKS5z
dHlsZSgiY3Vyc29yIixiLnN0eWxlKCJjdXJzb3IiKSksdyh7dHlwZToiYnJ1c2hzdGFydCJ9KSx2
KCl9dmFyIGksbyxhPU0obiwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSxjPW51bGws
cz1udWxsLGw9WzAsMF0sZj1bMCwwXSxoPSEwLGc9ITAscD1xc1swXTtyZXR1cm4gbi5ldmVudD1m
dW5jdGlvbihuKXtuLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1hLm9mKHRoaXMsYXJndW1lbnRzKSx0
PXt4OmwseTpmLGk6aSxqOm99LGU9dGhpcy5fX2NoYXJ0X198fHQ7dGhpcy5fX2NoYXJ0X189dCxT
cz9aby5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlv
bigpe2k9ZS5pLG89ZS5qLGw9ZS54LGY9ZS55LG4oe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2Vl
bigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGU9Z3UobCx0LngpLHI9Z3UoZix0LnkpO3Jl
dHVybiBpPW89bnVsbCxmdW5jdGlvbih1KXtsPXQueD1lKHUpLGY9dC55PXIodSksbih7dHlwZToi
YnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7aT10
Lmksbz10Lmosbih7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxuKHt0eXBlOiJicnVzaGVu
ZCJ9KX0pOihuKHt0eXBlOiJicnVzaHN0YXJ0In0pLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNp
emUifSksbih7dHlwZToiYnJ1c2hlbmQifSkpfSl9LG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aD8oYz10LHA9cXNbIWM8PDF8IXNdLG4pOmN9LG4ueT1mdW5jdGlvbih0KXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHA9cXNbIWM8PDF8IXNdLG4pOnN9LG4uY2xhbXA9
ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMmJnM/KGg9ISF0WzBdLGc9ISF0
WzFdKTpjP2g9ISF0OnMmJihnPSEhdCksbik6YyYmcz9baCxnXTpjP2g6cz9nOm51bGx9LG4uZXh0
ZW50PWZ1bmN0aW9uKHQpe3ZhciBlLHIsdSxhLGg7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMm
JihlPXRbMF0scj10WzFdLHMmJihlPWVbMF0scj1yWzBdKSxpPVtlLHJdLGMuaW52ZXJ0JiYoZT1j
KGUpLHI9YyhyKSksZT5yJiYoaD1lLGU9cixyPWgpLChlIT1sWzBdfHxyIT1sWzFdKSYmKGw9W2Us
cl0pKSxzJiYodT10WzBdLGE9dFsxXSxjJiYodT11WzFdLGE9YVsxXSksbz1bdSxhXSxzLmludmVy
dCYmKHU9cyh1KSxhPXMoYSkpLHU+YSYmKGg9dSx1PWEsYT1oKSwodSE9ZlswXXx8YSE9ZlsxXSkm
JihmPVt1LGFdKSksbik6KGMmJihpPyhlPWlbMF0scj1pWzFdKTooZT1sWzBdLHI9bFsxXSxjLmlu
dmVydCYmKGU9Yy5pbnZlcnQoZSkscj1jLmludmVydChyKSksZT5yJiYoaD1lLGU9cixyPWgpKSks
cyYmKG8/KHU9b1swXSxhPW9bMV0pOih1PWZbMF0sYT1mWzFdLHMuaW52ZXJ0JiYodT1zLmludmVy
dCh1KSxhPXMuaW52ZXJ0KGEpKSx1PmEmJihoPXUsdT1hLGE9aCkpKSxjJiZzP1tbZSx1XSxbcixh
XV06Yz9bZSxyXTpzJiZbdSxhXSl9LG4uY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gbi5lbXB0eSgp
fHwobD1bMCwwXSxmPVswLDBdLGk9bz1udWxsKSxufSxuLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJu
ISFjJiZsWzBdPT1sWzFdfHwhIXMmJmZbMF09PWZbMV19LFpvLnJlYmluZChuLGEsIm9uIil9O3Zh
ciBUcz17bjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVz
aXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixz
dzoibmVzdy1yZXNpemUifSxxcz1bWyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ci
XSxbImUiLCJ3Il0sWyJuIiwicyJdLFtdXSxScz1RYS5mb3JtYXQ9aWMudGltZUZvcm1hdCxEcz1S
cy51dGMsUHM9RHMoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO1JzLmlzbz1EYXRlLnByb3RvdHlw
ZS50b0lTT1N0cmluZyYmK25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9IbzpQ
cyxIby5wYXJzZT1mdW5jdGlvbihuKXt2YXIgdD1uZXcgRGF0ZShuKTtyZXR1cm4gaXNOYU4odCk/
bnVsbDp0fSxIby50b1N0cmluZz1Qcy50b1N0cmluZyxRYS5zZWNvbmQ9RHQoZnVuY3Rpb24obil7
cmV0dXJuIG5ldyBuYygxZTMqTWF0aC5mbG9vcihuLzFlMykpfSxmdW5jdGlvbihuLHQpe24uc2V0
VGltZShuLmdldFRpbWUoKSsxZTMqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKG4pe3JldHVybiBu
LmdldFNlY29uZHMoKX0pLFFhLnNlY29uZHM9UWEuc2Vjb25kLnJhbmdlLFFhLnNlY29uZHMudXRj
PVFhLnNlY29uZC51dGMucmFuZ2UsUWEubWludXRlPUR0KGZ1bmN0aW9uKG4pe3JldHVybiBuZXcg
bmMoNmU0Kk1hdGguZmxvb3Iobi82ZTQpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRU
aW1lKCkrNmU0Kk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaW51dGVz
KCl9KSxRYS5taW51dGVzPVFhLm1pbnV0ZS5yYW5nZSxRYS5taW51dGVzLnV0Yz1RYS5taW51dGUu
dXRjLnJhbmdlLFFhLmhvdXI9RHQoZnVuY3Rpb24obil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNl
dCgpLzYwO3JldHVybiBuZXcgbmMoMzZlNSooTWF0aC5mbG9vcihuLzM2ZTUtdCkrdCkpfSxmdW5j
dGlvbihuLHQpe24uc2V0VGltZShuLmdldFRpbWUoKSszNmU1Kk1hdGguZmxvb3IodCkpfSxmdW5j
dGlvbihuKXtyZXR1cm4gbi5nZXRIb3VycygpfSksUWEuaG91cnM9UWEuaG91ci5yYW5nZSxRYS5o
b3Vycy51dGM9UWEuaG91ci51dGMucmFuZ2UsUWEubW9udGg9RHQoZnVuY3Rpb24obil7cmV0dXJu
IG49UWEuZGF5KG4pLG4uc2V0RGF0ZSgxKSxufSxmdW5jdGlvbihuLHQpe24uc2V0TW9udGgobi5n
ZXRNb250aCgpK3QpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNb250aCgpfSksUWEubW9udGhz
PVFhLm1vbnRoLnJhbmdlLFFhLm1vbnRocy51dGM9UWEubW9udGgudXRjLnJhbmdlO3ZhciBVcz1b
MWUzLDVlMywxNWUzLDNlNCw2ZTQsM2U1LDllNSwxOGU1LDM2ZTUsMTA4ZTUsMjE2ZTUsNDMyZTUs
ODY0ZTUsMTcyOGU1LDYwNDhlNSwyNTkyZTYsNzc3NmU2LDMxNTM2ZTZdLGpzPVtbUWEuc2Vjb25k
LDFdLFtRYS5zZWNvbmQsNV0sW1FhLnNlY29uZCwxNV0sW1FhLnNlY29uZCwzMF0sW1FhLm1pbnV0
ZSwxXSxbUWEubWludXRlLDVdLFtRYS5taW51dGUsMTVdLFtRYS5taW51dGUsMzBdLFtRYS5ob3Vy
LDFdLFtRYS5ob3VyLDNdLFtRYS5ob3VyLDZdLFtRYS5ob3VyLDEyXSxbUWEuZGF5LDFdLFtRYS5k
YXksMl0sW1FhLndlZWssMV0sW1FhLm1vbnRoLDFdLFtRYS5tb250aCwzXSxbUWEueWVhciwxXV0s
SHM9UnMubXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaWxsaXNlY29uZHMo
KX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9XSxbIiVJOiVNIixm
dW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXty
ZXR1cm4gbi5nZXRIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF5
KCkmJjEhPW4uZ2V0RGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJuIDEhPW4uZ2V0
RGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX1dLFsiJVkiLHdl
XV0pLEZzPXtyYW5nZTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIFpvLnJhbmdlKE1hdGguY2VpbChu
L2UpKmUsK3QsZSkubWFwKE9vKX0sZmxvb3I6d3QsY2VpbDp3dH07anMueWVhcj1RYS55ZWFyLFFh
LnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIEZvKFpvLnNjYWxlLmxpbmVhcigpLGpzLEhzKX07dmFy
IE9zPWpzLm1hcChmdW5jdGlvbihuKXtyZXR1cm5bblswXS51dGMsblsxXV19KSxZcz1Ecy5tdWx0
aShbWyIuJUwiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ01pbGxpc2Vjb25kcygpfV0sWyI6
JVMiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0
aW9uKG4pe3JldHVybiBuLmdldFVUQ01pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKG4pe3Jl
dHVybiBuLmdldFVUQ0hvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRV
VENEYXkoKSYmMSE9bi5nZXRVVENEYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbihuKXtyZXR1cm4g
MSE9bi5nZXRVVENEYXRlKCl9XSxbIiVCIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNb250
aCgpfV0sWyIlWSIsd2VdXSk7T3MueWVhcj1RYS55ZWFyLnV0YyxRYS5zY2FsZS51dGM9ZnVuY3Rp
b24oKXtyZXR1cm4gRm8oWm8uc2NhbGUubGluZWFyKCksT3MsWXMpfSxaby50ZXh0PVN0KGZ1bmN0
aW9uKG4pe3JldHVybiBuLnJlc3BvbnNlVGV4dH0pLFpvLmpzb249ZnVuY3Rpb24obix0KXtyZXR1
cm4ga3QobiwiYXBwbGljYXRpb24vanNvbiIsWW8sdCl9LFpvLmh0bWw9ZnVuY3Rpb24obix0KXty
ZXR1cm4ga3QobiwidGV4dC9odG1sIixJbyx0KX0sWm8ueG1sPVN0KGZ1bmN0aW9uKG4pe3JldHVy
biBuLnJlc3BvbnNlWE1MfSksImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9k
ZWZpbmUoWm8pOiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyYmKG1vZHVs
ZS5leHBvcnRzPVpvKSx0aGlzLmQzPVpvfSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2VzL2dyYXBo
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9ydW5uZXIvcmVz
b3VyY2VzL2dyYXBoLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21l
dGVyL3J1bm5lci9yZXNvdXJjZXMvZ3JhcGguanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDAgQEAKK2Z1bmN0aW9uIGdyYXBoKHNlbGVjdG9yLCBzaXplLCBtYXJnaW5zLCBheGVzLCBzYW1w
bGVzLCBzYW1wbGluZ1RpbWVPZmZzZXQpCit7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKKyAgICBlbGVtZW50LnRleHRDb250ZW50ID0gbnVsbDsK
KworICAgIHZhciB4ID0gZDMuc2NhbGUubGluZWFyKCkKKyAgICAgICAgICAgIC5yYW5nZShbMCwg
c2l6ZS53aWR0aF0pCisgICAgICAgICAgICAuZG9tYWluKGQzLmV4dGVudChzYW1wbGVzLCBmdW5j
dGlvbihkKSB7IHJldHVybiBkLnRpbWVPZmZzZXQ7IH0pKTsgICAgICAgICAgICAKKworICAgIHZh
ciB5TGVmdCA9IGQzLnNjYWxlLmxpbmVhcigpCisgICAgICAgICAgICAucmFuZ2UoW3NpemUuaGVp
Z2h0LCAwXSkKKyAgICAgICAgICAgIC5kb21haW4oWzAsIGQzLm1heChzYW1wbGVzLCBmdW5jdGlv
bihkKSB7IHJldHVybiBkLnZhbHVlc1swXTsgfSldKTsKKworICAgIHZhciB5UmlnaHQgPSBkMy5z
Y2FsZS5saW5lYXIoKQorICAgICAgICAgICAgLnJhbmdlKFtzaXplLmhlaWdodCwgMF0pCisgICAg
ICAgICAgICAuZG9tYWluKFswLCBkMy5tYXgoc2FtcGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4g
ZC52YWx1ZXNbMV07IH0pXSk7CisKKyAgICB2YXIgeEF4aXMgPSBkMy5zdmcuYXhpcygpCisgICAg
ICAgICAgICAuc2NhbGUoeCkKKyAgICAgICAgICAgIC5vcmllbnQoImJvdHRvbSIpOworCisgICAg
dmFyIHlBeGlzTGVmdCA9IGQzLnN2Zy5heGlzKCkKKyAgICAgICAgICAgIC5zY2FsZSh5TGVmdCkK
KyAgICAgICAgICAgIC5vcmllbnQoImxlZnQiKTsKKworICAgIHZhciB5QXhpc1JpZ2h0ID0gZDMu
c3ZnLmF4aXMoKQorICAgICAgICAgICAgLnNjYWxlKHlSaWdodCkKKyAgICAgICAgICAgIC5vcmll
bnQoInJpZ2h0Iik7CisKKyAgICB2YXIgbGluZUxlZnQgPSBkMy5zdmcubGluZSgpCisgICAgICAg
ICAgICAueChmdW5jdGlvbihkKSB7IHJldHVybiB4KGQudGltZU9mZnNldCk7IH0pCisgICAgICAg
ICAgICAueShmdW5jdGlvbihkKSB7IHJldHVybiB5TGVmdChkLnZhbHVlc1swXSk7IH0pOworCisg
ICAgdmFyIGxpbmVSaWdodCA9IGQzLnN2Zy5saW5lKCkKKyAgICAgICAgICAgIC54KGZ1bmN0aW9u
KGQpIHsgcmV0dXJuIHgoZC50aW1lT2Zmc2V0KTsgfSkKKyAgICAgICAgICAgIC55KGZ1bmN0aW9u
KGQpIHsgcmV0dXJuIHlSaWdodChkLnZhbHVlc1sxXSk7IH0pOworCisgICAgc2FtcGxlcy5mb3JF
YWNoKGZ1bmN0aW9uKGQpIHsKKyAgICAgICAgZC50aW1lT2Zmc2V0ID0gK2QudGltZU9mZnNldDsK
KyAgICAgICAgZC52YWx1ZXNbMF0gPSArZC52YWx1ZXNbMF07CisgICAgICAgIGQudmFsdWVzWzFd
ID0gK2QudmFsdWVzWzFdOyAgICAgICAgCisgICAgfSk7ICAgIAorCisgICAgdmFyIHNhbXBsZWRT
YW1wbGVzID0gc2FtcGxlcy5maWx0ZXIoZnVuY3Rpb24oZCkgeworICAgICAgICByZXR1cm4gZC50
aW1lT2Zmc2V0ID49IHNhbXBsaW5nVGltZU9mZnNldDsKKyAgICB9KTsKKyAgICAKKyAgICB2YXIg
bWVhbkxlZnQgPSBkMy5tZWFuKHNhbXBsZWRTYW1wbGVzLCBmdW5jdGlvbihkKSB7CisgICAgICAg
IHJldHVybiArZC52YWx1ZXNbMF07CisgICAgfSk7CisKKyAgICB2YXIgbWVhblJpZ2h0ID0gZDMu
bWVhbihzYW1wbGVkU2FtcGxlcywgZnVuY3Rpb24oZCkgeworICAgICAgICByZXR1cm4gK2QudmFs
dWVzWzFdOworICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHZhciBz
dmcgPSBkMy5zZWxlY3Qoc2VsZWN0b3IpLmFwcGVuZCgic3ZnIikKKyAgICAgICAgLmF0dHIoIndp
ZHRoIiwgc2l6ZS53aWR0aCArIG1hcmdpbnMubGVmdCArIG1hcmdpbnMucmlnaHQpCisgICAgICAg
IC5hdHRyKCJoZWlnaHQiLCBzaXplLmhlaWdodCArIG1hcmdpbnMudG9wICsgbWFyZ2lucy5ib3R0
b20pCisgICAgICAgIC5hcHBlbmQoImciKQorICAgICAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIs
ICJ0cmFuc2xhdGUoIiArIG1hcmdpbnMubGVmdCArICIsIiArIG1hcmdpbnMudG9wICsgIikiKTsK
KworICAgIC8vIHgtYXhpcworICAgIHN2Zy5hcHBlbmQoImciKQorICAgICAgICAuYXR0cigiY2xh
c3MiLCAieCBheGlzIikKKyAgICAgICAgLmF0dHIoImZpbGwiLCAicmdiKDIzNSwgMjM1LCAyMzUp
IikKKyAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwiICsgc2l6ZS5oZWln
aHQgKyAiKSIpCisgICAgICAgIC5jYWxsKHhBeGlzKQorICAgICAgICAuYXBwZW5kKCJ0ZXh0IikK
KyAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJsYWJlbCIpCisgICAgICAgICAgICAuYXR0cigi
eCIsIHNpemUud2lkdGgpCisgICAgICAgICAgICAuYXR0cigieSIsIC02KQorICAgICAgICAgICAg
LmF0dHIoImZpbGwiLCAicmdiKDIzNSwgMjM1LCAyMzUpIikKKyAgICAgICAgICAgIC5zdHlsZSgi
dGV4dC1hbmNob3IiLCAiZW5kIikKKyAgICAgICAgICAgIC50ZXh0KCJ0aW1lIik7CisgICAgICAg
ICAgICAgICAgIAorICAgIC8vIHlMZWZ0LWF4aXMKKyAgICBzdmcuYXBwZW5kKCJnIikKKyAgICAg
ICAgLmF0dHIoImNsYXNzIiwgInkgYXhpcyIpCisgICAgICAgIC5hdHRyKCJmaWxsIiwgInN0ZWVs
Ymx1ZSIpCisgICAgICAgIC5jYWxsKHlBeGlzTGVmdCkKKyAgICAgICAgLmFwcGVuZCgidGV4dCIp
CisgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAibGFiZWwiKQorICAgICAgICAgICAgLmF0dHIo
InRyYW5zZm9ybSIsICJyb3RhdGUoLTkwKSIpCisgICAgICAgICAgICAuYXR0cigieSIsIDYpCisg
ICAgICAgICAgICAuYXR0cigiZmlsbCIsICJzdGVlbGJsdWUiKQorICAgICAgICAgICAgLmF0dHIo
ImR5IiwgIi43MWVtIikKKyAgICAgICAgICAgIC5zdHlsZSgidGV4dC1hbmNob3IiLCAiZW5kIikK
KyAgICAgICAgICAgIC50ZXh0KGF4ZXNbMF0pOworCisgICAgLy8geVJpZ2h0LWF4aXMKKyAgICBz
dmcuYXBwZW5kKCJnIikKKyAgICAgICAgLmF0dHIoImNsYXNzIiwgInkgYXhpcyIpCisgICAgICAg
IC5hdHRyKCJmaWxsIiwgInJlZCIpCisgICAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNs
YXRlKCIgKyBzaXplLndpZHRoICsgIiwgMCkiKQorICAgICAgICAuY2FsbCh5QXhpc1JpZ2h0KQor
ICAgICAgICAuYXBwZW5kKCJ0ZXh0IikKKyAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJsYWJl
bCIpCisgICAgICAgICAgICAuYXR0cigidHJhbnNmb3JtIiwgInJvdGF0ZSgtOTApIikKKyAgICAg
ICAgICAgIC5hdHRyKCJ5IiwgNikKKyAgICAgICAgICAgIC5hdHRyKCJmaWxsIiwgInJlZCIpCisg
ICAgICAgICAgICAuYXR0cigiZHkiLCAiLjcxZW0iKQorICAgICAgICAgICAgLnN0eWxlKCJ0ZXh0
LWFuY2hvciIsICJlbmQiKQorICAgICAgICAgICAgLnRleHQoYXhlc1sxXSk7CisKKyAgICAvLyBs
ZWZ0LW1lYW4KKyAgICBzdmcuYXBwZW5kKCJzdmc6bGluZSIpCisgICAgICAgIC5hdHRyKCJ4MSIs
IHgoMCkpCisgICAgICAgIC5hdHRyKCJ4MiIsIHNpemUud2lkdGgpCisgICAgICAgIC5hdHRyKCJ5
MSIsIHlMZWZ0KG1lYW5MZWZ0KSkKKyAgICAgICAgLmF0dHIoInkyIiwgeUxlZnQobWVhbkxlZnQp
KQorICAgICAgICAuYXR0cigiY2xhc3MiLCAibGVmdC1tZWFuIik7CisKKyAgICAvLyByaWdodC1t
ZWFuCisgICAgc3ZnLmFwcGVuZCgic3ZnOmxpbmUiKQorICAgICAgICAuYXR0cigieDEiLCB4KDAp
KQorICAgICAgICAuYXR0cigieDIiLCBzaXplLndpZHRoKQorICAgICAgICAuYXR0cigieTEiLCB5
UmlnaHQobWVhblJpZ2h0KSkKKyAgICAgICAgLmF0dHIoInkyIiwgeVJpZ2h0KG1lYW5SaWdodCkp
CisgICAgICAgIC5hdHRyKCJjbGFzcyIsICJyaWdodC1tZWFuIik7ICAgICAgICAKKworICAgIC8v
IHNhbXBsaW5nVGltZU9mZnNldAorICAgIHN2Zy5hcHBlbmQoImxpbmUiKQorICAgICAgICAuYXR0
cigieDEiLCB4KHNhbXBsaW5nVGltZU9mZnNldCkpCisgICAgICAgIC5hdHRyKCJ4MiIsIHgoc2Ft
cGxpbmdUaW1lT2Zmc2V0KSkKKyAgICAgICAgLmF0dHIoInkxIiwgeUxlZnQoMCkpCisgICAgICAg
IC5hdHRyKCJ5MiIsIHlMZWZ0KHlBeGlzTGVmdC5zY2FsZSgpLmRvbWFpbigpWzFdKSkKKyAgICAg
ICAgLmF0dHIoImNsYXNzIiwgInNtYXBsZS10aW1lIik7CisKKyAgICAvLyBsZWZ0LXNhbXBsZXMK
KyAgICBzdmcuYXBwZW5kKCJwYXRoIikKKyAgICAgICAgLmRhdHVtKHNhbXBsZXMpCisgICAgICAg
IC5hdHRyKCJjbGFzcyIsICJsZWZ0LXNhbXBsZXMiKQorICAgICAgICAuYXR0cigiZCIsIGxpbmVM
ZWZ0KTsKKyAgICAgICAgCisgICAgLy8gcmlnaHQtc2FtcGxlcworICAgIHN2Zy5hcHBlbmQoInBh
dGgiKQorICAgICAgICAuZGF0dW0oc2FtcGxlcykKKyAgICAgICAgLmF0dHIoImNsYXNzIiwgInJp
Z2h0LXNhbXBsZXMiKQorICAgICAgICAuYXR0cigiZCIsIGxpbmVSaWdodCk7Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>