<?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>99634</bug_id>
          
          <creation_ts>2012-10-17 13:52:57 -0700</creation_ts>
          <short_desc>[v8] IntegerCache should be removed in favor of a faster v8 API</short_desc>
          <delta_ts>2012-10-22 15:42:03 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>dcarney</cc>
    
    <cc>haraken</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>744577</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-17 13:52:57 -0700</bug_when>
    <thetext>[v8] IntegerCache is redundant with V8&apos;s SMI support and should be removed

It looks like we&apos;d just need to create a version of Integer::New() which is inlined, and can take an Isolate pointer.  Then we would have exactly the same branch cost as our current IntegerCache implementation, without the extra code. :)  We&apos;d also then be faster on all integers up to the SMI limit, instead of const int numberOfCachedSmallIntegers = 64;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744578</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 13:53:51 -0700</bug_when>
    <thetext>We need to add a new V8 API for creating integers quickly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744590</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 14:01:36 -0700</bug_when>
    <thetext>The problem is more that v8::Integer::New needs to grab the isolate out of thread-local storage.  In any case, we should fix this by improving the V8 API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744625</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 14:36:29 -0700</bug_when>
    <thetext>V8 change is in &lt;https://codereview.chromium.org/11212004/&gt;.  I haven&apos;t benchmarked the new API to know whether it is fast enough for our purposes.

@haraken, would you be willing to run the same benchmark you ran when you introduced the IntegerCache?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744815</commentid>
    <comment_count>4</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-10-17 17:07:10 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; The problem is more that v8::Integer::New needs to grab the isolate out of thread-local storage.  In any case, we should fix this by improving the V8 

When I was investigating the performance, another problem was the overhead to create a local handle for a cached persistent handle of SMIs. Given that V8 APIs needs to be general, V8 APIs cannot avoid creating local handles every time. On the other hand, by caching the persistent handles in the V8 binding side, we can avoid creating local handles and just return the cached persistent handles (because V8 binding knows the lifetime of Workers and their persistent handles).

(In reply to comment #3)
&gt; V8 change is in &lt;https://codereview.chromium.org/11212004/&gt;.  I haven&apos;t benchmarked the new API to know whether it is fast enough for our purposes.
&gt; 
&gt; @haraken, would you be willing to run the same benchmark you ran when you introduced the IntegerCache?

The benchmark is Bindings/scroll-top.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744853</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 17:44:32 -0700</bug_when>
    <thetext>&gt; The benchmark is Bindings/scroll-top.html

Thanks.  I&apos;ll try that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744870</commentid>
    <comment_count>6</comment_count>
      <attachid>169316</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 17:56:27 -0700</bug_when>
    <thetext>Created attachment 169316
Patch for benchmarking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744871</commentid>
    <comment_count>7</comment_count>
      <attachid>169317</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 17:57:42 -0700</bug_when>
    <thetext>Created attachment 169317
PerformanceTest results (first three are with patch; last three are without patch)

Looks like about a 5% slow down on this benchmark.  It&apos;s a bit hard to tell because this machine is noisy for benchmarks.  I might try benchmarking it again on a more stable machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744876</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 18:01:55 -0700</bug_when>
    <thetext>For fun, I ran the benchmark with the old v8::Integer::New API, and the new API is definitely faster, just not as fast as having the integer cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744879</commentid>
    <comment_count>9</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-10-17 18:03:58 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; For fun, I ran the benchmark with the old v8::Integer::New API, and the new API is definitely faster, just not as fast as having the integer cache.

I would guess that the new API is still consuming time on creating a local handle by Utils::IntegerToLocal(result), which is not needed in the IntegerCache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744880</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 18:07:16 -0700</bug_when>
    <thetext>&gt; I would guess that the new API is still consuming time on creating a local handle by Utils::IntegerToLocal(result), which is not needed in the IntegerCache.

What takes the time here?

#define MAKE_TO_LOCAL(Name, From, To)                                       \
  Local&lt;v8::To&gt; Utils::Name(v8::internal::Handle&lt;v8::internal::From&gt; obj) { \
    ASSERT(obj.is_null() || !obj-&gt;IsTheHole());                             \
    return Local&lt;To&gt;(reinterpret_cast&lt;To*&gt;(obj.location()));                \
  }

I don&apos;t see a call to Local::New there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744884</commentid>
    <comment_count>11</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-10-17 18:16:07 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; What takes the time here?
&gt; 
&gt; #define MAKE_TO_LOCAL(Name, From, To)                                       \
&gt;   Local&lt;v8::To&gt; Utils::Name(v8::internal::Handle&lt;v8::internal::From&gt; obj) { \
&gt;     ASSERT(obj.is_null() || !obj-&gt;IsTheHole());                             \
&gt;     return Local&lt;To&gt;(reinterpret_cast&lt;To*&gt;(obj.location()));                \
&gt;   }
&gt; 
&gt; I don&apos;t see a call to Local::New there.

hmm, that&apos;s true...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744890</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-17 18:29:19 -0700</bug_when>
    <thetext>I think I just need to benchmark this stuff on a more performance-stable machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745738</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-18 16:47:23 -0700</bug_when>
    <thetext>I benchmarked this on a more performance-stable machine, and the faster API isn&apos;t fast enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747984</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-22 15:42:03 -0700</bug_when>
    <thetext>Bug 100016 is a follow up to this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169316</attachid>
            <date>2012-10-17 17:56:27 -0700</date>
            <delta_ts>2012-10-17 17:56:27 -0700</delta_ts>
            <desc>Patch for benchmarking</desc>
            <filename>bug-99634-20121017175514.patch</filename>
            <type>text/plain</type>
            <size>1066</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oCmluZGV4IGE0MGU3NWFhZWYzMzc1M2QzNDg3ZDM1NDZkM2M1MGU1ZGQ3MDRlODQuLmU2
ODUyMzIxYTA3NTUwYjg3Mjk0YmUwNGY0Njg3NTIxOTE1OWRkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZy5oCkBAIC0xMDksMTQgKzEwOSwxMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gdjhJbnRlZ2VyKGlu
dCB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogICAgIHsKLSAgICAgICAgVjhQZXJJ
c29sYXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoaXNvbGF0ZSk7Ci0g
ICAgICAgIHJldHVybiBkYXRhLT5pbnRlZ2VyQ2FjaGUoKS0+djhJbnRlZ2VyKHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIGlzb2xhdGUgPyB2ODo6SW50ZWdlcjo6TmV3KHZhbHVlLCBpc29sYXRlKSA6
IHY4OjpJbnRlZ2VyOjpOZXcodmFsdWUpOwogICAgIH0KIAogICAgIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpJbnRlZ2VyPiB2OFVuc2lnbmVkSW50ZWdlcih1bnNpZ25lZCB2YWx1ZSwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUgPSAwKQogICAgIHsKLSAgICAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0YSA9
IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoaXNvbGF0ZSk7Ci0gICAgICAgIHJldHVybiBkYXRh
LT5pbnRlZ2VyQ2FjaGUoKS0+djhVbnNpZ25lZEludGVnZXIodmFsdWUpOworICAgICAgICByZXR1
cm4gaXNvbGF0ZSA/IHY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQodmFsdWUsIGlzb2xhdGUp
IDogdjg6OkludGVnZXI6Ok5ld0Zyb21VbnNpZ25lZCh2YWx1ZSk7CiAgICAgfQogCiAgICAgaW5s
aW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFVuZGVmaW5lZCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>169317</attachid>
            <date>2012-10-17 17:57:42 -0700</date>
            <delta_ts>2012-10-17 17:57:42 -0700</delta_ts>
            <desc>PerformanceTest results (first three are with patch; last three are without patch)</desc>
            <filename>PerformanceTestsResults.html</filename>
            <type>text/html</type>
            <size>28416</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPldlYktpdCBQZXJmb3JtYW5jZSBU
ZXN0IFJlc3VsdHM8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKc2VjdGlvbiB7CiAg
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVs
YXRpdmU7Cn0KCi50aW1lLXBsb3RzIHsKICAgIHBhZGRpbmctbGVmdDogMjVweDsKfQoKLnRpbWUt
cGxvdHMgPiBkaXYgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDkwcHg7
CiAgICBoZWlnaHQ6IDQwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KCnNlY3Rpb24gaDEg
ewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxZW07Cn0KCnNlY3Rpb24g
LnRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVy
OwogICAgYmFja2dyb3VuZDogI2ZmY2M2NjsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIHBh
ZGRpbmc6IDBweCA1cHg7Cn0KCmJvZHkgewogICAgcGFkZGluZzogMHB4OwogICAgbWFyZ2luOiAw
cHg7CiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKfQoKdGFibGUgewogICAgYmFja2dyb3Vu
ZDogd2hpdGU7CiAgICB3aWR0aDogMTAwJTsKfQoKdGFibGUsIHRkLCB0aCB7CiAgICBib3JkZXIt
Y29sbGFwc2U6IGNvbGxhcHNlOwogICAgcGFkZGluZzogNXB4Owp9Cgp0ci5ldmVuIHsKICAgIGJh
Y2tncm91bmQ6ICNmNmY2ZjY7Cn0KCnRhYmxlIHRkIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KCnRoLCB0ZCB7CiAgICBjdXJzb3I6IHBvaW50
ZXI7CiAgICBjdXJzb3I6IGhhbmQ7Cn0KCnRoIHsKICAgIGJhY2tncm91bmQ6ICNlNmVlZWU7CiAg
ICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKHJnYigyNDQsIDI0NCwgMjQ0KSksIHRvKHJnYigyMTcsIDIxNywgMjE3KSkpOwog
ICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKfQoKdGg6YWZ0ZXIgewogICAgY29udGVudDogJyBc
MjVCOCc7Cn0KCnRoLmhlYWRlclNvcnRVcDphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUJFJzsK
fQoKdGguaGVhZGVyU29ydERvd246YWZ0ZXIgewogICAgY29udGVudDogJyBcMjVCNCc7Cn0KCnRk
LmNvbXBhcmlzb24sIHRkLnJlc3VsdCB7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKdGQuYmV0
dGVyIHsKICAgIGNvbG9yOiAjNmM2Owp9Cgp0ZC53b3JzZSB7CiAgICBjb2xvcjogI2M2NjsKfQoK
dGQubWlzc2luZyB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5jaGVja2JveCB7CiAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiAjZWVlOwogICAgYmFja2dyb3Vu
ZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgZnJvbShy
Z2IoMjIwLCAyMjAsIDIyMCkpLCB0byhyZ2IoMjAwLCAyMDAsIDIwMCkpKTsKICAgIGJvcmRlcjog
aW5zZXQgMXB4ICNkZGQ7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBtYXJnaW46IDEwcHg7
CiAgICBmb250LXNpemU6IHNtYWxsOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY3Vyc29yOiBo
YW5kOwogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgIGZvbnQtd2VpZ2h0OiBib2xk
Owp9CgouY2hlY2tib3ggc3BhbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5l
LWhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBib3JkZXI6IG91dHNldCAx
cHggdHJhbnNwYXJlbnQ7Cn0KCi5jaGVja2JveCAuY2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kOiAj
ZTZlZWVlOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9w
LCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjU1LCAyNTUsIDI1NSkpLCB0byhyZ2IoMjM1LCAyMzUs
IDIzNSkpKTsKICAgIGJvcmRlcjogb3V0c2V0IDFweCAjZWVlOwogICAgYm9yZGVyLXJhZGl1czog
NXB4Owp9Cgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwIDEw
cHg7Ij4KUmVzdWx0IDxzcGFuIGlkPSJ0aW1lLW1lbW9yeSIgY2xhc3M9ImNoZWNrYm94Ij48c3Bh
biBjbGFzcz0iY2hlY2tlZCI+VGltZTwvc3Bhbj48c3Bhbj5NZW1vcnk8L3NwYW4+PC9zcGFuPgpS
ZWZlcmVuY2UgPHNwYW4gaWQ9InJlZmVyZW5jZSIgY2xhc3M9ImNoZWNrYm94Ij48L3NwYW4+Cjwv
ZGl2Pgo8dGFibGUgaWQ9ImNvbnRhaW5lciI+PC90YWJsZT4KPHNjcmlwdD4KCihmdW5jdGlvbiAo
KSB7CiAgICB2YXIgalF1ZXJ5ID0gWydQZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2Vz
L2Ryb21hZW8vd2ViL2xpYi9qcXVlcnktMS42LjQuanMnXTsKICAgIHZhciBwbHVnaW5zID0gWydQ
ZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9qcXVlcnkuZmxvdC5taW4uanMnLCAnUGVyZm9ybWFu
Y2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LnRhYmxlc29ydGVyLm1pbi5qcyddOwogICAgdmFyIGxv
Y2FsUGF0aCA9ICcvc3JjL2FiYXJ0aC13ZWJraXQnOwogICAgdmFyIHJlbW90ZVBhdGggPSAnaHR0
cHM6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuayc7CiAgICB2YXIgbnVt
YmVyT2ZGYWlsdXJlcyA9IDA7CiAgICB2YXIgc3RhcnRlZExvYWRpbmdQbHVnaW5zID0gZmFsc2U7
CiAgICB2YXIgbnVtYmVyT2ZMb2FkZWRQbHVnaW5zID0gMDsKCiAgICBmdW5jdGlvbiBsb2FkU2Ny
aXB0KHNyYywgbG9hZGVkLCBmYWlsZWQpIHsKICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTsKICAg
ICAgICBzY3JpcHQuc3JjID0gc3JjOwogICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkZWQ7CiAg
ICAgICAgaWYgKGZhaWxlZCkKICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBmYWlsZWQ7CiAg
ICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgfQoKICAgIGZ1bmN0
aW9uIGxvYWRQbHVnaW5zKHRydW5rUGF0aCkgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cGx1Z2lucy5sZW5ndGg7IGkrKykKICAgICAgICAgICAgbG9hZFNjcmlwdCh0cnVua1BhdGggKyAn
LycgKyBwbHVnaW5zW2ldLCBsb2FkZWRQbHVnaW4sIGNyZWF0ZUZhaWxlZFRvTG9hZFBsdWdpbihw
bHVnaW5zW2ldKSk7CiAgICB9CgogICAgZnVuY3Rpb24gbG9hZGVkUGx1Z2luKCkgewogICAgICAg
IG51bWJlck9mTG9hZGVkUGx1Z2lucysrOwogICAgICAgIGlmIChudW1iZXJPZkxvYWRlZFBsdWdp
bnMgPT0gcGx1Z2lucy5sZW5ndGgpCiAgICAgICAgICAgIHNldFRpbWVvdXQoaW5pdCwgMCk7ICAg
ICAgICAgICAgCiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlRmFpbGVkVG9Mb2FkUGx1Z2luKHBs
dWdpbikgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGFsZXJ0KCJGYWlsZWQgdG8gbG9h
ZCAiICsgcGx1Z2luKTsgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZUxvYWRlZEpRdWVyeSh0
cnVua1BhdGgpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBsb2FkUGx1Z2lucyh0cnVu
a1BhdGgpOyB9CiAgICB9CgogICAgbG9hZFNjcmlwdChsb2NhbFBhdGggKyAnLycgKyBqUXVlcnks
CiAgICAgICAgY3JlYXRlTG9hZGVkSlF1ZXJ5KGxvY2FsUGF0aCksCiAgICAgICAgZnVuY3Rpb24g
KCkgewogICAgICAgICAgICBsb2FkU2NyaXB0KHJlbW90ZVBhdGggKyAnLycgKyBqUXVlcnksCiAg
ICAgICAgICAgICAgICBjcmVhdGVMb2FkZWRKUXVlcnkocmVtb3RlUGF0aCksCiAgICAgICAgICAg
ICAgICBmdW5jdGlvbiAoKSB7IGFsZXJ0KCJGYWlsZWQgdG8gbG9hZCBqUXVlcnkuIik7IH0pOwog
ICAgICAgIH0pOwp9KSgpOwoKZnVuY3Rpb24gVGVzdFJlc3VsdChhc3NvY2lhdGVkVGVzdCwgcmVz
dWx0LCBhc3NvY2lhdGVkUnVuKSB7CiAgICB0aGlzLnVuaXQgPSBmdW5jdGlvbiAoKSB7IHJldHVy
biByZXN1bHQudW5pdDsgfQogICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNz
b2NpYXRlZFRlc3Q7IH0KICAgIHRoaXMudmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVz
dWx0LnZhbHVlcyA/IHJlc3VsdC52YWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4g
YXNzb2NpYXRlZFRlc3Quc2NhbGluZ0ZhY3RvcigpICogdmFsdWU7IH0pIDogdW5kZWZpbmVkOyB9
CiAgICB0aGlzLnVuc2NhbGVkTWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3VsdC5hdmc7
IH0KICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0LnNj
YWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5hdmc7IH0KICAgIHRoaXMubWluID0gZnVuY3Rpb24gKCkg
eyByZXR1cm4gYXNzb2NpYXRlZFRlc3Quc2NhbGluZ0ZhY3RvcigpICogcmVzdWx0Lm1pbjsgfQog
ICAgdGhpcy5tYXggPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NvY2lhdGVkVGVzdC5zY2FsaW5n
RmFjdG9yKCkgKiByZXN1bHQubWF4OyB9CiAgICB0aGlzLnN0ZGV2ID0gZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gYXNzb2NpYXRlZFRlc3Quc2NhbGluZ0ZhY3RvcigpICogcmVzdWx0LnN0ZGV2OyB9CiAg
ICB0aGlzLnN0ZGV2UmF0aW8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN1bHQuc3RkZXYgLyBy
ZXN1bHQuYXZnOyB9CiAgICB0aGlzLnBlcmNlbnREaWZmZXJlbmNlID0gZnVuY3Rpb24ob3RoZXIp
IHsgcmV0dXJuIChvdGhlci5tZWFuKCkgLSB0aGlzLm1lYW4oKSkgLyB0aGlzLm1lYW4oKTsgfQog
ICAgdGhpcy5pc1N0YXRpc3RpY2FsbHlTaWduaWZpY2FudCA9IGZ1bmN0aW9uIChvdGhlcikgewog
ICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMob3RoZXIubWVhbigpIC0gdGhpcy5tZWFuKCkpOwog
ICAgICAgIHJldHVybiBkaWZmID4gdGhpcy5zdGRldigpICYmIGRpZmYgPiBvdGhlci5zdGRldigp
OwogICAgfQogICAgdGhpcy5ydW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NvY2lhdGVkUnVu
OyB9Cn0KCmZ1bmN0aW9uIFRlc3RSdW4oZW50cnkpIHsKICAgIHRoaXMuZGVzY3JpcHRpb24gPSBm
dW5jdGlvbiAoKSB7IHJldHVybiBlbnRyeVsnZGVzY3JpcHRpb24nXTsgfQogICAgdGhpcy53ZWJr
aXRSZXZpc2lvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudHJ5Wyd3ZWJraXQtcmV2aXNpb24n
XTsgfQogICAgdGhpcy5sYWJlbCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbGFiZWwgPSAn
cicgKyB0aGlzLndlYmtpdFJldmlzaW9uKCk7CiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRpb24o
KSkKICAgICAgICAgICAgbGFiZWwgKz0gJyAmZGFzaDsgJyArIHRoaXMuZGVzY3JpcHRpb24oKTsK
ICAgICAgICByZXR1cm4gbGFiZWw7CiAgICB9Cn0KCmZ1bmN0aW9uIFBlcmZUZXN0KG5hbWUpIHsK
ICAgIHZhciB0ZXN0UmVzdWx0cyA9IFtdOwogICAgdmFyIGNhY2hlZFVuaXQgPSBudWxsOwogICAg
dmFyIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxsOwoKICAgIC8vIFdlIGNhbid0IGRvIHRoaXMg
aW4gVGVzdFJlc3VsdCBiZWNhdXNlIGFsbCByZXN1bHRzIGZvciBlYWNoIHRlc3QgbmVlZCB0byBz
aGFyZSB0aGUgc2FtZSB1bml0IGFuZCB0aGUgc2FtZSBzY2FsaW5nIGZhY3Rvci4KICAgIGZ1bmN0
aW9uIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKSB7CiAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBiZSBhZGp1c3RpbmcgdW5pdHMgb24gZXZlcnkgdGVzdCByZXN1bHQuCiAgICAg
ICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvbiB0aGUgZmlyc3QgdGVzdC4KICAgICAgICBpZiAo
IXRlc3RSZXN1bHRzLmxlbmd0aCB8fCBjYWNoZWRVbml0KQogICAgICAgICAgICByZXR1cm47Cgog
ICAgICAgIHZhciB1bml0ID0gdGVzdFJlc3VsdHNbMF0udW5pdCgpOyAvLyBGSVhNRTogV2Ugc2hv
dWxkIHZlcmlmeSB0aGF0IGFsbCByZXN1bHRzIGhhdmUgdGhlIHNhbWUgdW5pdC4KICAgICAgICB2
YXIgbWVhbiA9IHRlc3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ugc2hv
dWxkIGxvb2sgYXQgYWxsIHZhbHVlcy4KICAgICAgICB2YXIga2lsbyA9IHVuaXQgPT0gJ2J5dGVz
JyA/IDEwMjQgOiAxMDAwOwogICAgICAgIGlmIChtZWFuID4gMTAgKiBraWxvICoga2lsbyAmJiB1
bml0ICE9ICdtcycpIHsKICAgICAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IDEgLyBraWxv
IC8ga2lsbzsKICAgICAgICAgICAgY2FjaGVkVW5pdCA9ICdNICcgKyB1bml0OwogICAgICAgIH0g
ZWxzZSBpZiAobWVhbiA+IDEwICoga2lsbykgewogICAgICAgICAgICBjYWNoZWRTY2FsaW5nRmFj
dG9yID0gMSAvIGtpbG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSB1bml0ID09ICdtcycgPyAn
cycgOiAoJ0sgJyArIHVuaXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNhY2hlZFNj
YWxpbmdGYWN0b3IgPSAxOwogICAgICAgICAgICBjYWNoZWRVbml0ID0gdW5pdDsKICAgICAgICB9
CiAgICB9CgogICAgdGhpcy5uYW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZTsgfQogICAg
dGhpcy5pc01lbW9yeVRlc3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuYW1lLmluZGV4T2YoJzon
KSA+PSAwOyB9CiAgICB0aGlzLmFkZFJlc3VsdCA9IGZ1bmN0aW9uIChuZXdSZXN1bHQpIHsKICAg
ICAgICB0ZXN0UmVzdWx0cy5wdXNoKG5ld1Jlc3VsdCk7CiAgICAgICAgY2FjaGVkVW5pdCA9IG51
bGw7CiAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IG51bGw7CiAgICB9CiAgICB0aGlzLnJl
c3VsdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXN0UmVzdWx0czsgfQogICAgdGhpcy5zY2Fs
aW5nRmFjdG9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5l
ZWRlZCgpOwogICAgICAgIHJldHVybiBjYWNoZWRTY2FsaW5nRmFjdG9yOwogICAgfQogICAgdGhp
cy51bml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVk
ZWQoKTsKICAgICAgICByZXR1cm4gY2FjaGVkVW5pdDsKICAgIH0KICAgIHRoaXMuc21hbGxlcklz
QmV0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy51bml0KCkgPT0gJ21zJyB8fCB0aGlz
LnVuaXQoKSA9PSAnYnl0ZXMnOyB9Cn0KCnZhciBwbG90Q29sb3IgPSAncmdiKDIzMCw1MCw1MCkn
Owp2YXIgc3VicG9pbnRzUGxvdE9wdGlvbnMgPSB7CiAgICBsaW5lczoge3Nob3c6dHJ1ZSwgbGlu
ZVdpZHRoOiAwfSwKICAgIGNvbG9yOiBwbG90Q29sb3IsCiAgICBwb2ludHM6IHtzaG93OiB0cnVl
LCByYWRpdXM6IDF9LAogICAgYmFyczoge3Nob3c6IGZhbHNlfX07Cgp2YXIgbWFpblBsb3RPcHRp
b25zID0gewogICAgeGF4aXM6IHsKICAgICAgICBtaW46IC0wLjUsCiAgICAgICAgdGlja1NpemU6
IDEsCiAgICB9LAogICAgY3Jvc3NoYWlyOiB7IG1vZGU6ICd5JyB9LAogICAgc2VyaWVzOiB7IHNo
YWRvd1NpemU6IDAgfSwKICAgIGJhcnM6IHtzaG93OiB0cnVlLCBhbGlnbjogJ2NlbnRlcicsIGJh
cldpZHRoOiAwLjV9LAogICAgbGluZXM6IHsgc2hvdzogZmFsc2UgfSwKICAgIHBvaW50czogeyBz
aG93OiB0cnVlIH0sCiAgICBncmlkOiB7CiAgICAgICAgYm9yZGVyV2lkdGg6IDEsCiAgICAgICAg
Ym9yZGVyQ29sb3I6ICcjY2NjJywKICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJywKICAg
ICAgICBob3ZlcmFibGU6IHRydWUsCiAgICAgICAgYXV0b0hpZ2hsaWdodDogZmFsc2UsCiAgICB9
Cn07Cgp2YXIgdGltZVBsb3RPcHRpb25zID0gewogICAgeWF4aXM6IHsgc2hvdzogZmFsc2UgfSwK
ICAgIHhheGlzOiB7IHNob3c6IGZhbHNlIH0sCiAgICBsaW5lczogeyBzaG93OiB0cnVlIH0sCiAg
ICBncmlkOiB7IGJvcmRlcldpZHRoOiAxLCBib3JkZXJDb2xvcjogJyNjY2MnIH0sCiAgICBjb2xv
cnM6IFsgcGxvdENvbG9yIF0KfTsKCmZ1bmN0aW9uIGNyZWF0ZVBsb3QoY29udGFpbmVyLCB0ZXN0
KSB7CiAgICB2YXIgc2VjdGlvbiA9ICQoJzxzZWN0aW9uPjxkaXYgY2xhc3M9InBsb3QiPjwvZGl2
PjxkaXYgY2xhc3M9InRpbWUtcGxvdHMiPjwvZGl2PicKICAgICAgICArICc8c3BhbiBjbGFzcz0i
dG9vbHRpcCI+PC9zcGFuPjwvc2VjdGlvbj4nKTsKICAgIHNlY3Rpb24uY2hpbGRyZW4oJy5wbG90
JykuY3NzKHsnd2lkdGgnOiAoMTAwICogdGVzdC5yZXN1bHRzKCkubGVuZ3RoICsgMjUpICsgJ3B4
JywgJ2hlaWdodCc6ICczMDBweCd9KTsKICAgICQoY29udGFpbmVyKS5hcHBlbmQoc2VjdGlvbik7
CgogICAgdmFyIHBsb3RDb250YWluZXIgPSBzZWN0aW9uLmNoaWxkcmVuKCcucGxvdCcpOwogICAg
dmFyIG1pbklzWmVybyA9IHRydWU7CiAgICBhdHRhY2hQbG90KHRlc3QsIHBsb3RDb250YWluZXIs
IG1pbklzWmVybyk7CgogICAgYXR0YWNoVGltZVBsb3RzKHRlc3QsIHNlY3Rpb24uY2hpbGRyZW4o
Jy50aW1lLXBsb3RzJykpOwoKICAgIHZhciB0b29sdGlwID0gc2VjdGlvbi5jaGlsZHJlbignLnRv
b2x0aXAnKTsKICAgIHBsb3RDb250YWluZXIuYmluZCgncGxvdGhvdmVyJywgZnVuY3Rpb24gKGV2
ZW50LCBwb3NpdGlvbiwgaXRlbSkgewogICAgICAgIGlmIChpdGVtKSB7CiAgICAgICAgICAgIHZh
ciBwb3N0Zml4ID0gaXRlbS5zZXJpZXMuaWQgPyAnICgnICsgaXRlbS5zZXJpZXMuaWQgKyAnKScg
OiAnJzsKICAgICAgICAgICAgdG9vbHRpcC5odG1sKGl0ZW0uZGF0YXBvaW50WzFdLnRvUHJlY2lz
aW9uKDQpICsgcG9zdGZpeCk7CiAgICAgICAgICAgIHZhciBzZWN0aW9uT2Zmc2V0ID0gJChzZWN0
aW9uKS5vZmZzZXQoKTsKICAgICAgICAgICAgdG9vbHRpcC5jc3Moe2xlZnQ6IGl0ZW0ucGFnZVgg
LSBzZWN0aW9uT2Zmc2V0LmxlZnQgLSB0b29sdGlwLm91dGVyV2lkdGgoKSAvIDIsIHRvcDogaXRl
bS5wYWdlWSAtIHNlY3Rpb25PZmZzZXQudG9wICsgMTB9KTsKICAgICAgICAgICAgdG9vbHRpcC5m
YWRlSW4oMjAwKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgICAgdG9vbHRpcC5oaWRlKCk7CiAg
ICB9KTsKICAgIHBsb3RDb250YWluZXIubW91c2VvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIHRv
b2x0aXAuaGlkZSgpOwogICAgfSk7CiAgICBwbG90Q29udGFpbmVyLmNsaWNrKGZ1bmN0aW9uIChl
dmVudCkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgbWluSXNaZXJv
ID0gIW1pbklzWmVybzsKICAgICAgICBhdHRhY2hQbG90KHRlc3QsIHBsb3RDb250YWluZXIsIG1p
bklzWmVybyk7CiAgICB9KTsKCiAgICByZXR1cm4gc2VjdGlvbjsKfQoKZnVuY3Rpb24gYXR0YWNo
VGltZVBsb3RzKHRlc3QsIGNvbnRhaW5lcikgewogICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3Vs
dHMoKTsKICAgIHZhciBhdHRhY2hlZFBsb3QgPSBmYWxzZTsKICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGNvbnRhaW5lci5hcHBlbmQoJzxkaXY+
PC9kaXY+Jyk7CiAgICAgICAgdmFyIHZhbHVlcyA9IHJlc3VsdHNbaV0udmFsdWVzKCk7CiAgICAg
ICAgaWYgKCF2YWx1ZXMpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGF0dGFjaGVkUGxv
dCA9IHRydWU7CgogICAgICAgICQucGxvdChjb250YWluZXIuY2hpbGRyZW4oKS5sYXN0KCksIFt2
YWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgdmFsdWVd
OyB9KV0sCiAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIHt9LCB0aW1lUGxvdE9wdGlvbnMsIHt5
YXhpczoge21pbjogTWF0aC5taW4uYXBwbHkoTWF0aCwgdmFsdWVzKSAqIDAuOSwgbWF4OiBNYXRo
Lm1heC5hcHBseShNYXRoLCB2YWx1ZXMpICogMS4xfSwKICAgICAgICAgICAgICAgIHhheGlzOiB7
bWluOiAtMC41LCBtYXg6IHZhbHVlcy5sZW5ndGggLSAwLjV9fSkpOwogICAgfQogICAgaWYgKCFh
dHRhY2hlZFBsb3QpCiAgICAgICAgY29udGFpbmVyLmNoaWxkcmVuKCkucmVtb3ZlKCk7Cn0KCmZ1
bmN0aW9uIGF0dGFjaFBsb3QodGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKSB7CiAgICB2
YXIgcmVzdWx0cyA9IHRlc3QucmVzdWx0cygpOwoKICAgIHZhciB2YWx1ZXMgPSByZXN1bHRzLnJl
ZHVjZShmdW5jdGlvbiAodmFsdWVzLCByZXN1bHQsIGluZGV4KSB7CiAgICAgICAgdmFyIG5ld1Zh
bHVlcyA9IHJlc3VsdC52YWx1ZXMoKTsKICAgICAgICByZXR1cm4gbmV3VmFsdWVzID8gdmFsdWVz
LmNvbmNhdChuZXdWYWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gW2luZGV4LCB2
YWx1ZV07IH0pKSA6IHZhbHVlczsKICAgIH0sIFtdKTsKCiAgICB2YXIgcGxvdERhdGEgPSBbXTsK
ICAgIGlmICh2YWx1ZXMubGVuZ3RoKQogICAgICAgIHBsb3REYXRhID0gWyQuZXh0ZW5kKHRydWUs
IHt9LCBzdWJwb2ludHNQbG90T3B0aW9ucywge2RhdGE6IHZhbHVlc30pXTsKICAgIGVsc2Ugewog
ICAgICAgIGZ1bmN0aW9uIG1ha2VTdWJwb2ludHMoaWQsIGNhbGxiYWNrKSB7IHJldHVybiAkLmV4
dGVuZCh0cnVlLCB7fSwgc3VicG9pbnRzUGxvdE9wdGlvbnMsIHtpZDogaWQsIGRhdGE6IHJlc3Vs
dHMubWFwKGNhbGxiYWNrKX0pOyB9CiAgICAgICAgcGxvdERhdGEgPSBbbWFrZVN1YnBvaW50cygn
bWluJywgZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0Lm1p
bigpXTsgfSksCiAgICAgICAgbWFrZVN1YnBvaW50cygnbWF4JywgZnVuY3Rpb24gKHJlc3VsdCwg
aW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0Lm1heCgpXTsgfSksCiAgICAgICAgbWFrZVN1
YnBvaW50cygnLSYjOTYzOycsIGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBbaW5k
ZXgsIHJlc3VsdC5tZWFuKCkgLSByZXN1bHQuc3RkZXYoKV07IH0pLAogICAgICAgIG1ha2VTdWJw
b2ludHMoJysmIzk2MzsnLCBmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gW2luZGV4
LCByZXN1bHQubWVhbigpICsgcmVzdWx0LnN0ZGV2KCldOyB9KV07CiAgICB9CgogICAgcGxvdERh
dGEucHVzaCh7aWQ6ICcmbXU7JywgZGF0YTogcmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwg
aW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0Lm1lYW4oKV07IH0pLCBjb2xvcjogcGxvdENv
bG9yfSk7CgogICAgdmFyIGN1cnJlbnRQbG90T3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBt
YWluUGxvdE9wdGlvbnMsIHt5YXhpczogewogICAgICAgIG1pbjogbWluSXNaZXJvID8gMCA6IE1h
dGgubWluLmFwcGx5KE1hdGgsIHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7
IHJldHVybiByZXN1bHQubWluKCk7IH0pKSAqIDAuOTgsCiAgICAgICAgbWF4OiBNYXRoLm1heC5h
cHBseShNYXRoLCByZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4g
cmVzdWx0Lm1heCgpOyB9KSkgKiAobWluSXNaZXJvID8gMS4xIDogMS4wMSl9fSk7CgogICAgY3Vy
cmVudFBsb3RPcHRpb25zLnhheGlzLm1heCA9IHJlc3VsdHMubGVuZ3RoIC0gMC41OwogICAgY3Vy
cmVudFBsb3RPcHRpb25zLnhheGlzLnRpY2tzID0gcmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3Vs
dCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0LnJ1bigpLmxhYmVsKCldOyB9KTsKCiAg
ICAkLnBsb3QocGxvdENvbnRhaW5lciwgcGxvdERhdGEsIGN1cnJlbnRQbG90T3B0aW9ucyk7Cn0K
CmZ1bmN0aW9uIHRvRml4ZWRXaWR0aFByZWNpc2lvbih2YWx1ZSkgewogICAgdmFyIGRlY2ltYWwg
PSB2YWx1ZS50b0ZpeGVkKDIpOwogICAgcmV0dXJuIGRlY2ltYWw7Cn0KCmZ1bmN0aW9uIGZvcm1h
dFBlcmNlbnRhZ2UoZnJhY3Rpb24pIHsKICAgIHZhciBwZXJjZW50YWdlID0gZnJhY3Rpb24gKiAx
MDA7CiAgICByZXR1cm4gKGZyYWN0aW9uICogMTAwKS50b0ZpeGVkKDIpICsgJyUnOwp9CgpmdW5j
dGlvbiBjcmVhdGVUYWJsZSh0ZXN0cywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVu
Y2VJbmRleCkgewogICAgJCgnI2NvbnRhaW5lcicpLmh0bWwoJzx0aGVhZD48dHI+PHRoPlRlc3Q8
L3RoPjx0aD5Vbml0PC90aD4nICsgcnVucy5tYXAoZnVuY3Rpb24gKHJ1biwgaW5kZXgpIHsKICAg
ICAgICByZXR1cm4gJzx0aCBjb2xzcGFuPSInICsgKGluZGV4ID09IHJlZmVyZW5jZUluZGV4ID8g
MiA6IDMpICsgJyIgY2xhc3M9Intzb3J0ZXI6IFwnY29tcGFyaXNvblwnfSI+JyArIHJ1bi5sYWJl
bCgpICsgJzwvdGg+JzsKICAgIH0pLnJlZHVjZShmdW5jdGlvbiAobWFya3VwLCBjZWxsKSB7IHJl
dHVybiBtYXJrdXAgKyBjZWxsOyB9LCAnJykgKyAnPC90cj48L2hlYWQ+PHRib2R5PjwvdGJvZHk+
Jyk7CgogICAgdmFyIHRlc3ROYW1lcyA9IFtdOwogICAgZm9yICh0ZXN0TmFtZSBpbiB0ZXN0cykK
ICAgICAgICB0ZXN0TmFtZXMucHVzaCh0ZXN0TmFtZSk7CgogICAgdGVzdE5hbWVzLnNvcnQoKS5t
YXAoZnVuY3Rpb24gKHRlc3ROYW1lKSB7CiAgICAgICAgdmFyIHRlc3QgPSB0ZXN0c1t0ZXN0TmFt
ZV07CiAgICAgICAgaWYgKHRlc3QuaXNNZW1vcnlUZXN0KCkgIT0gc2hvdWxkSWdub3JlTWVtb3J5
KQogICAgICAgICAgICBjcmVhdGVUYWJsZVJvdyhydW5zLCB0ZXN0LCByZWZlcmVuY2VJbmRleCk7
CiAgICB9KTsKCiAgICAkKCcjY29udGFpbmVyJykudGFibGVzb3J0ZXIoe3dpZGdldHM6IFsnemVi
cmEnXX0pOwp9CgpmdW5jdGlvbiBsaW5lYXJSZWdyZXNzaW9uKHBvaW50cykgewogICAgLy8gSW1w
bGVtZW50IGh0dHA6Ly93d3cuZWFzeWNhbGN1bGF0aW9uLmNvbS9zdGF0aXN0aWNzL2xlYXJuLWNv
cnJlbGF0aW9uLnBocC4KICAgIC8vIHggPSBtYWduaXR1ZGUKICAgIC8vIHkgPSBpdGVyYXRpb25z
CiAgICB2YXIgc3VtWCA9IDA7CiAgICB2YXIgc3VtWSA9IDA7CiAgICB2YXIgc3VtWFNxdWFyZWQg
PSAwOwogICAgdmFyIHN1bVlTcXVhcmVkID0gMDsKICAgIHZhciBzdW1YVGltZXNZID0gMDsKCiAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciB4
ID0gaTsKICAgICAgICB2YXIgeSA9IHBvaW50c1tpXTsKICAgICAgICBzdW1YICs9IHg7CiAgICAg
ICAgc3VtWSArPSB5OwogICAgICAgIHN1bVhTcXVhcmVkICs9IHggKiB4OwogICAgICAgIHN1bVlT
cXVhcmVkICs9IHkgKiB5OwogICAgICAgIHN1bVhUaW1lc1kgKz0geCAqIHk7CiAgICB9CgogICAg
dmFyIHIgPSAocG9pbnRzLmxlbmd0aCAqIHN1bVhUaW1lc1kgLSBzdW1YICogc3VtWSkgLwogICAg
ICAgIE1hdGguc3FydCgocG9pbnRzLmxlbmd0aCAqIHN1bVhTcXVhcmVkIC0gc3VtWCAqIHN1bVgp
ICoKICAgICAgICAgICAgICAgICAgKHBvaW50cy5sZW5ndGggKiBzdW1ZU3F1YXJlZCAtIHN1bVkg
KiBzdW1ZKSk7CgogICAgaWYgKGlzTmFOKHIpIHx8IHIgPT0gTWF0aC5JbmZpbml0eSkKICAgICAg
ICByID0gMDsKCiAgICB2YXIgc2xvcGUgPSAocG9pbnRzLmxlbmd0aCAqIHN1bVhUaW1lc1kgLSBz
dW1YICogc3VtWSkgLyAocG9pbnRzLmxlbmd0aCAqIHN1bVhTcXVhcmVkIC0gc3VtWCAqIHN1bVgp
OwogICAgdmFyIGludGVyY2VwdCA9IHN1bVkgLyBwb2ludHMubGVuZ3RoIC0gc2xvcGUgKiBzdW1Y
IC8gcG9pbnRzLmxlbmd0aDsKICAgIHJldHVybiB7c2xvcGU6IHNsb3BlLCBpbnRlcmNlcHQ6IGlu
dGVyY2VwdCwgclNxdWFyZWQ6IHIgKiByfTsKfQoKdmFyIHdhcm5pbmdTaWduID0gJzxzdmcgdmll
d0JveD0iMCAwIDEwMCAxMDAiIHN0eWxlPSJ3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4OyB2ZXJ0
aWNhbC1hbGlnbjogYm90dG9tOyIgdmVyc2lvbj0iMS4xIj4nCiAgICArICc8cG9seWdvbiBmaWxs
PSJyZWQiIHBvaW50cz0iNTAsMTAgOTAsODAgMTAsODAgNTAsMTAiIHN0cm9rZT0icmVkIiBzdHJv
a2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPicKICAgICsgJzxwb2x5Z29u
IGZpbGw9IndoaXRlIiBwb2ludHM9IjQ3LDMwIDQ4LDI5LCA1MCwgMjguNywgNTIsMjkgNTMsMzAg
NTAsNjAiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9pbj0i
cm91bmQiIC8+JwogICAgKyAnPGNpcmNsZSBjeD0iNTAiIGN5PSI3MyIgcj0iNiIgZmlsbD0id2hp
dGUiIC8+JwogICAgKyAnPC9zdmc+JzsKCmZ1bmN0aW9uIGNyZWF0ZVRhYmxlUm93KHJ1bnMsIHRl
c3QsIHJlZmVyZW5jZUluZGV4KSB7CiAgICB2YXIgdGFibGVSb3cgPSAkKCc8dHI+PHRkIGNsYXNz
PSJ0ZXN0Ij4nICsgdGVzdC5uYW1lKCkgKyAnPC90ZD48dGQgY2xhc3M9InVuaXQiPicgKyB0ZXN0
LnVuaXQoKSArICc8L3RkPjwvdHI+Jyk7CgogICAgZnVuY3Rpb24gbWFya3VwRm9yUnVuKHJlc3Vs
dCwgcmVmZXJlbmNlUmVzdWx0KSB7CiAgICAgICAgdmFyIGNvbXBhcmlzb25DZWxsID0gJyc7CiAg
ICAgICAgdmFyIGhpZGRlblZhbHVlID0gJyc7CiAgICAgICAgdmFyIHNob3VsZENvbXBhcmUgPSBy
ZXN1bHQgIT09IHJlZmVyZW5jZVJlc3VsdDsKICAgICAgICBpZiAoc2hvdWxkQ29tcGFyZSAmJiBy
ZWZlcmVuY2VSZXN1bHQpIHsKICAgICAgICAgICAgdmFyIHBlcmNlbnREaWZmZXJlbmNlID0gcmVm
ZXJlbmNlUmVzdWx0LnBlcmNlbnREaWZmZXJlbmNlKHJlc3VsdCk7CiAgICAgICAgICAgIHZhciBi
ZXR0ZXIgPSB0ZXN0LnNtYWxsZXJJc0JldHRlcigpID8gcGVyY2VudERpZmZlcmVuY2UgPCAwIDog
cGVyY2VudERpZmZlcmVuY2UgPiAwOwogICAgICAgICAgICB2YXIgY29tcGFyaXNvbiA9ICcnOwog
ICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gJ2NvbXBhcmlzb24nOwogICAgICAgICAgICBpZiAo
cmVmZXJlbmNlUmVzdWx0LmlzU3RhdGlzdGljYWxseVNpZ25pZmljYW50KHJlc3VsdCkpIHsKICAg
ICAgICAgICAgICAgIGNvbXBhcmlzb24gPSBmb3JtYXRQZXJjZW50YWdlKE1hdGguYWJzKHBlcmNl
bnREaWZmZXJlbmNlKSkgKyAoYmV0dGVyID8gJyBCZXR0ZXInIDogJyBXb3JzZSZuYnNwOycpOwog
ICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IGJldHRlciA/ICcgYmV0dGVyJyA6ICcgd29yc2Un
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGhpZGRlblZhbHVlID0gJzxzcGFuIHN0eWxlPSJk
aXNwbGF5OiBub25lIj58JyArIGNvbXBhcmlzb24gKyAnPC9zcGFuPic7CiAgICAgICAgICAgIGNv
bXBhcmlzb25DZWxsID0gJzx0ZCBjbGFzcz0iJyArIGNsYXNzTmFtZSArICciPicgKyBjb21wYXJp
c29uICsgJzwvdGQ+JzsKICAgICAgICB9IGVsc2UgaWYgKHNob3VsZENvbXBhcmUpCiAgICAgICAg
ICAgIGNvbXBhcmlzb25DZWxsID0gJzx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD4nOwoKICAg
ICAgICB2YXIgdmFsdWVzID0gcmVzdWx0LnZhbHVlcygpOwogICAgICAgIHZhciB3YXJuaW5nID0g
Jyc7CiAgICAgICAgdmFyIHJlZ3Jlc3Npb25BbmFseXNpcyA9ICcnOwogICAgICAgIGlmICh2YWx1
ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDMpIHsKICAgICAgICAgICAgcmVncmVzc2lvblJlc3VsdCA9
IGxpbmVhclJlZ3Jlc3Npb24odmFsdWVzKTsKICAgICAgICAgICAgcmVncmVzc2lvbkFuYWx5c2lz
ID0gJ3Nsb3BlPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVncmVzc2lvblJlc3VsdC5zbG9w
ZSkKICAgICAgICAgICAgICAgICsgJywgUl4yPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVn
cmVzc2lvblJlc3VsdC5yU3F1YXJlZCk7CiAgICAgICAgICAgIGlmIChyZWdyZXNzaW9uUmVzdWx0
LnJTcXVhcmVkID4gMC42ICYmIE1hdGguYWJzKHJlZ3Jlc3Npb25SZXN1bHQuc2xvcGUpID4gMC4w
MSkgewogICAgICAgICAgICAgICAgd2FybmluZyA9ICcgPHNwYW4gY2xhc3M9InJlZ3Jlc3Npb24t
d2FybmluZyIgdGl0bGU9IkRldGVjdGVkIGEgdGltZSBkZXBlbmRlbmN5IHdpdGggJyArIHJlZ3Jl
c3Npb25BbmFseXNpcyArICciPicgKyB3YXJuaW5nU2lnbiArICcgPC9zcGFuPic7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzdGF0aXN0aWNzID0gJyZzaWdtYTs9JyArIHRv
Rml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQuc3RkZXYoKSkgKyAnLCBtaW49JyArIHRvRml4ZWRX
aWR0aFByZWNpc2lvbihyZXN1bHQubWluKCkpCiAgICAgICAgICAgICsgJywgbWF4PScgKyB0b0Zp
eGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1heCgpKSArICdcbicgKyByZWdyZXNzaW9uQW5hbHlz
aXM7CgogICAgICAgIC8vIFRhYmxlc29ydGVyIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgc2Vjb25k
IGNlbGwgc28gcHV0IHRoZSBjb21wYXJpc29uIGluIHRoZSBpbnZpc2libGUgZWxlbWVudC4KICAg
ICAgICByZXR1cm4gJzx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAn
Ij4nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5tZWFuKCkpICsgaGlkZGVuVmFsdWUK
ICAgICAgICAgICAgKyAnPC90ZD48dGQgY2xhc3M9InN0ZGV2IiB0aXRsZT0iJyArIHN0YXRpc3Rp
Y3MgKyAnIj4mcGx1c21uOyAnCiAgICAgICAgICAgICsgZm9ybWF0UGVyY2VudGFnZShyZXN1bHQu
c3RkZXZSYXRpbygpKSArIHdhcm5pbmcgKyAnPC90ZD4nICsgY29tcGFyaXNvbkNlbGw7CiAgICB9
CgogICAgZnVuY3Rpb24gbWFya3VwRm9yTWlzc2luZ1J1bihpc1JlZmVyZW5jZSkgewogICAgICAg
IHJldHVybiAnPHRkIGNvbHNwYW49IicgKyAoaXNSZWZlcmVuY2UgPyAyIDogMykgKyAnIiBjbGFz
cz0ibWlzc2luZyI+TWlzc2luZzwvdGQ+JzsKICAgIH0KCiAgICB2YXIgcnVuSW5kZXggPSAwOwog
ICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3VsdHMoKTsKICAgIHZhciByZWZlcmVuY2VSZXN1bHQg
PSB1bmRlZmluZWQ7CiAgICB2YXIgcmVzdWx0SW5kZXhNYXAgPSB7fTsKICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHdoaWxlIChydW5zW3J1bklu
ZGV4XSAhPT0gcmVzdWx0c1tpXS5ydW4oKSkKICAgICAgICAgICAgcnVuSW5kZXgrKzsKICAgICAg
ICBpZiAocnVuSW5kZXggPT0gcmVmZXJlbmNlSW5kZXgpCiAgICAgICAgICAgIHJlZmVyZW5jZVJl
c3VsdCA9IHJlc3VsdHNbaV07CiAgICAgICAgcmVzdWx0SW5kZXhNYXBbcnVuSW5kZXhdID0gaTsK
ICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVucy5sZW5ndGg7IGkrKykgewogICAgICAg
IHZhciByZXN1bHRJbmRleCA9IHJlc3VsdEluZGV4TWFwW2ldOwogICAgICAgIGlmIChyZXN1bHRJ
bmRleCA9PSB1bmRlZmluZWQpCiAgICAgICAgICAgIHRhYmxlUm93LmFwcGVuZChtYXJrdXBGb3JN
aXNzaW5nUnVuKGkgPT0gcmVmZXJlbmNlSW5kZXgpKTsKICAgICAgICBlbHNlCiAgICAgICAgICAg
IHRhYmxlUm93LmFwcGVuZChtYXJrdXBGb3JSdW4ocmVzdWx0c1tyZXN1bHRJbmRleF0sIHJlZmVy
ZW5jZVJlc3VsdCkpOwogICAgfQoKICAgICQoJyNjb250YWluZXInKS5jaGlsZHJlbigndGJvZHkn
KS5sYXN0KCkuYXBwZW5kKHRhYmxlUm93KTsKCiAgICB0YWJsZVJvdy5jbGljayhmdW5jdGlvbiAo
ZXZlbnQpIHsKICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9IHRhYmxlUm93WzBdICYmIGV2ZW50
LnRhcmdldC5wYXJlbnROb2RlICE9IHRhYmxlUm93WzBdKQogICAgICAgICAgICByZXR1cm47Cgog
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgIHZhciBmaXJzdENlbGwgPSB0
YWJsZVJvdy5jaGlsZHJlbigndGQnKS5maXJzdCgpOwogICAgICAgIGlmIChmaXJzdENlbGwuY2hp
bGRyZW4oJ3NlY3Rpb24nKS5sZW5ndGgpIHsKICAgICAgICAgICAgZmlyc3RDZWxsLmNoaWxkcmVu
KCdzZWN0aW9uJykucmVtb3ZlKCk7CiAgICAgICAgICAgIHRhYmxlUm93LmNoaWxkcmVuKCd0ZCcp
LmNzcyh7J3BhZGRpbmctYm90dG9tJzogJyd9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICB2YXIgcGxvdCA9IGNyZWF0ZVBsb3QoZmlyc3RDZWxsLCB0ZXN0KTsKICAgICAgICAgICAgcGxv
dC5jc3Moeydwb3NpdGlvbic6ICdhYnNvbHV0ZScsICd6LWluZGV4JzogMn0pOwogICAgICAgICAg
ICB2YXIgb2Zmc2V0ID0gdGFibGVSb3cub2Zmc2V0KCk7CiAgICAgICAgICAgIG9mZnNldC5sZWZ0
ICs9IDE7CiAgICAgICAgICAgIG9mZnNldC50b3AgKz0gdGFibGVSb3cub3V0ZXJIZWlnaHQoKTsK
ICAgICAgICAgICAgcGxvdC5vZmZzZXQob2Zmc2V0KTsKICAgICAgICAgICAgdGFibGVSb3cuY2hp
bGRyZW4oJ3RkJykuY3NzKHsncGFkZGluZy1ib3R0b20nOiBwbG90Lm91dGVySGVpZ2h0KCkgKyA1
fSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKfQoKZnVuY3Rpb24g
aW5pdCgpIHsKICAgICQudGFibGVzb3J0ZXIuYWRkUGFyc2VyKHsKICAgICAgICBpZDogJ2NvbXBh
cmlzb24nLAogICAgICAgIGlzOiBmdW5jdGlvbihzKSB7CiAgICAgICAgICAgIHJldHVybiBzLmlu
ZGV4T2YoJ3wnKSA+PSAwOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbihzKSB7
CiAgICAgICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZUZsb2F0KHMuc3Vic3RyaW5nKHMuaW5kZXhP
ZignfCcpICsgMSkpOwogICAgICAgICAgICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IDAgOiBwYXJz
ZWQ7CiAgICAgICAgfSwKICAgICAgICB0eXBlOiAnbnVtZXJpYycsCiAgICB9KTsKCiAgICB2YXIg
cnVucyA9IFtdOwogICAgdmFyIHRlc3RzID0ge307CiAgICAkLmVhY2goSlNPTi5wYXJzZShkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnanNvbicpLnRleHRDb250ZW50KSwgZnVuY3Rpb24gKGluZGV4
LCBlbnRyeSkgewogICAgICAgIHZhciBydW4gPSBuZXcgVGVzdFJ1bihlbnRyeSk7CiAgICAgICAg
cnVucy5wdXNoKHJ1bik7CiAgICAgICAgJC5lYWNoKGVudHJ5LnJlc3VsdHMsIGZ1bmN0aW9uICh0
ZXN0LCByZXN1bHQpIHsKICAgICAgICAgICAgaWYgKCF0ZXN0c1t0ZXN0XSkKICAgICAgICAgICAg
ICAgIHRlc3RzW3Rlc3RdID0gbmV3IFBlcmZUZXN0KHRlc3QpOwogICAgICAgICAgICB0ZXN0c1t0
ZXN0XS5hZGRSZXN1bHQobmV3IFRlc3RSZXN1bHQodGVzdHNbdGVzdF0sIHJlc3VsdCwgcnVuKSk7
CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICB2YXIgc2hvdWxkSWdub3JlTWVtb3J5PSB0cnVlOwog
ICAgdmFyIHJlZmVyZW5jZUluZGV4ID0gMDsKICAgIGNyZWF0ZVRhYmxlKHRlc3RzLCBydW5zLCBz
aG91bGRJZ25vcmVNZW1vcnksIHJlZmVyZW5jZUluZGV4KTsKCiAgICAkKCcjdGltZS1tZW1vcnkn
KS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQsIGNoZWNrZWRFbGVtZW50KSB7CiAgICAg
ICAgc2hvdWxkSWdub3JlTWVtb3J5ID0gY2hlY2tlZEVsZW1lbnQudGV4dENvbnRlbnQgPT0gJ1Rp
bWUnOwogICAgICAgIGNyZWF0ZVRhYmxlKHRlc3RzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnks
IHJlZmVyZW5jZUluZGV4KTsKICAgIH0pOwoKICAgIHJ1bnMubWFwKGZ1bmN0aW9uIChydW4sIGlu
ZGV4KSB7CiAgICAgICAgJCgnI3JlZmVyZW5jZScpLmFwcGVuZCgnPHNwYW4gdmFsdWU9IicgKyBp
bmRleCArICciJyArIChpbmRleCA9PSByZWZlcmVuY2VJbmRleCA/ICcgY2xhc3M9ImNoZWNrZWQi
JyA6ICcnKSArICc+JyArIHJ1bi5sYWJlbCgpICsgJzwvc3Bhbj4nKTsKICAgIH0pCgogICAgJCgn
I3JlZmVyZW5jZScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCwgY2hlY2tlZEVsZW1l
bnQpIHsKICAgICAgICByZWZlcmVuY2VJbmRleCA9IHBhcnNlSW50KGNoZWNrZWRFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgndmFsdWUnKSk7CiAgICAgICAgY3JlYXRlVGFibGUodGVzdHMsIHJ1bnMsIHNo
b3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOwogICAgfSk7CgogICAgJCgnLmNoZWNr
Ym94JykuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGNoZWNrYm94KSB7CiAgICAgICAgJChjaGVja2Jv
eCkuY2hpbGRyZW4oJ3NwYW4nKS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAg
aWYgKCQodGhpcykuaGFzQ2xhc3MoJ2NoZWNrZWQnKSkKICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgJChjaGVja2JveCkuY2hpbGRyZW4oJ3NwYW4nKS5yZW1vdmVDbGFzcygnY2hl
Y2tlZCcpOwogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdjaGVja2VkJyk7CiAgICAgICAg
ICAgICQoY2hlY2tib3gpLnRyaWdnZXIoJ2NoYW5nZScsICQodGhpcykpOwogICAgICAgIH0pOwog
ICAgfSk7Cn0KCjwvc2NyaXB0Pgo8c2NyaXB0IGlkPSJqc29uIiB0eXBlPSJhcHBsaWNhdGlvbi9q
c29uIj5beyJ0aW1lc3RhbXAiOiAxMzUwNTIxNDY2LCAid2Via2l0LXJldmlzaW9uIjogIjEzMTY3
NCIsICJyZXN1bHRzIjogeyJCaW5kaW5ncy9zY3JvbGwtdG9wOk1hbGxvYyI6IHsibWluIjogMC4w
LCAibWF4IjogMC4wLCAibWVkaWFuIjogMC4wLCAidmFsdWVzIjogWzAuMCwgMC4wLCAwLjAsIDAu
MCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAs
IDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wXSwgInN0ZGV2IjogMC4wLCAiYXZnIjogMC4wLCAidW5p
dCI6ICJieXRlcyJ9LCAiQmluZGluZ3Mvc2Nyb2xsLXRvcDpKU0hlYXAiOiB7Im1pbiI6IDEzNTU5
MDQuMCwgIm1heCI6IDEzOTY0ODguMCwgIm1lZGlhbiI6IDEzNjI3NjQuMCwgInZhbHVlcyI6IFsx
Mzk2NDg4LjAsIDEzOTI3MjguMCwgMTM5MTQxNi4wLCAxMzY0NTM2LjAsIDEzNTU5MDQuMCwgMTM1
ODY5Ni4wLCAxMzU3NDAwLjAsIDEzNTc1OTIuMCwgMTM2MTAwMC4wLCAxMzYxMzUyLjAsIDEzNjEw
MzIuMCwgMTM2MDEzNi4wLCAxMzYwNDMyLjAsIDEzNjA5NjguMCwgMTM2NDE3Ni4wLCAxMzY0NTI4
LjAsIDEzNjQyODAuMCwgMTM2NDIzMi4wLCAxMzY2NDcyLjAsIDEzNjYwNDguMF0sICJzdGRldiI6
IDEyMDU1LjM5MzM0OTAzNjg2NSwgImF2ZyI6IDEzNjY0NzAuNzk5OTk5OTk5OCwgInVuaXQiOiAi
Ynl0ZXMifSwgIkJpbmRpbmdzL3Njcm9sbC10b3AiOiB7Im1pbiI6IDI2MS4zNzE2MjU5NDcwODIz
NSwgIm1heCI6IDI2My4wNTk1OTM0OTM4OTc2NCwgIm1lZGlhbiI6IDI2MS43OTk0NjY0MjQwNDM0
MywgInZhbHVlcyI6IFsyNjIuODk3NDE4Njg4MDk4MzYsIDI2Mi43Mzk5MzA3NzQwMzQ0NiwgMjYy
Ljg4Mzk0MTkyMTUzNTc4LCAyNjIuNzIyNjczODY5MDYzMSwgMjYxLjQ4NTc2MjE4MTMyOTczLCAy
NjEuNTA1MjUwMjgyNzE0NDMsIDI2MS4zNzE2MjU5NDcwODIzNSwgMjYxLjcxOTQ3MDc3OTIyNTYy
LCAyNjEuNDczNzk3MTI2NjY5MDEsIDI2MS42NzMyNDMzODI3NjI0NSwgMjYxLjQwMjcxMzEwNDQ0
NTk4LCAyNjEuNzI1NjM1NTQ5MjE2MzUsIDI2MS44MTY3NzI4MTkyNTE2NCwgMjYxLjg3OTUwOTEy
ODI3MzgxLCAyNjEuNjg0NTQxODIzNDI0NDcsIDI2MS44NTQ4MjI0NzExNjcxNSwgMjYzLjA1OTU5
MzQ5Mzg5NzY0LCAyNjEuODE0NzE2Mjk5MjcwMzQsIDI2MS44MzY2NTMwODczODUyMywgMjYxLjc4
NDIxNjU0ODgxNjUyXSwgInN0ZGV2IjogMC41NTQwMTA1MzY3NzYxMzU4OCwgImF2ZyI6IDI2MS45
NjY2MTQ0NjM4ODMyMiwgInVuaXQiOiAicnVucy9zIn19LCAicGxhdGZvcm0iOiAiY2hyb21pdW0i
LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxNjIzMjIi
fSwgeyJ0aW1lc3RhbXAiOiAxMzUwNTIxNDg2LCAid2Via2l0LXJldmlzaW9uIjogIjEzMTY3NCIs
ICJyZXN1bHRzIjogeyJCaW5kaW5ncy9zY3JvbGwtdG9wOk1hbGxvYyI6IHsibWluIjogMC4wLCAi
bWF4IjogMC4wLCAibWVkaWFuIjogMC4wLCAidmFsdWVzIjogWzAuMCwgMC4wLCAwLjAsIDAuMCwg
MC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAu
MCwgMC4wLCAwLjAsIDAuMCwgMC4wXSwgInN0ZGV2IjogMC4wLCAiYXZnIjogMC4wLCAidW5pdCI6
ICJieXRlcyJ9LCAiQmluZGluZ3Mvc2Nyb2xsLXRvcDpKU0hlYXAiOiB7Im1pbiI6IDEzNTU5Njgu
MCwgIm1heCI6IDEzOTY1NTIuMCwgIm1lZGlhbiI6IDEzNjI4NDAuMCwgInZhbHVlcyI6IFsxMzk2
NTUyLjAsIDEzOTI3OTIuMCwgMTM5MTQ4MC4wLCAxMzY0NjAwLjAsIDEzNTU5NjguMCwgMTM1ODc2
MC4wLCAxMzU3NDY0LjAsIDEzNTc2NTYuMCwgMTM2MTA3Mi4wLCAxMzYxNDI0LjAsIDEzNjExMTIu
MCwgMTM2MDIxNi4wLCAxMzYwNTEyLjAsIDEzNjEwNDguMCwgMTM2NDI1Ni4wLCAxMzY0NTQ0LjAs
IDEzNjQzNjAuMCwgMTM2NDMxMi4wLCAxMzY2NTUyLjAsIDEzNjYxMjAuMF0sICJzdGRldiI6IDEy
MDUzLjMyNjE0NTAwNjM3MywgImF2ZyI6IDEzNjY1NDAuMCwgInVuaXQiOiAiYnl0ZXMifSwgIkJp
bmRpbmdzL3Njcm9sbC10b3AiOiB7Im1pbiI6IDI2NS43MDU4NzQzMzI4Njc3MiwgIm1heCI6IDI2
OC45NzEwMTQ3MzIzMTk4NywgIm1lZGlhbiI6IDI2Ny45NTM1NjA1MTA3MzcxMywgInZhbHVlcyI6
IFsyNjguMDg4MDIwNjI3NDY3MywgMjY4LjcxOTY4NTAwOTU3OTczLCAyNjguNzczMTk3MDEwMjEx
MjIsIDI2OC43MzY3NTQwMjkwNjMxNSwgMjY3LjY2MjM3MDcyODcyNzQxLCAyNjguNjczNDEyNzkw
NTc5NTYsIDI2Ny41NzE1NDUwMTYwNzk0MywgMjY4Ljc3NDUxMDMxMDY2MDM5LCAyNjcuNTY2NjYz
NjIyNjIwODEsIDI2Ny42MjgxODE3NDQzNDA1MSwgMjY4LjU5Nzk2NzQ2MTIwNjYyLCAyNjcuNTMz
ODAwNDM3MDg4NjQsIDI2OC45NzEwMTQ3MzIzMTk4NywgMjY3Ljc2MTQwNTA3NzM1MTE4LCAyNjgu
ODg5NDg2NDM5NTQzMjUsIDI2NS43MDU4NzQzMzI4Njc3MiwgMjY3LjI0NzQ4NDU5NjQxMzkzLCAy
NjguOTIwMDUzNzU2NzU2ODMsIDI2Ny40MTU0Mjk4NTEwOTg1NywgMjY3LjgxOTEwMDM5NDAwNzAy
XSwgInN0ZGV2IjogMC44MTc2ODc5MzM1NjEzNDQ5NSwgImF2ZyI6IDI2OC4wNTI3OTc4OTgzOTkx
NSwgInVuaXQiOiAicnVucy9zIn19LCAicGxhdGZvcm0iOiAiY2hyb21pdW0iLCAiYnJhbmNoIjog
IndlYmtpdC10cnVuayIsICJjaHJvbWl1bS1yZXZpc2lvbiI6ICIxNjIzMjIifSwgeyJ0aW1lc3Rh
bXAiOiAxMzUwNTIxNTA2LCAid2Via2l0LXJldmlzaW9uIjogIjEzMTY3NCIsICJyZXN1bHRzIjog
eyJCaW5kaW5ncy9zY3JvbGwtdG9wOk1hbGxvYyI6IHsibWluIjogMC4wLCAibWF4IjogMC4wLCAi
bWVkaWFuIjogMC4wLCAidmFsdWVzIjogWzAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAu
MCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAs
IDAuMCwgMC4wXSwgInN0ZGV2IjogMC4wLCAiYXZnIjogMC4wLCAidW5pdCI6ICJieXRlcyJ9LCAi
QmluZGluZ3Mvc2Nyb2xsLXRvcDpKU0hlYXAiOiB7Im1pbiI6IDEzNTU4OTYuMCwgIm1heCI6IDEz
OTY0ODguMCwgIm1lZGlhbiI6IDEzNjI3NzYuMCwgInZhbHVlcyI6IFsxMzk2NDg4LjAsIDEzOTI3
MjguMCwgMTM5MTQxNi4wLCAxMzY0NTM2LjAsIDEzNTU4OTYuMCwgMTM1ODY5Ni4wLCAxMzU3NDAw
LjAsIDEzNTc1OTIuMCwgMTM2MTAwOC4wLCAxMzYxMzYwLjAsIDEzNjEwNDguMCwgMTM2MDE1Mi4w
LCAxMzYwNDQ4LjAsIDEzNjA5ODQuMCwgMTM2NDE5Mi4wLCAxMzY0NTQ0LjAsIDEzNjQyOTYuMCwg
MTM2NDI0MC4wLCAxMzY2NDgwLjAsIDEzNjYwNTYuMF0sICJzdGRldiI6IDEyMDUzLjIyNDI0NjUx
NzY5MywgImF2ZyI6IDEzNjY0NzguMCwgInVuaXQiOiAiYnl0ZXMifSwgIkJpbmRpbmdzL3Njcm9s
bC10b3AiOiB7Im1pbiI6IDI2MS4yMjk5NDg5MzA4NTYxLCAibWF4IjogMjYyLjg4OTEyNTE2MDcx
NjUsICJtZWRpYW4iOiAyNjEuNzEyMjc5NTk3MDMzOTYsICJ2YWx1ZXMiOiBbMjYyLjczNjQ3OTI1
OTg5Njk1LCAyNjIuNjk3NDgyODY0NzE1OTQsIDI2Mi44NDk3MzgwNzA1MzY1NSwgMjYxLjU1Mjc4
NjYxNzUxNzMxLCAyNjEuNDc1NTA2Mjg0OTI5LCAyNjEuNTY3NDk1NTE3MzA4NzcsIDI2MS41Mzgw
NzkyOTIyNzMwNCwgMjYyLjc1MjAxMTk4ODYxMDk1LCAyNjIuNTg3ODAyNzk2NDMxNjcsIDI2MS41
NTA3MzQzMjIxODgxMywgMjYxLjYwODg5NDY4NTg0Nzc2LCAyNjEuNjUxNjc2Mjc2MTg2NDksIDI2
Mi4wNDM4NjM0NjU4MjgyOCwgMjYxLjY5NzU1MzU0MTMzNjM5LCAyNjEuNzg3NjQzMDg4Nzc5MTMs
IDI2Mi44ODkxMjUxNjA3MTY1LCAyNjEuNzI3MDA1NjUyNzMxNTIsIDI2MS45NDgxMDgwOTMyODYw
MSwgMjYxLjI1MjEyOTE3Njk2NTcsIDI2MS4yMjk5NDg5MzA4NTYxXSwgInN0ZGV2IjogMC41Njgy
NjM0NDQ1NTI4NjE0OSwgImF2ZyI6IDI2MS45NTcyMDMyNTQzNDcwNiwgInVuaXQiOiAicnVucy9z
In19LCAicGxhdGZvcm0iOiAiY2hyb21pdW0iLCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJj
aHJvbWl1bS1yZXZpc2lvbiI6ICIxNjIzMjIifSwgeyJ0aW1lc3RhbXAiOiAxMzUwNTIxNTc4LCAi
d2Via2l0LXJldmlzaW9uIjogIjEzMTY3NCIsICJyZXN1bHRzIjogeyJCaW5kaW5ncy9zY3JvbGwt
dG9wOk1hbGxvYyI6IHsibWluIjogMC4wLCAibWF4IjogMC4wLCAibWVkaWFuIjogMC4wLCAidmFs
dWVzIjogWzAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwg
MC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wXSwgInN0ZGV2
IjogMC4wLCAiYXZnIjogMC4wLCAidW5pdCI6ICJieXRlcyJ9LCAiQmluZGluZ3Mvc2Nyb2xsLXRv
cDpKU0hlYXAiOiB7Im1pbiI6IDEzNTU5NjguMCwgIm1heCI6IDEzOTY1NTIuMCwgIm1lZGlhbiI6
IDEzNjI4NDAuMCwgInZhbHVlcyI6IFsxMzk2NTUyLjAsIDEzOTI3OTIuMCwgMTM5MTQ4MC4wLCAx
MzY0NjAwLjAsIDEzNTU5NjguMCwgMTM1ODc1Mi4wLCAxMzU3NDU2LjAsIDEzNTc2NTYuMCwgMTM2
MTA3Mi4wLCAxMzYxNDI0LjAsIDEzNjExMTIuMCwgMTM2MDIxNi4wLCAxMzYwNTEyLjAsIDEzNjEw
NDguMCwgMTM2NDI1Ni4wLCAxMzY0NjA4LjAsIDEzNjQzNjAuMCwgMTM2NDMxMi4wLCAxMzY2NTUy
LjAsIDEzNjYxMjguMF0sICJzdGRldiI6IDEyMDUzLjM1MTUxMjk1MDA0MywgImF2ZyI6IDEzNjY1
NDIuODAwMDAwMDAwMywgInVuaXQiOiAiYnl0ZXMifSwgIkJpbmRpbmdzL3Njcm9sbC10b3AiOiB7
Im1pbiI6IDI3MS43NjQ2NDE4ODUxMzU0NiwgIm1heCI6IDI3Ni4zMTA0MDIwNzIwOTQ1MiwgIm1l
ZGlhbiI6IDI3NS40NDMzMjE1MTg0NzkzNywgInZhbHVlcyI6IFsyNzYuMDA4NDY1OTY0MTQ5NDIs
IDI3NS44MTA4ODQwNTY5MDc0MSwgMjc1Ljc3MzU0NDgwODI1ODE4LCAyNzMuMTk1MjA0MTAwMTcx
NjgsIDI3My40NDAzNjQ1NjYwOTg3NiwgMjc2LjE5NTIzNDg4MDY1NDAzLCAyNzUuNjgwNTg2NDc5
MTkzNzIsIDI3MS43NjQ2NDE4ODUxMzU0NiwgMjc1LjYzMjU3NjgzMTU3NzQ3LCAyNzUuNTM0MTkx
ODc2MzIxNTksIDI3NS4wMDg5Mzc3NjI0ODgyNCwgMjc1LjgxNTM3OTIyNjQ3NDU5LCAyNzQuNDI5
MTg3MTYxMzU5MzgsIDI3Ni4xOTkzOTU4MjkyNTg3MiwgMjc2LjMxMDQwMjA3MjA5NDUyLCAyNzQu
OTU4NDEyNTI3NTI2ODMsIDI3NC45ODkwMDA1MDAyODIwOSwgMjc1LjIxMDg4MDMyNDgzODI5LCAy
NzQuNjY2OTY2MzA5NTE0NTgsIDI3NS4zNTI0NTExNjA2MzcyXSwgInN0ZGV2IjogMS4xNTI1NzI0
MDU4Njc5ODIsICJhdmciOiAyNzUuMDk4ODM1NDE2MTQ3MDQsICJ1bml0IjogInJ1bnMvcyJ9fSwg
InBsYXRmb3JtIjogImNocm9taXVtIiwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAiY2hyb21p
dW0tcmV2aXNpb24iOiAiMTYyMzIyIn0sIHsidGltZXN0YW1wIjogMTM1MDUyMTU5OCwgIndlYmtp
dC1yZXZpc2lvbiI6ICIxMzE2NzQiLCAicmVzdWx0cyI6IHsiQmluZGluZ3Mvc2Nyb2xsLXRvcDpN
YWxsb2MiOiB7Im1pbiI6IDAuMCwgIm1heCI6IDAuMCwgIm1lZGlhbiI6IDAuMCwgInZhbHVlcyI6
IFswLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwg
MC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMF0sICJzdGRldiI6IDAu
MCwgImF2ZyI6IDAuMCwgInVuaXQiOiAiYnl0ZXMifSwgIkJpbmRpbmdzL3Njcm9sbC10b3A6SlNI
ZWFwIjogeyJtaW4iOiAxMzU1ODg4LjAsICJtYXgiOiAxMzk2NDg4LjAsICJtZWRpYW4iOiAxMzYy
NzY4LjAsICJ2YWx1ZXMiOiBbMTM5NjQ4OC4wLCAxMzkyNzIwLjAsIDEzOTE0MDAuMCwgMTM2NDUy
MC4wLCAxMzU1ODg4LjAsIDEzNTg2ODAuMCwgMTM1NzM4NC4wLCAxMzU3NTc2LjAsIDEzNjEwMDAu
MCwgMTM2MTM1Mi4wLCAxMzYxMDQwLjAsIDEzNjAxNDQuMCwgMTM2MDQzMi4wLCAxMzYwOTc2LjAs
IDEzNjQxODQuMCwgMTM2NDUzNi4wLCAxMzY0Mjg4LjAsIDEzNjQyNDAuMCwgMTM2NjQ4MC4wLCAx
MzY2MDU2LjBdLCAic3RkZXYiOiAxMjA1NC40ODc3NDA4NjgwODYsICJhdmciOiAxMzY2NDY5LjIs
ICJ1bml0IjogImJ5dGVzIn0sICJCaW5kaW5ncy9zY3JvbGwtdG9wIjogeyJtaW4iOiAyNTYuODEz
NTg1NDM0MjQ3MjIsICJtYXgiOiAyNjAuODY2Mzg5NDIzMTg3MTIsICJtZWRpYW4iOiAyNTkuOTQz
MjY2NzkxNTE2ODYsICJ2YWx1ZXMiOiBbMjYwLjM1NTk4NDc3NTMzNTQsIDI2MC42OTc3MzE0NDA1
MzYwMiwgMjYwLjYzNTU1OTc2Njg5OTk3LCAyNTkuMzg2MjE0NDQzNzkzMjIsIDI1OS41NDc3ODk5
MDQ5NzU1NiwgMjU5LjQ5NjkzOTI1NzcyNDA4LCAyNTYuODEzNTg1NDM0MjQ3MjIsIDI1OC45Njk0
MDUzNTE1MTgzMywgMjU5LjI2NjUwOTExMTY1NDE2LCAyNjAuNjg3NTM3MzQ0NTg5NjYsIDI1OS41
OTk2NzEzNjg5NzQxNiwgMjYwLjgzMjcwODM3MzM1NDc2LCAyNjAuODQzOTM0NDIzNTYwMjYsIDI1
OS41NzQwNjQ5MDA5NDkxMSwgMjYwLjg2NjM4OTQyMzE4NzEyLCAyNjAuNDQ3ODY2MDE5MjkwMzYs
IDI2MC4yODY4NjIyMTQwNTk1NywgMjU5LjUzMzk4MDg1NTA4MTUsIDI1OS41MDI5OTk4NDY1NTUy
MSwgMjYwLjc1MTQzMzUyNjQ1MDRdLCAic3RkZXYiOiAwLjk2NTM2MDA1MTM5MzEyOTE5LCAiYXZn
IjogMjU5LjkwNDg1ODM4OTEzNjg1LCAidW5pdCI6ICJydW5zL3MifX0sICJwbGF0Zm9ybSI6ICJj
aHJvbWl1bSIsICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjog
IjE2MjMyMiJ9LCB7InRpbWVzdGFtcCI6IDEzNTA1MjE2MTcsICJ3ZWJraXQtcmV2aXNpb24iOiAi
MTMxNjc0IiwgInJlc3VsdHMiOiB7IkJpbmRpbmdzL3Njcm9sbC10b3A6TWFsbG9jIjogeyJtaW4i
OiAwLjAsICJtYXgiOiAwLjAsICJtZWRpYW4iOiAwLjAsICJ2YWx1ZXMiOiBbMC4wLCAwLjAsIDAu
MCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAs
IDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjBdLCAic3RkZXYiOiAwLjAsICJhdmciOiAwLjAs
ICJ1bml0IjogImJ5dGVzIn0sICJCaW5kaW5ncy9zY3JvbGwtdG9wOkpTSGVhcCI6IHsibWluIjog
MTM1NTk2OC4wLCAibWF4IjogMTM5NjU1Mi4wLCAibWVkaWFuIjogMTM2MjgzNi4wLCAidmFsdWVz
IjogWzEzOTY1NTIuMCwgMTM5Mjc5Mi4wLCAxMzkxNDgwLjAsIDEzNjQ2MDAuMCwgMTM1NTk2OC4w
LCAxMzU4NzYwLjAsIDEzNTc0NjQuMCwgMTM1NzY1Ni4wLCAxMzYxMDcyLjAsIDEzNjE0MjQuMCwg
MTM2MTExMi4wLCAxMzYwMjE2LjAsIDEzNjA1MTIuMCwgMTM2MTA0OC4wLCAxMzY0MjU2LjAsIDEz
NjQ1NDQuMCwgMTM2NDI5Ni4wLCAxMzY0MjQ4LjAsIDEzNjY0ODguMCwgMTM2NjA2NC4wXSwgInN0
ZGV2IjogMTIwNTQuNjg0MjM2NTE1OTIxLCAiYXZnIjogMTM2NjUyNy41OTk5OTk5OTk5LCAidW5p
dCI6ICJieXRlcyJ9LCAiQmluZGluZ3Mvc2Nyb2xsLXRvcCI6IHsibWluIjogMjYxLjExNzM5OTY2
NzEzMDcxLCAibWF4IjogMjc2LjAwNjM4ODMwOTI0Mjg4LCAibWVkaWFuIjogMjc0LjcyNTMxMTcy
NTU3NDczLCAidmFsdWVzIjogWzI3Ni4wMDYzODgzMDkyNDI4OCwgMjc1LjY3MDU2ODY5MzgwODM4
LCAyNzYuMDAzNjE4MjMxOTc3NTUsIDI3NS42NzI5ODY2NTIyNjE2NywgMjc1Ljg3OTAxOTUzOTA1
MzMzLCAyNzQuMzk1OTg1ODUyNzcyODcsIDI3NS43MjIwNDcxMzYyMDU2NywgMjc0LjI5NDcxOTc0
Mzk5ODQzLCAyNzUuNDA1NTM0NTk1NjEzNCwgMjc0LjgyNjE3MjQ2NjA1MzQ5LCAyNzUuOTg5NzY4
Mjc2NTgzNSwgMjc0LjYyNDQ1MDk4NTA5NTk2LCAyNzUuODk5Nzc4MTYxNTQ1MzMsIDI3NC4zNTI1
MjgwMzgyMDkzLCAyNzMuNjExNzYyMzI1MjM5MzQsIDI2Mi41MDgxODcwMDk2ODIwNSwgMjYxLjIx
NzY2NjA5ODgwNDU2LCAyNjEuMzE0OTM2NzM1Mjc4NTQsIDI2MS4yMzEzMTM4NDk1NDc1OCwgMjYx
LjExNzM5OTY2NzEzMDcxXSwgInN0ZGV2IjogNi4xNTAyOTQ2Mjg1MjMwNjQ0LCAiYXZnIjogMjcx
Ljc4NzI0MTYxODQwNTI5LCAidW5pdCI6ICJydW5zL3MifX0sICJwbGF0Zm9ybSI6ICJjaHJvbWl1
bSIsICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImNocm9taXVtLXJldmlzaW9uIjogIjE2MjMy
MiJ9XTwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>